1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License.
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
171c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilsonpackage libcore.xml;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.Attributes;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.ContentHandler;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.InputSource;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.Locator;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.SAXException;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.xml.sax.helpers.DefaultHandler;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayInputStream;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStreamReader;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.HashMap;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Map;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.xml.parsers.SAXParser;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.xml.parsers.SAXParserFactory;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
371c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilsonpublic class SimpleParserTest extends TestCase {
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private SAXParser parser;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private StringBuffer instructions;
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Map<String, String> namespaces1;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Map<String, String> namespaces2;
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private StringBuffer elements1;
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private StringBuffer elements2;
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Map<String, String> attributes1;
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private Map<String, String> attributes2;
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private StringBuffer text;
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() throws Exception {
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SAXParserFactory factory = SAXParserFactory.newInstance();
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setValidating(false);
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setNamespaceAware(true);
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        parser = factory.newSAXParser();
611c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        parser.getXMLReader().setContentHandler(contentHandler);
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        instructions = new StringBuffer();
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        namespaces1 = new HashMap<String, String>();
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        namespaces2 = new HashMap<String, String>();
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        elements1 = new StringBuffer();
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        elements2 = new StringBuffer();
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        attributes1 = new HashMap<String, String>();
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        attributes2 = new HashMap<String, String>();
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        text = new StringBuffer();
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() throws Exception {
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        instructions = null;
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        parser = null;
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        namespaces1 = null;
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        namespaces2 = null;
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        attributes1 = null;
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        attributes2 = null;
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        elements1 = null;
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        elements2 = null;
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        text = null;
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
861c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson    private final ContentHandler contentHandler = new ContentHandler() {
871c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        public void characters(char[] ch, int start, int length) {
881c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            String s = new String(ch, start, length).trim();
891c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            if (!s.isEmpty()) {
901c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson                if (text.length() != 0) {
911c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson                    text.append(",");
921c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson                }
931c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson                text.append(s);
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
971c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        public void processingInstruction(String target, String data) {
981c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            String s = target + ":" + data;
991c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            if (instructions.length() != 0) {
1001c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson                instructions.append(",");
1011c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            }
1021c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            instructions.append(s);
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1061c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        public void startElement(String uri, String localName, String qName, Attributes atts) {
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1081c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            if (elements1.length() != 0) {
1091c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson                elements1.append(",");
1101c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            }
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1121c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            elements1.append(localName);
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1141c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            if (!"".equals(uri)) {
1151c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson                namespaces1.put(localName, uri);
1161c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            }
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1181c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            for (int i = 0; i < atts.getLength(); i++) {
1191c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson                attributes1.put(atts.getLocalName(i), atts.getValue(i));
1201c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            }
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1221c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            if (elements2.length() != 0) {
1231c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson                elements2.append(",");
1241c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            }
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1261c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            elements2.append(qName);
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1281c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            if (!"".equals(uri)) {
1291c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson                namespaces2.put(qName, uri);
1301c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            }
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1321c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            for (int i = 0; i < atts.getLength(); i++) {
1331c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson                attributes2.put(atts.getQName(i), atts.getValue(i));
1341c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson            }
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
1371c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        public void endDocument() {}
1381c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        public void endElement(String uri, String localName, String qName) {}
1391c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        public void endPrefixMapping(String prefix) {}
1401c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        public void ignorableWhitespace(char[] ch, int start, int length) {}
1411c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        public void setDocumentLocator(Locator locator) {}
1421c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        public void skippedEntity(String name) {}
1431c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        public void startDocument() {}
1441c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        public void startPrefixMapping(String prefix, String uri) {}
1451c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson    };
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testWorkingFile1() throws Exception {
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SAXParserFactory factory = SAXParserFactory.newInstance();
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setValidating(false);
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setNamespaceAware(true);
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SAXParser parser = factory.newSAXParser();
1531c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        parser.getXMLReader().setContentHandler(contentHandler);
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        parser.parse(getClass().getResourceAsStream("/SimpleParserTest.xml"),
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                (DefaultHandler) null);
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The:quick,brown:fox", instructions.toString());
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("stuff,nestedStuff,nestedStuff,nestedStuff", elements1
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .toString());
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Some text here,some more here...", text.toString());
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("eins", attributes1.get("one"));
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("zwei", attributes1.get("two"));
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("drei", attributes1.get("three"));
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("http://www.foobar.org", namespaces1.get("stuff"));
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testWorkingFile2() throws Exception {
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SAXParserFactory factory = SAXParserFactory.newInstance();
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setValidating(false);
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setNamespaceAware(false);
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setFeature("http://xml.org/sax/features/namespace-prefixes",
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                true);
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SAXParser parser = factory.newSAXParser();
1801c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilson        parser.getXMLReader().setContentHandler(contentHandler);
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        parser.parse(getClass().getResourceAsStream("/SimpleParserTest.xml"),
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                (DefaultHandler) null);
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertFalse(parser.isNamespaceAware());
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The:quick,brown:fox", instructions.toString());
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("t:stuff,nestedStuff,nestedStuff,nestedStuff", elements2
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .toString());
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Some text here,some more here...", text.toString());
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("eins", attributes2.get("one"));
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("zwei", attributes2.get("two"));
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("drei", attributes2.get("three"));
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(0, namespaces2.size());
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testEntityResolver() throws Exception {
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        final StringBuilder text = new StringBuilder();
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DefaultHandler handler = new DefaultHandler() {
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void characters(char[] ch, int start, int length) {
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                String s = new String(ch, start, length).trim();
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (s.length() != 0) {
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    if (text.length() != 0) {
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        text.append(",");
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    }
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    text.append(s);
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public InputSource resolveEntity(String publicId, String systemId)
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throws IOException, SAXException {
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return new InputSource(new InputStreamReader(
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        new ByteArrayInputStream("test".getBytes())));
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        };
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SAXParserFactory spf = SAXParserFactory.newInstance();
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        spf.setValidating(false);
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        parser = spf.newSAXParser();
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        parser.parse(this.getClass().getResourceAsStream("/staffEntRes.xml"),
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                handler);
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertTrue(
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "resolved external entity must be in parser character stream",
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                text.toString().contains("test"));
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetValue() throws Exception{
229f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        parser.parse(getClass().getResourceAsStream("/staffNS.xml"),
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                new DefaultHandler() {
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            boolean firstAddressElem = true;
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            @Override
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            public void startElement (String uri, String localName,
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    String qName, Attributes attributes) {
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if(firstAddressElem && localName.equals("address")) {
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    firstAddressElem = false;
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    assertNotNull(attributes.getValue("http://www.usa.com",
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            "domestic"));
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        });
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
244