< prev index next >

test/javax/xml/jaxp/unittest/transform/TransformerTest.java

Print this page
rev 1063 : 8172974: [JAXP] XALAN: Wrong result when transforming namespace unaware StAX Input

*** 1,7 **** /* ! * Copyright (c) 2014, 2016, 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. --- 1,7 ---- /* ! * Copyright (c) 2014, 2017, 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.
*** 36,56 **** --- 36,63 ---- import java.io.StringWriter; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParserFactory; + import javax.xml.stream.XMLInputFactory; + import javax.xml.stream.XMLStreamException; + import javax.xml.transform.Source; + import javax.xml.transform.Templates; import javax.xml.transform.Transformer; + import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.sax.SAXSource; + import javax.xml.transform.stax.StAXSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.testng.Assert; import org.testng.AssertJUnit; + import org.testng.annotations.DataProvider; import org.testng.annotations.Listeners; import org.testng.annotations.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node;
*** 73,83 **** * @test * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest * @run testng/othervm -DrunSecMngr=true transform.TransformerTest * @run testng/othervm transform.TransformerTest * @summary Transformer Tests ! * @bug 6272879 6305029 6505031 8150704 8162598 8169112 8169631 8169772 */ @Listeners({jaxp.library.FilePolicy.class}) public class TransformerTest { // some global constants --- 80,90 ---- * @test * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest * @run testng/othervm -DrunSecMngr=true transform.TransformerTest * @run testng/othervm transform.TransformerTest * @summary Transformer Tests ! * @bug 6272879 6305029 6505031 8150704 8162598 8169112 8169631 8169772 8172974 */ @Listeners({jaxp.library.FilePolicy.class}) public class TransformerTest { // some global constants
*** 89,99 **** private static final String NAMESPACE_PREFIXES = "http://xml.org/sax/features/namespace-prefixes"; private static abstract class TestTemplate { ! protected void printSnippet(String title, String snippet) { StringBuilder div = new StringBuilder(); for (int i = 0; i < title.length(); i++) div.append("="); System.out.println(title + "\n" + div + "\n" + snippet + "\n"); } --- 96,106 ---- private static final String NAMESPACE_PREFIXES = "http://xml.org/sax/features/namespace-prefixes"; private static abstract class TestTemplate { ! protected static void printSnippet(String title, String snippet) { StringBuilder div = new StringBuilder(); for (int i = 0; i < title.length(); i++) div.append("="); System.out.println(title + "\n" + div + "\n" + snippet + "\n"); }
*** 328,338 **** t.transform(new StreamSource(getClass().getResource("template.xml").toString()), new StreamResult(sw)); String s = sw.toString(); Assert.assertTrue(s.contains("map1key1value") && s.contains("map2key1value")); } ! private static class Test8169631 extends TestTemplate { private final static String xsl = "<?xml version=\"1.0\"?>" + LINE_SEPARATOR + "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">" + LINE_SEPARATOR + " <xsl:template match=\"/\">" + LINE_SEPARATOR + " <xsl:variable name=\"Counter\" select=\"count(//row)\"/>" + LINE_SEPARATOR + --- 335,345 ---- t.transform(new StreamSource(getClass().getResource("template.xml").toString()), new StreamResult(sw)); String s = sw.toString(); Assert.assertTrue(s.contains("map1key1value") && s.contains("map2key1value")); } ! public static class Test8169631And8172974 extends TestTemplate { private final static String xsl = "<?xml version=\"1.0\"?>" + LINE_SEPARATOR + "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">" + LINE_SEPARATOR + " <xsl:template match=\"/\">" + LINE_SEPARATOR + " <xsl:variable name=\"Counter\" select=\"count(//row)\"/>" + LINE_SEPARATOR +
*** 375,450 **** result.contains("<AttribCounter>" + attribCount + "</AttribCounter>"), true, "Result of transformation from " + type + " should have count of "+ attribCount + " attributes."); } ! public void run() throws IOException, TransformerException, ! SAXException, ParserConfigurationException { ! printSnippet("Source:", sourceXml); ! printSnippet("Stylesheet:", xsl); ! // create default transformer (namespace aware) ! TransformerFactory tf1 = TransformerFactory.newInstance(); ! ByteArrayInputStream bais = new ByteArrayInputStream(xsl.getBytes()); ! Transformer t1 = tf1.newTransformer(new StreamSource(bais)); ! // test transformation from stream source with namespace support ! ByteArrayOutputStream baos = new ByteArrayOutputStream(); ! bais = new ByteArrayInputStream(sourceXml.getBytes()); ! t1.transform(new StreamSource(bais), new StreamResult(baos)); ! verifyResult("StreamSource with namespace support", baos.toString(), 0, 1); ! ! // test transformation from DOM source with namespace support ! bais.reset(); ! baos.reset(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); ! Document doc = dbf.newDocumentBuilder().parse(new InputSource(bais)); ! t1.transform(new DOMSource(doc), new StreamResult(baos)); ! verifyResult("DOMSource with namespace support", baos.toString(), 0, 1); ! ! // test transformation from DOM source without namespace support ! bais.reset(); ! baos.reset(); ! dbf.setNamespaceAware(false); ! doc = dbf.newDocumentBuilder().parse(new InputSource(bais)); ! t1.transform(new DOMSource(doc), new StreamResult(baos)); ! verifyResult("DOMSource without namespace support", baos.toString(), 3, 3); ! ! // test transformation from SAX source with namespace support ! bais.reset(); ! baos.reset(); SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(true); ! XMLReader xmlr = spf.newSAXParser().getXMLReader(); ! SAXSource saxS = new SAXSource(xmlr, new InputSource(bais)); ! t1.transform(saxS, new StreamResult(baos)); ! verifyResult("SAXSource with namespace support", baos.toString(), 0, 1); ! ! // test transformation from SAX source without namespace support ! bais.reset(); ! baos.reset(); ! spf.setNamespaceAware(false); ! xmlr = spf.newSAXParser().getXMLReader(); ! saxS = new SAXSource(xmlr, new InputSource(bais)); ! t1.transform(saxS, new StreamResult(baos)); ! verifyResult("SAXSource without namespace support", baos.toString(), 3, 3); ! } ! } ! /* ! * @bug 8169631 ! * @summary Test combinations of namespace awareness settings on ! * XSL transformations ! */ ! @Test ! public final void testBug8169631() throws IOException, SAXException, ! TransformerException, ParserConfigurationException ! { ! new Test8169631().run(); } /* * @bug 8150704 * @summary Test that XSL transformation with lots of temporary result --- 382,510 ---- result.contains("<AttribCounter>" + attribCount + "</AttribCounter>"), true, "Result of transformation from " + type + " should have count of "+ attribCount + " attributes."); } ! // utility to obtain Transformer from TransformerFactory ! private static Transformer getTransformer(TransformerFactory tf) ! throws TransformerConfigurationException { ! return tf.newTransformer( ! new StreamSource(new ByteArrayInputStream(xsl.getBytes())) ! ); ! } ! // utility to obtain Templates from TransformerFactory ! private static Templates getTemplates(TransformerFactory tf) ! throws TransformerConfigurationException ! { ! return tf.newTemplates( ! new StreamSource(new ByteArrayInputStream(xsl.getBytes())) ! ); ! } ! // utility to construct StreamSource ! private static StreamSource getStreamSource() { ! return new StreamSource( ! new ByteArrayInputStream(sourceXml.getBytes()) ! ); ! } ! // utility to construct DOMSource from DocumentBuilderFactory ! private static DOMSource getDOMSource(DocumentBuilderFactory dbf) ! throws SAXException, IOException, ParserConfigurationException ! { ! return new DOMSource( ! dbf.newDocumentBuilder().parse( ! new InputSource( ! new ByteArrayInputStream(sourceXml.getBytes()) ! ) ! ) ! ); ! } ! ! // utility to construct SAXSource from SAXParserFactory ! private static SAXSource getSAXSource(SAXParserFactory spf) ! throws SAXException, ParserConfigurationException ! { ! return new SAXSource( ! spf.newSAXParser().getXMLReader(), ! new InputSource(new ByteArrayInputStream(sourceXml.getBytes())) ! ); ! } ! ! // utility to construct StAXSource from XMLInputFactory ! private static StAXSource getStAXSource(XMLInputFactory xif) ! throws XMLStreamException ! { ! return new StAXSource( ! xif.createXMLStreamReader(new StringReader(sourceXml)) ! ); ! } ! ! @DataProvider(name = "testmatrix") ! public static Object[][] documentTestData() ! throws TransformerConfigurationException, SAXException, IOException, ! ParserConfigurationException, XMLStreamException ! { ! // get Transformers ! TransformerFactory tf = TransformerFactory.newInstance(); ! Transformer t = getTransformer(tf); ! Transformer tFromTemplates = getTemplates(tf).newTransformer(); ! ! // get DOMSource objects DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DOMSource domSourceWithoutNS = getDOMSource(dbf); dbf.setNamespaceAware(true); ! DOMSource domSourceWithNS = getDOMSource(dbf); ! ! // get SAXSource objects SAXParserFactory spf = SAXParserFactory.newInstance(); + SAXSource saxSourceWithoutNS = getSAXSource(spf); spf.setNamespaceAware(true); ! SAXSource saxSourceWithNS = getSAXSource(spf); ! // get StAXSource objects ! XMLInputFactory xif = XMLInputFactory.newInstance(); ! StAXSource staxSourceWithNS = getStAXSource(xif); ! xif.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false); ! StAXSource staxSourceWithoutNS = getStAXSource(xif); ! ! // print XML/XSL snippets to ease understanding of result ! printSnippet("Source:", sourceXml); ! printSnippet("Stylesheet:", xsl); ! ! return new Object[][] { ! // test StreamSource input with all transformers ! // namespace awareness is set by transformer ! {t, getStreamSource(), "StreamSource with namespace support", 0, 1}, ! {tFromTemplates, getStreamSource(), "StreamSource with namespace support using templates", 0, 1}, ! // now test DOMSource, SAXSource and StAXSource ! // with rotating use of created transformers ! // namespace awareness is set by source objects ! {t, domSourceWithNS, "DOMSource with namespace support", 0, 1}, ! {t, domSourceWithoutNS, "DOMSource without namespace support", 3, 3}, ! {tFromTemplates, saxSourceWithNS, "SAXSource with namespace support", 0, 1}, ! {tFromTemplates, saxSourceWithoutNS, "SAXSource without namespace support", 3, 3}, ! {t, staxSourceWithNS, "StAXSource with namespace support", 0, 1}, ! {t, staxSourceWithoutNS, "StAXSource without namespace support", 3, 3} ! }; ! } ! ! /* ! * @bug 8169631 8172974 ! * @summary Test combinations of namespace awareness settings on ! * XSL transformations ! */ ! @Test(dataProvider = "testmatrix") ! public void run(Transformer t, Source s, String label, int elementcount, int attributecount) ! throws TransformerException ! { ! ByteArrayOutputStream baos = new ByteArrayOutputStream(); ! t.transform(s, new StreamResult(baos)); ! verifyResult(label, baos.toString(), elementcount, attributecount); ! } } /* * @bug 8150704 * @summary Test that XSL transformation with lots of temporary result
< prev index next >