blob: 0568bca28bf93e172cddeb7901bce997586a8a16 [file] [log] [blame]
/*
* 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.
*
* 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 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.FactoryConfigurationError;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.util.StreamReaderDelegate;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
/*
* @test
* @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
* @run testng/othervm -DrunSecMngr=true stream.StreamReaderDelegateTest
* @run testng/othervm stream.StreamReaderDelegateTest
* @summary Test StreamReaderDelegate.
*/
@Listeners({jaxp.library.FilePolicy.class})
public class StreamReaderDelegateTest {
/**
* Tested xml file looks as below: <?xml version="1.0" standalone="no" ?>
* <ns1:foo attr1="defaultAttr1" ns1:attr1="ns1Attr1" ns2:attr1="ns2Attr1"
* attr2="defaultAttr2" attr3="defaultAttr3" xmlns:ns1="http://ns1.java.com"
* xmlns:ns2="http://ns2.java.com"> <!--description--> content text
* <![CDATA[<greeting>Hello</greeting>]]> other content </ns1:foo>
**/
@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: <?xml version="1.0" encoding="UTF-8"?>
* <ns1:foo xmlns:ns="http://ns1.java.com" xmlns:ns1="http://ns1.java.com"
* xmlns:ns2="http://ns2.java.com" > <!--description-->content text
* <![CDATA[<greeting>Hello</greeting>]]> other content </ns1:foo>
**/
@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()");
}
}
}
/**
* <?xml version="1.0" encoding="utf-8" ?> <ns1:foo
* xmlns:ns1="http://ns1.java.com" xmlns:ns2="http://ns2.java.com">
* <!--description--> content text <![CDATA[<greeting>Hello</greeting>]]>
* other content </ns1:foo>
**/
@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 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<?" + PITarget + " " + PIData + "?>" + "<foo></foo>";
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()");
}
}
}
}