--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/sort/SortTest.java Thu Feb 01 15:53:51 2018 -0800
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package transform.sort;
+
+import static jaxp.library.JAXPTestUtilities.getSystemProperty;
+import java.io.StringWriter;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Templates;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Listeners;
+import org.testng.annotations.Test;
+
+/*
+ * @test
+ * @bug 8193830
+ * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
+ * @run testng/othervm -DrunSecMngr=true transform.sort.SortTest
+ * @run testng/othervm transform.sort.SortTest
+ * @summary verify xsl:sort lang attribute
+ */
+@Listeners({jaxp.library.FilePolicy.class})
+public class SortTest {
+
+ static final String LAND_EN = "en";
+ static final String LAND_PL = "pl";
+ static final String LAND_RU = "ru";
+
+ String filepath;
+ String slash = "";
+
+ @BeforeClass
+ public void setUpClass() throws Exception {
+ String file1 = getClass().getResource("sort-alphabet-english.xml").getFile();
+ if (getSystemProperty("os.name").contains("Windows")) {
+ filepath = file1.substring(1, file1.lastIndexOf("/") + 1);
+ slash = "/";
+ } else {
+ filepath = file1.substring(0, file1.lastIndexOf("/") + 1);
+ }
+ }
+
+ /*
+ * DataProvider fields:
+ * lang, xml, xsl, gold file
+ */
+ @DataProvider(name = "parameters")
+ public Object[][] getParameters() {
+
+ return new Object[][]{
+ {LAND_EN, "sort-alphabet-english.xml", "sort-alphabet-english.xsl", "sort-alphabet-english.out"},
+ {LAND_PL, "sort-alphabet-polish.xml", "sort-alphabet-polish.xsl", "sort-alphabet-polish.out"},
+ {LAND_RU, "sort-alphabet-russian.xml", "sort-alphabet-russian.xsl", "sort-alphabet-russian.out"},};
+ }
+
+ @Test(dataProvider = "parameters")
+ public final void testTransform(String lang, String xml, String xsl, String gold)
+ throws Exception {
+
+ StringWriter sw = new StringWriter();
+ // Create transformer factory
+ TransformerFactory factory = TransformerFactory.newInstance();
+
+ // Use the factory to create a template containing the xsl file
+ Templates template = factory.newTemplates(new StreamSource(getClass().getResourceAsStream(xsl)));
+ // Use the template to create a transformer
+ Transformer xformer = template.newTransformer();
+ xformer.setParameter("lang", lang);
+ // Prepare the input and output files
+ Source source = new StreamSource(getClass().getResourceAsStream(xml));
+
+ /*
+ * The following may be used to produce gold files.
+ * Using however the original gold files, and compare without considering
+ * the format
+ */
+ //String output = getClass().getResource(gold).getPath();
+ //Result result = new StreamResult(new FileOutputStream(output));
+ // use the following to verify the output against the pre-generated one
+ Result result = new StreamResult(sw);
+
+ // Apply the xsl file to the source file and write the result to the
+ // output file
+ xformer.transform(source, result);
+
+ String out = sw.toString();
+
+ List<String> lines = Files.readAllLines(Paths.get(filepath + gold));
+ String[] resultLines = out.split("\n");
+ int i = 0;
+
+ // the purpose is to test sort, so ignore the format of the output
+ for (String line : lines) {
+ Assert.assertEquals(resultLines[i++].trim(), line.trim());
+ }
+ }
+}