summaryrefslogtreecommitdiffstats
path: root/luni/src/test/java/tests/xml/DomTest.java
diff options
context:
space:
mode:
authorJesse Wilson <jessewilson@google.com>2011-01-10 16:34:20 -0800
committerJesse Wilson <jessewilson@google.com>2011-01-10 16:34:20 -0800
commit5c0408af32a2b1c78b2d5a93cca60b0fffddd7da (patch)
treeeed573b347e3c57e1e3762685a0debe4d5b6cd0c /luni/src/test/java/tests/xml/DomTest.java
parent6a3dda3cd755cb77c7234f3c7bee782d92ceccf7 (diff)
downloadlibcore-5c0408af32a2b1c78b2d5a93cca60b0fffddd7da.zip
libcore-5c0408af32a2b1c78b2d5a93cca60b0fffddd7da.tar.gz
libcore-5c0408af32a2b1c78b2d5a93cca60b0fffddd7da.tar.bz2
Don't permit DocumentFragments in the node hierarchy.
Change-Id: Icae3e3e41b4315f975892d5aafeae62d4799036d http://code.google.com/p/android/issues/detail?id=2735
Diffstat (limited to 'luni/src/test/java/tests/xml/DomTest.java')
-rw-r--r--luni/src/test/java/tests/xml/DomTest.java92
1 files changed, 68 insertions, 24 deletions
diff --git a/luni/src/test/java/tests/xml/DomTest.java b/luni/src/test/java/tests/xml/DomTest.java
index d7b0ef2..8477676 100644
--- a/luni/src/test/java/tests/xml/DomTest.java
+++ b/luni/src/test/java/tests/xml/DomTest.java
@@ -17,6 +17,26 @@
package tests.xml;
import dalvik.annotation.KnownFailure;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
import org.w3c.dom.Attr;
@@ -25,6 +45,7 @@ import org.w3c.dom.Comment;
import org.w3c.dom.DOMException;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
import org.w3c.dom.DocumentType;
import org.w3c.dom.Element;
import org.w3c.dom.Entity;
@@ -37,34 +58,12 @@ import org.w3c.dom.ProcessingInstruction;
import org.w3c.dom.Text;
import org.w3c.dom.TypeInfo;
import org.w3c.dom.UserDataHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
import static org.w3c.dom.UserDataHandler.NODE_ADOPTED;
import static org.w3c.dom.UserDataHandler.NODE_CLONED;
import static org.w3c.dom.UserDataHandler.NODE_IMPORTED;
import static org.w3c.dom.UserDataHandler.NODE_RENAMED;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
/**
* Construct a DOM and then interrogate it.
@@ -1455,6 +1454,51 @@ public class DomTest extends TestCase {
assertEquals(7, elements.getLength());
}
+ /**
+ * Documents shouldn't contain document fragments.
+ * http://code.google.com/p/android/issues/detail?id=2735
+ */
+ public void testAddingADocumentFragmentAddsItsChildren() {
+ Element a = document.createElement("a");
+ Element b = document.createElement("b");
+ Element c = document.createElement("c");
+ DocumentFragment fragment = document.createDocumentFragment();
+ fragment.appendChild(a);
+ fragment.appendChild(b);
+ fragment.appendChild(c);
+
+ Node returned = menu.appendChild(fragment);
+ assertSame(fragment, returned);
+ NodeList children = menu.getChildNodes();
+ assertEquals(6, children.getLength());
+ assertTrue(children.item(0) instanceof Text); // whitespace
+ assertEquals(item, children.item(1));
+ assertTrue(children.item(2) instanceof Text); // whitespace
+ assertEquals(a, children.item(3));
+ assertEquals(b, children.item(4));
+ assertEquals(c, children.item(5));
+ }
+
+ public void testReplacingWithADocumentFragmentInsertsItsChildren() {
+ Element a = document.createElement("a");
+ Element b = document.createElement("b");
+ Element c = document.createElement("c");
+ DocumentFragment fragment = document.createDocumentFragment();
+ fragment.appendChild(a);
+ fragment.appendChild(b);
+ fragment.appendChild(c);
+
+ Node returned = menu.replaceChild(fragment, item);
+ assertSame(item, returned);
+ NodeList children = menu.getChildNodes();
+ assertEquals(5, children.getLength());
+ assertTrue(children.item(0) instanceof Text); // whitespace
+ assertEquals(a, children.item(1));
+ assertEquals(b, children.item(2));
+ assertEquals(c, children.item(3));
+ assertTrue(children.item(4) instanceof Text); // whitespace
+ }
+
private class RecordingHandler implements UserDataHandler {
final Set<String> calls = new HashSet<String>();
public void handle(short operation, String key, Object data, Node src, Node dst) {