--- /dev/null Mon Nov 17 20:01:52 2014 +++ new/test/javax/xml/jaxp/unittest/javax/xml/stream/StreamReaderDelegateTest.java Mon Nov 17 20:01:50 2014 @@ -0,0 +1,374 @@ +/* + * Copyright (c) 2014, 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 javax.xml.stream; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.Iterator; + +import javax.xml.namespace.NamespaceContext; +import javax.xml.stream.util.StreamReaderDelegate; + +import org.testng.Assert; +import org.testng.annotations.Test; + +/* + * @summary Test StreamReaderDelegate. + */ +public class StreamReaderDelegateTest { + + /** + * Tested xml file looks as below: + * content text + * Hello]]> other content + **/ + @Test + public void testAttribute() { + StreamReaderDelegate delegate = null; + try { + System.out.println("===in testAttribute()==="); + XMLInputFactory ifac = XMLInputFactory.newFactory(); + XMLStreamReader reader = ifac.createXMLStreamReader(new FileInputStream(new File(getClass().getResource("testfile1.xml").getFile()))); + delegate = new StreamReaderDelegate(reader); + + Assert.assertTrue(delegate.standaloneSet()); + Assert.assertFalse(delegate.isStandalone()); + while (delegate.hasNext()) { + delegate.next(); + if (delegate.getEventType() == XMLStreamConstants.START_ELEMENT || delegate.getEventType() == XMLStreamConstants.ATTRIBUTE) { + if (delegate.getLocalName().equals("foo")) { + Assert.assertTrue(delegate.getAttributeCount() == 5); + Assert.assertTrue(delegate.getAttributeType(1) == "CDATA"); + + Assert.assertTrue(delegate.getAttributeValue(0).equals("defaultAttr1")); + Assert.assertTrue(delegate.getAttributeValue(delegate.getAttributeCount() - 2).equals("defaultAttr2")); + Assert.assertTrue(delegate.getAttributeValue(delegate.getAttributeCount() - 1).equals("defaultAttr3")); + + Assert.assertTrue(delegate.getAttributeValue("http://ns1.java.com", "attr1").equals("ns1Attr1")); + Assert.assertTrue(delegate.getAttributeValue("http://ns2.java.com", "attr1").equals("ns2Attr1")); + + Assert.assertTrue(delegate.getAttributeValue(null, "attr2").equals("defaultAttr2")); + Assert.assertTrue(delegate.getAttributeValue(null, "attr3").equals("defaultAttr3")); + + Assert.assertTrue(delegate.getAttributeNamespace(0) == null); + Assert.assertTrue(delegate.getAttributeNamespace(1).equals("http://ns1.java.com")); + Assert.assertTrue(delegate.getAttributePrefix(1).equals("ns1")); + Assert.assertTrue(delegate.getAttributeName(1).toString() + .equals("{" + delegate.getAttributeNamespace(1) + "}" + delegate.getAttributeLocalName(1))); + Assert.assertTrue(delegate.getAttributeLocalName(1).equals("attr1")); + + // negative test. Should return null for out of + // attribute array index + Assert.assertTrue(delegate.getAttributeNamespace(delegate.getAttributeCount()) == null); + Assert.assertTrue(delegate.getAttributePrefix(delegate.getAttributeCount()) == null); + Assert.assertTrue(delegate.getAttributeName(delegate.getAttributeCount()) == null); + Assert.assertTrue(delegate.getAttributeLocalName(delegate.getAttributeCount()) == null); + Assert.assertTrue(delegate.getAttributeType(delegate.getAttributeCount()) == null); + } + } else { + try { + delegate.getAttributeCount(); + } catch (IllegalStateException e) { + System.out.println("expected exception for incorrect event type"); + } + } + + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + Assert.fail("FileNotFoundException in testAttribute()"); + } catch (XMLStreamException e) { + e.printStackTrace(); + System.out.println(delegate.getLocation()); + Assert.fail("XMLStreamException in testAttribute()"); + } catch (FactoryConfigurationError e) { + e.printStackTrace(); + Assert.fail("FactoryConfigurationError in testAttribute()"); + } finally { + try { + delegate.close(); + } catch (XMLStreamException e) { + e.printStackTrace(); + Assert.fail("XMLStreamException in testAttribute()"); + } + } + } + + /** + * Tested xml file looks as below: + * content text + * Hello]]> other content + **/ + @Test + public void testNamespace() { + StreamReaderDelegate delegate = null; + try { + System.out.println("===in testNamespace()==="); + XMLStreamReader reader = XMLInputFactory.newFactory().createXMLStreamReader( + new FileInputStream(new File(getClass().getResource("testfile2.xml").getFile()))); + delegate = new StreamReaderDelegate(); + delegate.setParent(reader); + while (delegate.hasNext()) { + delegate.next(); + if (delegate.getEventType() == XMLStreamConstants.START_ELEMENT || delegate.getEventType() == XMLStreamConstants.ATTRIBUTE) { + + if (delegate.getName().getLocalPart().equals("foo")) { + Assert.assertTrue(("{" + delegate.getNamespaceURI(delegate.getPrefix()) + "}" + delegate.getLocalName()).equals(delegate.getName() + .toString())); + System.out.println(delegate.getLocation()); + + Assert.assertTrue(delegate.getNamespaceCount() == 3); + Assert.assertTrue(delegate.getNamespaceURI().equals("http://ns1.java.com")); + Assert.assertTrue(delegate.getNamespaceURI(2).equals("http://ns2.java.com")); + Assert.assertTrue(delegate.getNamespaceURI("ns").equals("http://ns1.java.com")); + + Assert.assertTrue(delegate.getNamespacePrefix(1).equals("ns1")); + + NamespaceContext nsCtx = delegate.getNamespaceContext(); + nsCtx.getNamespaceURI("ns"); + Iterator prefixes = nsCtx.getPrefixes("http://ns1.java.com"); + boolean hasns = false; + boolean hasns1 = false; + while (prefixes.hasNext()) { + String prefix = (String) prefixes.next(); + if (prefix.equals("ns")) { + hasns = true; + } else if (prefix.equals("ns1")) { + hasns1 = true; + } + } + Assert.assertTrue(hasns && hasns1); + } + } + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + Assert.fail("FileNotFoundException in testNamespace()"); + } catch (XMLStreamException e) { + e.printStackTrace(); + System.out.println(delegate.getLocation()); + Assert.fail("XMLStreamException in testNamespace()"); + } catch (FactoryConfigurationError e) { + e.printStackTrace(); + Assert.fail("FactoryConfigurationError in testNamespace()"); + } finally { + try { + delegate.close(); + } catch (XMLStreamException e) { + e.printStackTrace(); + Assert.fail("XMLStreamException in testNamespace()"); + } + } + } + + /** + * + * content text Hello]]> + * other content + **/ + @Test + public void testText() { + String property = "javax.xml.stream.isCoalescing"; + System.out.println("===in testText()===="); + StreamReaderDelegate delegate = null; + try { + XMLInputFactory ifac = XMLInputFactory.newFactory(); + ifac.setProperty(property, Boolean.TRUE); + XMLStreamReader reader = ifac.createXMLStreamReader(new FileInputStream(new File(getClass().getResource("testfile3.xml").getFile())), "iso8859-1"); + delegate = new StreamReaderDelegate(); + delegate.setParent(reader); + + Assert.assertTrue(delegate.getParent().equals(reader)); + Assert.assertTrue(delegate.getProperty(property).equals(Boolean.TRUE)); + Assert.assertTrue(delegate.getCharacterEncodingScheme().equalsIgnoreCase("utf-8")); + Assert.assertTrue(delegate.getEncoding().equalsIgnoreCase("iso8859-1")); + Assert.assertTrue(delegate.getVersion().equals("1.0")); + while (delegate.hasNext()) { + delegate.next(); + if (delegate.getEventType() == XMLStreamConstants.CHARACTERS) { + char[] target1 = new char[delegate.getTextLength()]; + delegate.getTextCharacters(delegate.getTextStart(), target1, 0, target1.length); + char[] target2 = delegate.getTextCharacters(); + + Assert.assertTrue(delegate.getText().trim().equals(new String(target1).trim())); + Assert.assertTrue(delegate.getText().trim().equals(new String(target2).trim())); + } + } + + } catch (FileNotFoundException e) { + e.printStackTrace(); + Assert.fail("FileNotFoundException in testText()"); + } catch (XMLStreamException e) { + e.printStackTrace(); + System.out.println(delegate.getLocation()); + Assert.fail("XMLStreamException in testText()"); + } catch (FactoryConfigurationError e) { + e.printStackTrace(); + Assert.fail("FactoryConfigurationError in testText()"); + } finally { + try { + delegate.close(); + } catch (XMLStreamException e) { + e.printStackTrace(); + Assert.fail("XMLStreamException in testText()"); + } + } + } + + @Test + public void testWhiteSpace() { + System.out.println("===in testWhiteSpace()==="); + StreamReaderDelegate delegate = null; + try { + XMLInputFactory ifac = XMLInputFactory.newFactory(); + ifac.setProperty("javax.xml.stream.isCoalescing", Boolean.TRUE); + XMLStreamReader reader = ifac.createXMLStreamReader(new FileInputStream(new File(getClass().getResource("testfile4.xml").getFile()))); + + delegate = new StreamReaderDelegate(); + delegate.setParent(reader); + while (delegate.hasNext()) { + int i = delegate.next(); + switch (i) { + case XMLStreamConstants.CHARACTERS: { + Assert.assertTrue(delegate.isCharacters()); + Assert.assertTrue(delegate.hasText()); + Assert.assertTrue(delegate.isWhiteSpace()); + break; + } + case XMLStreamConstants.START_ELEMENT: { + Assert.assertTrue(delegate.isStartElement()); + Assert.assertTrue(delegate.isAttributeSpecified(0)); + Assert.assertTrue(delegate.hasName()); + delegate.require(XMLStreamConstants.START_ELEMENT, delegate.getNamespaceURI(), delegate.getLocalName()); + break; + } + case XMLStreamConstants.END_ELEMENT: { + Assert.assertTrue(delegate.isEndElement()); + Assert.assertTrue(delegate.hasName()); + delegate.require(XMLStreamConstants.END_ELEMENT, delegate.getNamespaceURI(), delegate.getLocalName()); + break; + } + } + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + Assert.fail("FileNotFoundException in testWhiteSpace()"); + } catch (XMLStreamException e) { + e.printStackTrace(); + System.out.println(delegate.getLocation()); + Assert.fail("XMLStreamException in testWhiteSpace()"); + } catch (FactoryConfigurationError e) { + e.printStackTrace(); + Assert.fail("FactoryConfigurationError in testWhiteSpace()"); + } finally { + try { + delegate.close(); + } catch (XMLStreamException e) { + e.printStackTrace(); + Assert.fail("XMLStreamException in testWhitespace()"); + } + } + + } + + @Test + public void testElementText() { + System.out.println("===in testElementText()==="); + StreamReaderDelegate delegate = null; + try { + XMLInputFactory ifac = XMLInputFactory.newFactory(); + XMLStreamReader reader = ifac.createXMLStreamReader(new FileInputStream(new File(getClass().getResource("toys.xml").getFile()))); + + delegate = new StreamReaderDelegate(); + delegate.setParent(reader); + while (delegate.hasNext()) { + if (delegate.getEventType() == XMLStreamConstants.START_ELEMENT) { + if (delegate.getLocalName().equals("name") || delegate.getLocalName().equals("price")) { + System.out.println(delegate.getElementText()); + } + delegate.nextTag(); + } else { + delegate.next(); + } + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + Assert.fail("FileNotFoundException in testElementText()"); + } catch (XMLStreamException e) { + e.printStackTrace(); + System.out.println(delegate.getLocation()); + Assert.fail("XMLStreamException in testElementText()"); + } catch (FactoryConfigurationError e) { + e.printStackTrace(); + Assert.fail("FactoryConfigurationError in testElementText()"); + } finally { + try { + delegate.close(); + } catch (XMLStreamException e) { + e.printStackTrace(); + Assert.fail("XMLStreamException in testElementText()"); + } + } + } + + @Test + public void testPITargetAndData() { + System.out.println("===in testPITargetAndData()==="); + StreamReaderDelegate delegate = null; + try { + XMLInputFactory xif = XMLInputFactory.newInstance(); + String PITarget = "soffice"; + String PIData = "WebservicesArchitecture"; + String xml = "" + "" + ""; + InputStream is = new java.io.ByteArrayInputStream(xml.getBytes()); + XMLStreamReader sr = xif.createXMLStreamReader(is); + delegate = new StreamReaderDelegate(sr); + while (delegate.hasNext()) { + int eventType = delegate.next(); + if (eventType == XMLStreamConstants.PROCESSING_INSTRUCTION) { + String target = delegate.getPITarget(); + String data = delegate.getPIData(); + Assert.assertTrue(target.equals(PITarget)); + Assert.assertTrue(data.equals(PIData)); + } + } + } catch (Exception ex) { + ex.printStackTrace(); + Assert.fail("Exception in testPITargetAndData()"); + } finally { + try { + delegate.close(); + } catch (XMLStreamException e) { + e.printStackTrace(); + Assert.fail("XMLStreamException in testPITargetAndData()"); + } + } + } +}