package org.apache.harmony.xml.parsers;
import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
import java.util.StringTokenizer;
import javax.xml.parsers.DocumentBuilder;
parser.setInput(source.getByteStream(), source.getEncoding());
} else if (source.getCharacterStream() != null) {
parser.setInput(source.getCharacterStream());
+ } else if (source.getSystemId() != null) {
+ URL url = new URL(source.getSystemId());
+ URLConnection urlConnection = url.openConnection();
+ urlConnection.connect();
+ String encoding = source.getEncoding();
+ // TODO: if null, extract the encoding from the Content-Type header?
+ parser.setInput(urlConnection.getInputStream(), encoding);
} else {
- // TODO Accept other sources as well?
throw new SAXParseException(
- "InputSource needs either stream or reader", null);
+ "InputSource needs a stream, reader or URI", null);
}
if(parser.nextToken() == XmlPullParser.END_DOCUMENT) {
package tests.api.javax.xml.parsers;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.logging.Logger;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
+import dalvik.annotation.KnownFailure;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargetNew;
import junit.framework.TestCase;
-
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.EntityReference;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.EntityResolver;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
-
import tests.api.org.xml.sax.support.MethodLogger;
import tests.api.org.xml.sax.support.MockHandler;
import tests.api.org.xml.sax.support.MockResolver;
-import dalvik.annotation.KnownFailure;
-import dalvik.annotation.TestLevel;
-import dalvik.annotation.TestTargetClass;
-import dalvik.annotation.TestTargetNew;
+import tests.util.TestEnvironment;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
@TestTargetClass(DocumentBuilder.class)
public class DocumentBuilderTest extends TestCase {
DocumentBuilder db;
protected void setUp() throws Exception {
+ TestEnvironment.reset();
+
dbf = DocumentBuilderFactory.newInstance();
dbf.setIgnoringElementContentWhitespace(true);
}
/**
+ * Tests that the Base URI for the document is populated with the file URI.
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "",
+ method = "parse",
+ args = {java.io.File.class}
+ )
+ public void testGetBaseURI() throws IOException, SAXException {
+ File f = resourceToTmpFile("/simple.xml");
+ Document d = db.parse(f);
+ assertTrue(d.getDocumentElement().getBaseURI().startsWith("file://"));
+ }
+
+ /**
* @tests javax.xml.parsers.DocumentBuilder#parse(java.io.File)
* Case 1: Try to parse correct xml document.
* Case 2: Try to call parse() with null argument.
method = "parse",
args = {java.lang.String.class}
)
- @KnownFailure("Android DocumentBuilder should support File sources")
public void test_parseLjava_lang_String() {
// case 1: Trivial use.
File f = new File(getClass().getResource("/simple.xml").getFile());