package stream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.StringReader;
import javax.xml.stream.*;
import org.codehaus.stax2.XMLInputFactory2;
import org.codehaus.stax2.XMLStreamReader2;
public class TestSimple extends base.BaseTestCase
{
private final XMLInputFactory2 F2 = getNewInputFactory();
public void testNamespacesBytes() throws Exception {
_testNamespaces(true);
}
public void testNamespacesChars() throws Exception {
_testNamespaces(false);
}
public void _testNamespaces(boolean useBytes) throws Exception
{
// note: must specify encoding so parsers knows which decoder to use
String DOC = "<root xmlns='abc' xmlns:a='b' xmlns:b='c'>\n</root>";
XMLStreamReader2 sr = createReader(DOC, "UTF-8", useBytes);
assertTokenType(START_DOCUMENT, sr.getEventType());
assertTokenType(START_ELEMENT, sr.next());
assertEquals("root", sr.getLocalName());
assertEquals(3, sr.getNamespaceCount());
/* Although Stax does not mandate that ordering of namespace
* declarations is preserved, ideally we would want to have them
* that way...
*/
assertEquals("", sr.getNamespacePrefix(0));
assertEquals("abc", sr.getNamespaceURI(0));
assertEquals("a", sr.getNamespacePrefix(1));
assertEquals("b", sr.getNamespaceURI(1));
assertEquals("b", sr.getNamespacePrefix(2));
assertEquals("c", sr.getNamespaceURI(2));
// Aalto follows Woodstox, and by default reports token start loc for "getLocation()"
Location loc = sr.getLocation();
assertEquals(1, loc.getLineNumber());
assertEquals(1, loc.getColumnNumber());
assertEquals(0, loc.getCharacterOffset());
// and end should differ a bit
loc = sr.getLocationInfo().getEndLocation();
assertEquals(1, loc.getLineNumber());
assertEquals(43, loc.getColumnNumber());
assertEquals(42, loc.getCharacterOffset());
assertTokenType(CHARACTERS, sr.next());
assertEquals("\n", sr.getText());
loc = sr.getLocation();
assertEquals(1, loc.getLineNumber());
assertEquals(43, loc.getColumnNumber());
assertEquals(42, loc.getCharacterOffset());
loc = sr.getLocationInfo().getEndLocation();
assertEquals(2, loc.getLineNumber());
assertEquals(1, loc.getColumnNumber());
assertEquals(43, loc.getCharacterOffset());
assertTokenType(END_ELEMENT, sr.next());
assertEquals("root", sr.getLocalName());
assertEquals(useBytes ? -1L : 43L, sr.getLocationInfo().getStartingCharOffset());
assertEquals(useBytes ? 43L : -1L, sr.getLocationInfo().getStartingByteOffset());
assertEquals(useBytes ? -1L : 50L, sr.getLocationInfo().getEndingCharOffset());
assertEquals(useBytes ? 50L : -1L, sr.getLocationInfo().getEndingByteOffset());
loc = sr.getLocation();
assertEquals(1, loc.getColumnNumber());
assertEquals(2, loc.getLineNumber());
assertEquals(43, loc.getCharacterOffset());
assertTokenType(END_DOCUMENT, sr.next());
loc = sr.getLocation();
assertEquals(2, loc.getLineNumber());
assertEquals(8, loc.getColumnNumber());
assertEquals(50, loc.getCharacterOffset());
sr.close();
}
/*
/**********************************************************************
/* Helper methods
/**********************************************************************
*/
XMLStreamReader2 createReader(String content, String enc, boolean useBytes)
throws IOException, XMLStreamException
{
if (useBytes) {
byte[] data = content.getBytes(enc);
return (XMLStreamReader2) F2.createXMLStreamReader(new ByteArrayInputStream(data));
}
return (XMLStreamReader2) F2.createXMLStreamReader(new StringReader(content));
}
}