PullParserTest.java revision fda724de28fe86804e6ef6a0afd7ae5be1529083
1b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson/* 2b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * Copyright (C) 2010 The Android Open Source Project 3b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * 4b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 5b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * you may not use this file except in compliance with the License. 6b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * You may obtain a copy of the License at 7b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * 8b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 9b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * 10b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * Unless required by applicable law or agreed to in writing, software 11b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 12b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * See the License for the specific language governing permissions and 14b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * limitations under the License. 15b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson */ 16b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 17b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilsonpackage org.apache.harmony.xml; 18b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 19b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilsonimport java.io.ByteArrayInputStream; 20b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilsonimport java.io.IOException; 21b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilsonimport java.io.StringReader; 22b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilsonimport junit.framework.TestCase; 23b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilsonimport org.xmlpull.v1.XmlPullParser; 24b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilsonimport org.xmlpull.v1.XmlPullParserException; 25b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 26b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilsonpublic abstract class PullParserTest extends TestCase { 27b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 28406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testAttributeNoValueWithRelaxed() throws Exception { 29406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 30406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setFeature("http://xmlpull.org/v1/doc/features.html#relaxed", true); 31406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<input checked></input>")); 32406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 33406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("input", parser.getName()); 34406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("checked", parser.getAttributeName(0)); 35406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("checked", parser.getAttributeValue(0)); 36406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 37406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 38406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testAttributeUnquotedValueWithRelaxed() throws Exception { 39406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 40406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setFeature("http://xmlpull.org/v1/doc/features.html#relaxed", true); 41406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<input checked=true></input>")); 42406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 43406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("input", parser.getName()); 44406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("checked", parser.getAttributeName(0)); 45406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("true", parser.getAttributeValue(0)); 46406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 47406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 48406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testUnterminatedEntityWithRelaxed() throws Exception { 49406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 50406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setFeature("http://xmlpull.org/v1/doc/features.html#relaxed", true); 51406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo bar='A&W'>mac&cheese</foo>")); 52406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 53406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("foo", parser.getName()); 54406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("bar", parser.getAttributeName(0)); 55406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("A&W", parser.getAttributeValue(0)); 56406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 57406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("mac&cheese", parser.getText()); 58406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 59406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 60406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testEntitiesAndNamespaces() throws Exception { 61406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 62406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setFeature("http://xmlpull.org/v1/doc/features.html#process-namespaces", true); 63406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader( 64406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson "<foo:a xmlns:foo='http://foo' xmlns:bar='http://bar'><bar:b/></foo:a>")); 65406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson testNamespace(parser); 66406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 67406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 68406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testEntitiesAndNamespacesWithRelaxed() throws Exception { 69406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 70406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setFeature("http://xmlpull.org/v1/doc/features.html#process-namespaces", true); 71406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setFeature("http://xmlpull.org/v1/doc/features.html#relaxed", true); 72406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader( 73406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson "<foo:a xmlns:foo='http://foo' xmlns:bar='http://bar'><bar:b/></foo:a>")); 74406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson testNamespace(parser); // TODO: end tag fails on gingerbread for relaxed mode 75406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 76406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 77406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson private void testNamespace(XmlPullParser parser) throws XmlPullParserException, IOException { 78406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 79406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("http://foo", parser.getNamespace()); 80406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("a", parser.getName()); 81406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 82406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("http://bar", parser.getNamespace()); 83406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("b", parser.getName()); 84406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.END_TAG, parser.next()); 85406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("http://bar", parser.getNamespace()); 86406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("b", parser.getName()); 87406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.END_TAG, parser.next()); 88406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("http://foo", parser.getNamespace()); 89406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("a", parser.getName()); 90406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 91406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 92406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testLargeNumericEntities() throws Exception { 93406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 94406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader( 95406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson "<foo>� &#-2147483648;</foo>")); 96406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 97406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 98406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson // TODO: this can't possibly be what the spec wants; it should refuse too-large characters 99406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(new String(new char[] { (char) 2147483647, ' ', (char) -2147483648}), 100406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.getText()); 101406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 102406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 103406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testVeryLargeNumericEntities() throws Exception { 104406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 105406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader( 106406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson "<foo>�</foo>")); 107406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 108fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson // TODO: this can't possibly be what the spec wants; it should throw another type 109fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertNextFails(parser); 110406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 111406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 112406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testOmittedNumericEntities() throws Exception { 113406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 114406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo>&#;</foo>")); 115406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 116fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson // TODO: this can't possibly be what the spec wants; it should throw another type 117fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertNextFails(parser); 118406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 119406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 120406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson /** 121406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson * Carriage returns followed by line feeds are silently discarded. 122406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson */ 123406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testCarriageReturnLineFeed() throws Exception { 124406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson testLineEndings("\r\n<foo\r\na='b\r\nc'\r\n>d\r\ne</foo\r\n>\r\n"); 125406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 126406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 127406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson /** 128406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson * Lone carriage returns are treated like newlines. 129406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson */ 130406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testLoneCarriageReturn() throws Exception { 131406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson testLineEndings("\r<foo\ra='b\rc'\r>d\re</foo\r>\r"); 132406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 133406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 134406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testLoneNewLine() throws Exception { 135406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson testLineEndings("\n<foo\na='b\nc'\n>d\ne</foo\n>\n"); 136406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 137406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 138406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson private void testLineEndings(String xml) throws XmlPullParserException, IOException { 139406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 140406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader(xml)); 141406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 142406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("foo", parser.getName()); 143406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("b c", parser.getAttributeValue(0)); 144406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 145406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("d\ne", parser.getText()); 146406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.END_TAG, parser.next()); 147406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("foo", parser.getName()); 148406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.END_DOCUMENT, parser.next()); 149406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 150406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 151406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testXmlDeclaration() throws Exception { 152406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 153406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader( 154406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson "<?xml version='1.0' encoding='UTF-8' standalone='no'?><foo/>")); 155406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.nextToken()); 156406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("1.0", parser.getProperty( 157406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson "http://xmlpull.org/v1/doc/properties.html#xmldecl-version")); 158406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(Boolean.FALSE, parser.getProperty( 159406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson "http://xmlpull.org/v1/doc/properties.html#xmldecl-standalone")); 160406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("UTF-8", parser.getInputEncoding()); 161406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 162406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 163406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testXmlDeclarationExtraAttributes() throws Exception { 164406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 165406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader( 166406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson "<?xml version='1.0' encoding='UTF-8' standalone='no' a='b'?><foo/>")); 167b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson try { 168406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.nextToken(); 169406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson fail(); 170406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } catch (XmlPullParserException expected) { 171b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson } 172b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson } 173b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 174406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testCustomEntitiesUsingNext() throws Exception { 175406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 176406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader( 177406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson "<foo a='cd&aaaaaaaaaa;ef'>wx&aaaaaaaaaa;yz</foo>")); 178406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.defineEntityReplacementText("aaaaaaaaaa", "b"); 179406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 180406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("cdbef", parser.getAttributeValue(0)); 181406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 182406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("wxbyz", parser.getText()); 183406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 184406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 185406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testCustomEntitiesUsingNextToken() throws Exception { 186406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 187406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader( 188406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson "<foo a='cd&aaaaaaaaaa;ef'>wx&aaaaaaaaaa;yz</foo>")); 189406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.defineEntityReplacementText("aaaaaaaaaa", "b"); 190406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.nextToken()); 191406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("cdbef", parser.getAttributeValue(0)); 192406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.nextToken()); 193406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("wx", parser.getText()); 194406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.ENTITY_REF, parser.nextToken()); 195406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("aaaaaaaaaa", parser.getName()); 196406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("b", parser.getText()); 197406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.nextToken()); 198406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("yz", parser.getText()); 199406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 200406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 201406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testGreaterThanInText() throws Exception { 202406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 203406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo>></foo>")); 204406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 205406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 206406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(">", parser.getText()); // TODO: this should probably fail? 207406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 208406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 209406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testGreaterThanInAttribute() throws Exception{ 210406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 211406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo a='>'></foo>")); 212406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 213406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(">", parser.getAttributeValue(0)); // TODO: this should probably fail? 214406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 215406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 216406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testLessThanInText() throws Exception{ 217406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 218406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo><</foo>")); 219406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 220fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertNextFails(parser); 221406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 222406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 223406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testLessThanInAttribute() throws Exception{ 224406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 225406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo a='<'></foo>")); 226fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertNextFails(parser); 227406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 228406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 229406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testQuotesInAttribute() throws Exception{ 230406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 231406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo a='\"' b=\"'\"></foo>")); 232406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 233406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("\"", parser.getAttributeValue(0)); 234406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("'", parser.getAttributeValue(1)); 235406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 236406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 237406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testQuotesInText() throws Exception{ 238406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 239406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo>\" '</foo>")); 240406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 241406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 242406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("\" '", parser.getText()); 243406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 244406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 245406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testCdataDelimiterInAttribute() throws Exception{ 246406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 247406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo a=']]>'></foo>")); 248406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 249406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("]]>", parser.getAttributeValue(0)); 250406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 251406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 252406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testCdataDelimiterInText() throws Exception{ 253406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 254406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo>]]></foo>")); 255406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 256fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertNextFails(parser); 257fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson } 258fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson 259fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson public void testUnexpectedEof() throws Exception { 260fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson XmlPullParser parser = newPullParser(); 261fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson parser.setInput(new StringReader("<foo><![C")); 262fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 263fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertNextFails(parser); 264fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson } 265fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson 266fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson public void testUnexpectedSequence() throws Exception { 267fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson XmlPullParser parser = newPullParser(); 268fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson parser.setInput(new StringReader("<foo><![Cdata[bar]]></foo>")); 269fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 270fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertNextFails(parser); 271fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson } 272fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson 273fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson public void testThreeDashCommentDelimiter() throws Exception { 274fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson XmlPullParser parser = newPullParser(); 275fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson parser.setInput(new StringReader("<foo><!--a---></foo>")); 276fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 277fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertNextFails(parser); 278fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson } 279fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson 280fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson public void testTwoDashesInComment() throws Exception { 281fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson XmlPullParser parser = newPullParser(); 282fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson parser.setInput(new StringReader("<foo><!-- -- --></foo>")); 283fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 284fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson // TODO: confirm with the spec that this should fail 285fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertNextFails(parser); 286fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson } 287fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson 288fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson public void testEmptyComment() throws Exception { 289fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson XmlPullParser parser = newPullParser(); 290fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson parser.setInput(new StringReader("<foo><!----></foo>")); 291fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 292fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.COMMENT, parser.nextToken()); 293fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("", parser.getText()); 294406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 295406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 296406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson /** 297406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson * Close braces require lookaheads because we need to defend against "]]>". 298406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson */ 299406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testManyCloseBraces() throws Exception{ 300406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 301406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo>]]]]]]]]]]]]]]]]]]]]]]]</foo>")); 302406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 303406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 304406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("]]]]]]]]]]]]]]]]]]]]]]]", parser.getText()); 305406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 306406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 307406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testCommentWithNext() throws Exception { 308406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 309406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo>ab<!-- comment! -->cd</foo>")); 310406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 311406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 312406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("abcd", parser.getText()); 313406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 314406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 315406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testCommentWithNextToken() throws Exception { 316406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 317406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo>ab<!-- comment! -->cd</foo>")); 318406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 319406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.nextToken()); 320406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("ab", parser.getText()); 321406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.COMMENT, parser.nextToken()); 322406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(" comment! ", parser.getText()); 323406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.nextToken()); 324406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("cd", parser.getText()); 325406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 326406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 327406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testCdataWithNext() throws Exception { 328406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 329406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo>ab<![CDATA[cdef]]gh&i]]>jk</foo>")); 330406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 331406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 332406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("abcdef]]gh&ijk", parser.getText()); 333406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.END_TAG, parser.nextToken()); 334406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 335406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 336406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testCdataWithNextToken() throws Exception { 337406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 338406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo>ab<![CDATA[cdef]]gh&i]]>jk</foo>")); 339406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 340406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.nextToken()); 341406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("ab", parser.getText()); 342406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.CDSECT, parser.nextToken()); 343406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("cdef]]gh&i", parser.getText()); 344406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.nextToken()); 345406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("jk", parser.getText()); 346406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.END_TAG, parser.nextToken()); 347406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 348406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 349406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testEntityLooksLikeCdataClose() throws Exception { 350406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 351406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo>]]></foo>")); 352406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 353406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 354406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("]]>", parser.getText()); 355406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 356406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 357406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testDoctypeWithNext() throws Exception { 358406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson String s = "<!DOCTYPE foo [" 359406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson + " <!ENTITY bb \"bar baz\">" 360406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson + " <!NOTATION png SYSTEM \"image/png\">" 361406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson + "]><foo>a&bb;c</foo>"; 362406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 363406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader( 364406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson "<!DOCTYPE foo [<!ENTITY bb \"bar baz\">]><foo>a&bb;c</foo>")); 365406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 366406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 367406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("abar bazc", parser.getText()); // TODO: this fails on gingerbread 368406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.END_TAG, parser.next()); 369406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 370406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 371406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testDoctypeWithNextToken() throws Exception { 372406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 373406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader( 374406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson "<!DOCTYPE foo [<!ENTITY bb \"bar baz\">]><foo>a&bb;c</foo>")); 375406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.DOCDECL, parser.nextToken()); 376406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(" foo [<!ENTITY bb \"bar baz\">]", parser.getText()); 377406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertNull(parser.getName()); 378406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 379406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.nextToken()); 380406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.nextToken()); 381406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("a", parser.getText()); 382406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.ENTITY_REF, parser.nextToken()); 383406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("bb", parser.getName()); 384406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("bar baz", parser.getText()); // TODO: this fails on gingerbread 385406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.nextToken()); 386406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("c", parser.getText()); 387406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.END_TAG, parser.next()); 388406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 389406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 390406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testProcessingInstructionWithNext() throws Exception { 391406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 392406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo>ab<?cd efg hij?>kl</foo>")); 393406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 394406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 395406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("abkl", parser.getText()); 396406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.END_TAG, parser.next()); 397406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 398406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 399406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testProcessingInstructionWithNextToken() throws Exception { 400406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 401406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader("<foo>ab<?cd efg hij?>kl</foo>")); 402406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.START_TAG, parser.nextToken()); 403406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.nextToken()); 404406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("ab", parser.getText()); 405406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken()); 406406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("cd efg hij", parser.getText()); 407406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.TEXT, parser.nextToken()); 408406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals("kl", parser.getText()); 409406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson assertEquals(XmlPullParser.END_TAG, parser.next()); 410406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 411406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 412fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson public void testLinesAndColumns() throws Exception { 413fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson XmlPullParser parser = newPullParser(); 414fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson parser.setInput(new StringReader("\n" 415fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson + " <foo><bar a='\n" 416fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson + "' b='cde'></bar\n" 417fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson + "><!--\n" 418fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson + "\n" 419fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson + "--><baz/>fg\n" 420fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson + "</foo>")); 421fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("1,1", parser.getLineNumber() + "," + parser.getColumnNumber()); 422fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.IGNORABLE_WHITESPACE, parser.nextToken()); 423fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("2,3", parser.getLineNumber() + "," + parser.getColumnNumber()); 424fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.START_TAG, parser.nextToken()); 425fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("2,8", parser.getLineNumber() + "," + parser.getColumnNumber()); 426fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.START_TAG, parser.nextToken()); 427fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("3,11", parser.getLineNumber() + "," + parser.getColumnNumber()); 428fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.END_TAG, parser.nextToken()); 429fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("4,2", parser.getLineNumber() + "," + parser.getColumnNumber()); 430fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.COMMENT, parser.nextToken()); 431fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("6,4", parser.getLineNumber() + "," + parser.getColumnNumber()); 432fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.START_TAG, parser.nextToken()); 433fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("6,10", parser.getLineNumber() + "," + parser.getColumnNumber()); 434fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.END_TAG, parser.nextToken()); 435fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("6,10", parser.getLineNumber() + "," + parser.getColumnNumber()); 436fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.TEXT, parser.nextToken()); 437fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("7,1", parser.getLineNumber() + "," + parser.getColumnNumber()); 438fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.END_TAG, parser.nextToken()); 439fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("7,7", parser.getLineNumber() + "," + parser.getColumnNumber()); 440fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.END_DOCUMENT, parser.nextToken()); 441fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("7,7", parser.getLineNumber() + "," + parser.getColumnNumber()); 442fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson } 443fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson 444fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson public void testEmptyCdata() throws Exception { 445fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson XmlPullParser parser = newPullParser(); 446fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson parser.setInput(new StringReader("<foo><![CDATA[]]></foo>")); 447fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 448fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); // TODO: This should probably fail! 449fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals("", parser.getText()); 450fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson assertEquals(XmlPullParser.END_TAG, parser.next()); 451fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson } 452fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson 453406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testParseReader() throws Exception { 454406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson String snippet = "<dagny dad=\"bob\">hello</dagny>"; 455406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 456406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 457406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader(snippet)); 458406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson validate(parser); 459406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 460406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 461406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testParseInputStream() throws Exception { 462406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson String snippet = "<dagny dad=\"bob\">hello</dagny>"; 463406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson XmlPullParser parser = newPullParser(); 464406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); 465406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new ByteArrayInputStream(snippet.getBytes()), "UTF-8"); 466406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson validate(parser); 467406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson } 468406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson 469b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson static void validate(XmlPullParser parser) 470b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson throws XmlPullParserException, IOException { 471b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(XmlPullParser.START_DOCUMENT, parser.getEventType()); 472b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(0, parser.getDepth()); 473b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 474b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(1, parser.getDepth()); 475b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals("dagny", parser.getName()); 476b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(1, parser.getAttributeCount()); 477b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals("dad", parser.getAttributeName(0)); 478b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals("bob", parser.getAttributeValue(0)); 479b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals("bob", parser.getAttributeValue(null, "dad")); 480b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 481b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(1, parser.getDepth()); 482b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals("hello", parser.getText()); 483b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(XmlPullParser.END_TAG, parser.next()); 484b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(1, parser.getDepth()); 485b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals("dagny", parser.getName()); 486b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(XmlPullParser.END_DOCUMENT, parser.next()); 487b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(0, parser.getDepth()); 488b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson } 489b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 490406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson public void testNamespaces() throws Exception { 491406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson String xml = "<one xmlns='ns:default' xmlns:n1='ns:1' a='b'>\n" 492406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson + " <n1:two c='d' n1:e='f' xmlns:n2='ns:2'>text</n1:two>\n" 493406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson + "</one>"; 494b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 495b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson XmlPullParser parser = newPullParser(); 496b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); 497406cbf66d790024777ac5bc1eeafc59ba4b0c59bJesse Wilson parser.setInput(new StringReader(xml)); 498b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 499b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(0, parser.getDepth()); 500b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(0, parser.getNamespaceCount(0)); 501b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 502b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson try { 503b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson parser.getNamespaceCount(1); 504b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson fail(); 505b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson } catch (IndexOutOfBoundsException e) { /* expected */ } 506b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 507b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // one 508b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(XmlPullParser.START_TAG, parser.next()); 509b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(1, parser.getDepth()); 510b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 511b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson checkNamespacesInOne(parser); 512b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 513b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // n1:two 514b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(XmlPullParser.START_TAG, parser.nextTag()); 515b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 516b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(2, parser.getDepth()); 517b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson checkNamespacesInTwo(parser); 518b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 519b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // Body of two. 520b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(XmlPullParser.TEXT, parser.next()); 521b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 522b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // End of two. 523b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(XmlPullParser.END_TAG, parser.nextTag()); 524b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 525b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // Depth should still be 2. 526b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(2, parser.getDepth()); 527b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 528b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // We should still be able to see the namespaces from two. 529b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson checkNamespacesInTwo(parser); 530b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 531b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // End of one. 532b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(XmlPullParser.END_TAG, parser.nextTag()); 533b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 534b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // Depth should be back to 1. 535b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(1, parser.getDepth()); 536b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 537b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // We can still see the namespaces in one. 538b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson checkNamespacesInOne(parser); 539b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 540b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // We shouldn't be able to see the namespaces in two anymore. 541b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson try { 542b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson parser.getNamespaceCount(2); 543b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson fail(); 544b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson } catch (IndexOutOfBoundsException e) { /* expected */ } 545b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 546b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(XmlPullParser.END_DOCUMENT, parser.next()); 547b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 548b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // We shouldn't be able to see the namespaces in one anymore. 549b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson try { 550b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson parser.getNamespaceCount(1); 551b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson fail(); 552b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson } catch (IndexOutOfBoundsException e) { /* expected */ } 553b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 554b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(0, parser.getNamespaceCount(0)); 555b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson } 556b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 557b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson private void checkNamespacesInOne(XmlPullParser parser) throws XmlPullParserException { 558b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(2, parser.getNamespaceCount(1)); 559b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 560b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // Prefix for default namespace is null. 561b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertNull(parser.getNamespacePrefix(0)); 562b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals("ns:default", parser.getNamespaceUri(0)); 563b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 564b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals("n1", parser.getNamespacePrefix(1)); 565b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals("ns:1", parser.getNamespaceUri(1)); 566b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 567b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals("ns:default", parser.getNamespace(null)); 568b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 569b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // KXML returns null. 570b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // assertEquals("ns:default", parser.getNamespace("")); 571b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson } 572b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 573b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson private void checkNamespacesInTwo(XmlPullParser parser) throws XmlPullParserException { 574b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // These should still be valid. 575b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson checkNamespacesInOne(parser); 576b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 577b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals(3, parser.getNamespaceCount(2)); 578b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 579b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson // Default ns should still be in the stack 580b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertNull(parser.getNamespacePrefix(0)); 581b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson assertEquals("ns:default", parser.getNamespaceUri(0)); 582b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson } 583b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson 584fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson private void assertNextFails(XmlPullParser parser) throws IOException { 585fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson try { 586fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson parser.next(); 587fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson fail(); 588fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson } catch (XmlPullParserException expected) { 589fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson } 590fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson } 591fda724de28fe86804e6ef6a0afd7ae5be1529083Jesse Wilson 592b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson /** 593b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson * Creates a new pull parser with namespace support. 594b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson */ 595b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson abstract XmlPullParser newPullParser(); 596b076473aecb31da29217acbc5f9832345aeb4784Jesse Wilson} 597