lyca commented on code in PR #96:
URL: https://github.com/apache/xerces-j/pull/96#discussion_r3916007031


##########
tests/dom/dom3/Test.java:
##########
@@ -43,643 +44,371 @@
 import org.w3c.dom.ls.LSResourceResolver;
 import org.w3c.dom.ls.LSSerializer;
 
-import dom.util.Assertion;
+public class Test extends TestCase implements DOMErrorHandler, 
LSResourceResolver {
 
-/**
- * The program tests vacarious DOM Level 3 functionality
- * 
- * @version $Id$
- */
-public class Test implements DOMErrorHandler, LSResourceResolver {
-    
-    static int errorCounter = 0;
-    static DOMErrorHandler errorHandler = new Test();
-    static LSResourceResolver resolver = new Test();
-    
-    public static void main( String[] argv) {
-        try {
-            boolean namespaces = true;
-            System.out.println("Running dom.dom3.Test...");
-            
System.setProperty(DOMImplementationRegistry.PROPERTY,"org.apache.xerces.dom.DOMImplementationSourceImpl
 org.apache.xerces.dom.DOMXSImplementationSourceImpl");
-
-            
-            DOMImplementationLS impl = 
(DOMImplementationLS)DOMImplementationRegistry.newInstance().getDOMImplementation("LS");
-
-            Assertion.verify(impl!=null, "domImplementation != null");
-
-            LSParser builder = 
impl.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS,
-                                                       null);
-
-            LSSerializer writer = impl.createLSSerializer();
-            DOMConfiguration config = writer.getDomConfig();
-            
config.setParameter("namespaces",(namespaces)?Boolean.TRUE:Boolean.FALSE);
-            config.setParameter("validate",Boolean.FALSE);
-            
-            //----------------------------
-            // TEST: lookupPrefix
-            //       isDefaultNamespace
-            //       lookupNamespaceURI
-            //----------------------------
-            //System.out.println("TEST #1: lookupPrefix, isDefaultNamespace, 
lookupNamespaceURI, input: tests/dom/dom3/input.xml");
-            {
-
-                Document doc = builder.parseURI("tests/dom/dom3/input.xml");
-                NodeList ls = doc.getElementsByTagName("a:elem_a"); 
-
-                NodeImpl elem = (NodeImpl)ls.item(0);
-                if (namespaces) {
-                    
//System.out.println("[a:elem_a].lookupPrefix('http://www.example.com', true) 
== null");
-                    
Assertion.verify(elem.lookupPrefix("http://www.example.com";).equals("ns1"), 
-                                     
"[a:elem_a].lookupPrefix(http://www.example.com)==null");
-
-
-                    
//System.out.println("[a:elem_a].isDefaultNamespace('http://www.example.com') 
== true");
-                    
Assertion.verify(elem.isDefaultNamespace("http://www.example.com";) == true, 
-                                     
"[a:elem_a].isDefaultNamespace(http://www.example.com)==true");
-
-
-                    
//System.out.println("[a:elem_a].lookupPrefix('http://www.example.com', false) 
== ns1");
-                    
Assertion.verify(elem.lookupPrefix("http://www.example.com";).equals("ns1"), 
-                                     
"[a:elem_a].lookupPrefix(http://www.example.com)==ns1");
-
-
-                    
Assertion.verify(elem.lookupNamespaceURI("xsi").equals("http://www.w3.org/2001/XMLSchema-instance";),
 
-                                     "[a:elem_a].lookupNamespaceURI('xsi') == 
'http://www.w3.org/2001/XMLSchema-instance'" );
-
-                } else {
-                    Assertion.verify( 
elem.lookupPrefix("http://www.example.com";) == 
null,"lookupPrefix(http://www.example.com)==null"); 
-                }
-
-                ls = doc.getElementsByTagName("bar:leaf");
-                elem = (NodeImpl)ls.item(0);
-                Assertion.verify(elem.lookupPrefix("url1:").equals("foo"), 
-                                 "[bar:leaf].lookupPrefix('url1:', false) == 
foo");
-                //System.out.println("[bar:leaf].lookupPrefix('url1:', false) 
== "+ );
-
-                //System.out.println("==>Create b:baz with namespace 'b:' and 
xmlns:x='b:'");
-                ls = doc.getElementsByTagName("baz");
-                elem = (NodeImpl)ls.item(0);
-                ls = doc.getElementsByTagName("elem8");
-                elem = (NodeImpl)ls.item(0);
-                Element e1 = doc.createElementNS("b:","p:baz");
-                e1.setAttributeNS("http://www.w3.org/2000/xmlns/";, "xmlns:x", 
"b:");
-                elem.appendChild(e1);
-
-
-                
Assertion.verify(((NodeImpl)e1).lookupPrefix("b:").equals("p"), 
-                                 "[p:baz].lookupPrefix('b:', false) == p");
-
-
-
-                //System.out.println("[p:baz].lookupPrefix('b:', false) == "+ 
((NodeImpl)e1).lookupPrefix("b:",false));
-
-                
Assertion.verify(elem.lookupNamespaceURI("xsi").equals("http://www.w3.org/2001/XMLSchema-instance";),
 
-                                 "[bar:leaf].lookupNamespaceURI('xsi') == 
'http://www.w3.org/2001/XMLSchema-instance'" );
-
-            
-            }
-
-            //************************
-            //* Test normalizeDocument()
-            //************************
-            //System.out.println("TEST #2: normalizeDocumention() - 3 errors, 
input: tests/dom/dom3/schema.xml");
-            {
-                errorCounter = 0;
-                config = builder.getDomConfig();
-                config.setParameter("error-handler",errorHandler);
-                config.setParameter("validate", Boolean.TRUE);
-                Document core = builder.parseURI("tests/dom/dom3/schema.xml");
-                Assertion.verify(errorCounter == 0, "No errors should be 
reported");
-                
-                errorCounter = 0;    
-                NodeList ls2 = core.getElementsByTagName("decVal");
-                Element testElem = (Element)ls2.item(0);
-                testElem.removeAttributeNS("http://www.w3.org/2000/xmlns/";, 
"xmlns");
-
-                ls2 = core.getElementsByTagName("v02:decVal");
-                testElem = (Element)ls2.item(0);
-                testElem.setPrefix("myPrefix");
-                Element root = core.getDocumentElement();
-
-                Element newElem = core.createElementNS(null, "decVal");
-                String data="4.5";
-                if (true) {
-                        data = "string";
-                } 
-                newElem.appendChild(core.createTextNode(data));
-                root.insertBefore(newElem, testElem);
-
-                newElem = core.createElementNS(null,  "notInSchema");
-                newElem.appendChild(core.createTextNode("added new element"));
-                root.insertBefore(newElem, testElem);
-
-                root.appendChild(core.createElementNS("UndefinedNamespace", 
"NS1:foo"));
-                config = core.getDomConfig();
-                config.setParameter("error-handler",errorHandler);
-                config.setParameter("validate", Boolean.TRUE);
-                config.setParameter("schema-type", 
"http://www.w3.org/2001/XMLSchema";);
-                core.normalizeDocument();
-                Assertion.verify(errorCounter == 3, "3 errors should be 
reported");
-                               
-                errorCounter = 0;
-                config.setParameter("validate", Boolean.FALSE);
-                config.setParameter("comments", Boolean.FALSE);
-                core.normalizeDocument();
-                Assertion.verify(errorCounter == 0, "No errors should be 
reported");
-
-
-                config = builder.getDomConfig();
-                config.setParameter("validate", Boolean.FALSE);
-                
-            }
-
-
-            //************************
-            //* Test normalizeDocument()
-            //************************
-            // System.out.println("TEST #3: normalizeDocumention() + psvi, 
input: data/personal-schema.xml");
-            {
-                errorCounter = 0;
-                config = builder.getDomConfig();
-                config.setParameter("error-handler",errorHandler);
-                config.setParameter("validate", Boolean.TRUE);
-                config.setParameter("psvi", Boolean.TRUE);
-                Document core = builder.parseURI("data/personal-schema.xml");
-                Assertion.verify(errorCounter == 0, "No errors should be 
reported");
-
-                NodeList ls2 = core.getElementsByTagName("person");
-
-                Element testElem = (Element)ls2.item(0);
-                
Assertion.verify(((ElementPSVI)testElem).getElementDeclaration().getName().equals("person"),
 "testElem decl");
-                Element e1 = core.createElementNS(null, "person");
-                
-                core.getDocumentElement().appendChild(e1);
-                e1.setAttributeNS(null, "id", "newEmp");
-                Element e2 = core.createElementNS(null, "name");
-                e2.appendChild(core.createElementNS(null, "family"));
-                e2.appendChild(core.createElementNS(null, "given"));
-                e1.appendChild(e2);
-                e1.appendChild(core.createElementNS(null, "email"));
-                Element e3 = core.createElementNS(null, "link");
-                e3.setAttributeNS(null, "manager", "Big.Boss");
-                e1.appendChild(e3);
-
-                testElem.removeAttributeNode(testElem.getAttributeNodeNS(null, 
"contr"));
-                NamedNodeMap map = testElem.getAttributes();
-                config = core.getDomConfig();
-                errorCounter = 0;
-                config.setParameter("psvi", Boolean.TRUE);
-                config.setParameter("error-handler",errorHandler);
-                config.setParameter("validate", Boolean.TRUE);
-                config.setParameter("schema-type", 
"http://www.w3.org/2001/XMLSchema";);
-                core.normalizeDocument();
-                Assertion.verify(errorCounter == 0, "No errors should be 
reported");
-                
Assertion.verify(((ElementPSVI)e1).getElementDeclaration().getName().equals("person"),
 "e1 decl");              
-                
-                config = builder.getDomConfig();
-                config.setParameter("validate", Boolean.FALSE);
-                
-
-            }
-
-            //************************
-            //* Test normalizeDocument(): core tests
-            //************************
-            // System.out.println("TEST #4: normalizeDocument() core");
-            {
-
-                // check that namespace normalization algorithm works correctly
-                Document doc= new DocumentImpl(); 
-                Element root = 
doc.createElementNS("http://www.w3.org/1999/XSL/Transform";, "xsl:stylesheet");
-                doc.appendChild(root);
-                root.setAttributeNS("http://attr1";, "xsl:attr1","");
-
-                Element child1 = doc.createElementNS("http://child1";, 
"NS2:child1");
-                child1.setAttributeNS("http://attr2";, "NS2:attr2","");
-                root.appendChild(child1);
-
-                Element child2 = 
doc.createElementNS("http://child2","NS4:child2";);
-                child2.setAttributeNS("http://attr3","attr3";, "");
-                root.appendChild(child2);
-
-                Element child3 = 
doc.createElementNS("http://www.w3.org/1999/XSL/Transform","xsl:child3";);
-                child3.setAttributeNS("http://a1","attr1";, "");
-                child3.setAttributeNS("http://a2","xsl:attr2";, "");
-                child3.setAttributeNS("http://www.w3.org/2000/xmlns/";, 
"xmlns:a1", "http://a1";);
-                child3.setAttributeNS("http://www.w3.org/2000/xmlns/";, 
"xmlns:xsl", "http://a2";);
-                
-                Element child4 = doc.createElementNS(null, "child4");
-                child4.setAttributeNS("http://a1";, "xsl:attr1", "");
-                child4.setAttributeNS("http://www.w3.org/2000/xmlns/";, 
"xmlns", "default");
-                child3.appendChild(child4);
-                root.appendChild(child3);
-
-                doc.normalizeDocument();
-                
-                //
-                // assertions
-                //
-
-                // xsl:stylesheet should include 2 namespace declarations
-                String name = root.getNodeName();
-                Assertion.verify(name.equals("xsl:stylesheet"), 
"xsl:stylesheet");
-
-                String value = 
root.getAttributeNS("http://www.w3.org/2000/xmlns/";, "xsl");
-                Assertion.verify(value!=null, "xmlns:xsl != null");
-                
Assertion.verify(value.equals("http://www.w3.org/1999/XSL/Transform";), 
"xmlns:xsl="+value);
-                
-                value = root.getAttributeNS("http://www.w3.org/2000/xmlns/";, 
"NS1");
-
-                Assertion.verify(value!=null && 
-                                 value.equals("http://attr1";), 
"xmlns:NS1="+value);
-
-                // child includes 2 namespace decls
-
-                Assertion.verify(child1.getNodeName().equals("NS2:child1"), 
"NS2:child1");
-                value = child1.getAttributeNS("http://www.w3.org/2000/xmlns/";, 
"NS2");
-                Assertion.verify(value!=null && 
-                                 value.equals("http://child1";), 
"xmlns:NS2="+value);
-
-                value = child1.getAttributeNS("http://www.w3.org/2000/xmlns/";, 
"NS1");
-                Assertion.verify(value!=null && 
-                                 value.equals("http://attr2";), 
"xmlns:NS1="+value);
-
-
-                // child3
-                
-
-                Assertion.verify(child3.getNodeName().equals("xsl:child3"), 
"xsl:child3");
-                value = child3.getAttributeNS("http://www.w3.org/2000/xmlns/";, 
"NS1");
-                Assertion.verify(value!=null && 
-                                 value.equals("http://a2";), 
"xmlns:NS1="+value);
-
-
-                value = child3.getAttributeNS("http://www.w3.org/2000/xmlns/";, 
"a1");
-                Assertion.verify(value!=null && 
-                                 value.equals("http://a1";), "xmlns:a1="+value);
-
-
-                value = child3.getAttributeNS("http://www.w3.org/2000/xmlns/";, 
"xsl");
-                Assertion.verify(value!=null && 
-                                 
value.equals("http://www.w3.org/1999/XSL/Transform";), "xmlns:xsl="+value);
-
-                
-                Attr attr = child3.getAttributeNodeNS("http://a2";, "attr2");
-                Assertion.verify(attr != null, "NS1:attr2 !=null");
-
-                Assertion.verify(child3.getAttributes().getLength() == 5, 
"xsl:child3 has 5 attrs");
-                
-                // child 4
-                Attr temp = 
child4.getAttributeNodeNS("http://www.w3.org/2000/xmlns/";, "xmlns");
-                Assertion.verify(temp.getNodeName().equals("xmlns"), 
"attribute name is xmlns");
-                Assertion.verify(temp.getNodeValue().length() == 0, 
"xmlns=''");                
-                /*
-                OutputFormat format = new OutputFormat((Document)doc);
-                format.setLineSeparator(LineSeparator.Windows);
-                format.setIndenting(true);
-                format.setLineWidth(0);             
-                format.setPreserveSpace(true);
-                XMLSerializer serializer = new XMLSerializer(System.out, 
format);
-                serializer.serialize(doc); 
-                */               
-
-            }
-
-
-            //************************
-            //* Test normalizeDocument(): core tests
-            //************************
-            //System.out.println("TEST #4: namespace fixup during 
serialization");
-            {
-
-                Document doc= new DocumentImpl(); 
-                Element root = 
doc.createElementNS("http://www.w3.org/1999/XSL/Transform";, "xsl:stylesheet");
-                doc.appendChild(root);
-                root.setAttributeNS("http://attr1";, "xsl:attr1","");
-
-                Element child1 = doc.createElementNS("http://child1";, 
"NS2:child1");
-                child1.setAttributeNS("http://attr2";, "NS2:attr2","");
-                root.appendChild(child1);
-
-                Element child2 = 
doc.createElementNS("http://child2","NS4:child2";);
-                child2.setAttributeNS("http://attr3","attr3";, "");
-                root.appendChild(child2);
-
-                Element child3 = 
doc.createElementNS("http://www.w3.org/1999/XSL/Transform","xsl:child3";);
-                child3.setAttributeNS("http://a1","attr1";, "");
-                child3.setAttributeNS("http://a2","xsl:attr2";, "");
-                child3.setAttributeNS("http://www.w3.org/2000/xmlns/";, 
"xmlns:a1", "http://a1";);
-                child3.setAttributeNS("http://www.w3.org/2000/xmlns/";, 
"xmlns:xsl", "http://a2";);
-                
-                Element child4 = doc.createElementNS(null, "child4");
-                child4.setAttributeNS("http://a1";, "xsl:attr1", "");
-                child4.setAttributeNS("http://www.w3.org/2000/xmlns/";, 
"xmlns", "default");
-
-                child3.appendChild(child4);
-                root.appendChild(child3);
-
-
-                // serialize data
-                writer.getDomConfig().setParameter("namespaces", Boolean.TRUE);
-                String xmlData = writer.writeToString(doc);
-                Reader r = new StringReader(xmlData);
-                LSInput in = impl.createLSInput();
-                in.setCharacterStream(r);
-                doc = builder.parse(in);
-
-                //
-                // make sure algorithm works correctly
-                //
-
-                root = doc.getDocumentElement();
-                child1 = (Element)root.getFirstChild();
-                child2 = (Element)child1.getNextSibling();
-                child3 = (Element)child2.getNextSibling();
+    private int errorCounter;
+    private DOMImplementationLS impl;
+    private LSParser builder;
 
+    protected void setUp() throws Exception {
+        super.setUp();
+        System.setProperty(DOMImplementationRegistry.PROPERTY,
+            "org.apache.xerces.dom.DOMImplementationSourceImpl 
org.apache.xerces.dom.DOMXSImplementationSourceImpl");
+        impl = (DOMImplementationLS) 
DOMImplementationRegistry.newInstance().getDOMImplementation("LS");
+        assertNotNull(impl);
+        builder = impl.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, 
null);
+        errorCounter = 0;
+    }
 
-                // xsl:stylesheet should include 2 namespace declarations
-                String name = root.getNodeName();
-                Assertion.verify(name.equals("xsl:stylesheet"), 
"xsl:stylesheet");
-
-                String value = 
root.getAttributeNS("http://www.w3.org/2000/xmlns/";, "xsl");
-                Assertion.verify(value!=null, "xmlns:xsl != null");
-                
Assertion.verify(value.equals("http://www.w3.org/1999/XSL/Transform";), 
"xmlns:xsl="+value);
-                
-                value = root.getAttributeNS("http://www.w3.org/2000/xmlns/";, 
"NS1");
-
-                Assertion.verify(value!=null && 
-                                 value.equals("http://attr1";), 
"xmlns:NS1="+value);
-
-                // child includes 2 namespace decls
-
-                Assertion.verify(child1.getNodeName().equals("NS2:child1"), 
"NS2:child1");
-                value = child1.getAttributeNS("http://www.w3.org/2000/xmlns/";, 
"NS2");
-                Assertion.verify(value!=null && 
-                                 value.equals("http://child1";), 
"xmlns:NS2="+value);
-
-                value = child1.getAttributeNS("http://www.w3.org/2000/xmlns/";, 
"NS1");
-                Assertion.verify(value!=null && 
-                                 value.equals("http://attr2";), 
"xmlns:NS1="+value);
-
-
-                // child3
-                
-
-                Assertion.verify(child3.getNodeName().equals("xsl:child3"), 
"xsl:child3");
-                value = child3.getAttributeNS("http://www.w3.org/2000/xmlns/";, 
"NS1");
-                Assertion.verify(value!=null && 
-                                 value.equals("http://a2";), 
"xmlns:NS1="+value);
-
-
-                value = child3.getAttributeNS("http://www.w3.org/2000/xmlns/";, 
"a1");
-                Assertion.verify(value!=null && 
-                                 value.equals("http://a1";), "xmlns:a1="+value);
-
-
-                value = child3.getAttributeNS("http://www.w3.org/2000/xmlns/";, 
"xsl");
-                Assertion.verify(value!=null && 
-                                 
value.equals("http://www.w3.org/1999/XSL/Transform";), "xmlns:xsl="+value);
-
-                
-                Attr attr = child3.getAttributeNodeNS("http://a2";, "attr2");
-                Assertion.verify(attr != null, "NS6:attr2 !=null");
-
-                Assertion.verify(child3.getAttributes().getLength() == 5, 
"xsl:child3 has 5 attrs");
-
+    public void testPrefixLookup() throws Exception {
+        LSParser parser = 
impl.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS, null);
+        Document doc = parser.parseURI("tests/dom/dom3/input.xml");
+        NodeList ls = doc.getElementsByTagName("a:elem_a");
+
+        NodeImpl elem = (NodeImpl) ls.item(0);
+        assertNotNull("[a:elem_a] lookupPrefix result", 
elem.lookupPrefix("http://www.example.com";));
+        assertEquals("[a:elem_a].lookupPrefix(http://www.example.com)", "ns1", 
elem.lookupPrefix("http://www.example.com";));
+        assertTrue("[a:elem_a].isDefaultNamespace(http://www.example.com)", 
elem.isDefaultNamespace("http://www.example.com";));
+        assertEquals("[a:elem_a].lookupNamespaceURI('xsi')",
+                "http://www.w3.org/2001/XMLSchema-instance";, 
elem.lookupNamespaceURI("xsi"));
+
+        ls = doc.getElementsByTagName("bar:leaf");
+        elem = (NodeImpl) ls.item(0);
+        assertEquals("[bar:leaf].lookupPrefix('url1:')", "foo", 
elem.lookupPrefix("url1:"));
+
+        ls = doc.getElementsByTagName("elem8");
+        elem = (NodeImpl) ls.item(0);
+        Element e1 = doc.createElementNS("b:", "p:baz");
+        e1.setAttributeNS("http://www.w3.org/2000/xmlns/";, "xmlns:x", "b:");
+        elem.appendChild(e1);
+
+        assertEquals("[p:baz].lookupPrefix('b:')", "p", ((NodeImpl) 
e1).lookupPrefix("b:"));
+        assertEquals("[bar:leaf].lookupNamespaceURI('xsi')",
+                "http://www.w3.org/2001/XMLSchema-instance";, 
elem.lookupNamespaceURI("xsi"));
+    }
 
-                
-                //OutputFormat format = new OutputFormat((Document)doc);
-                //format.setLineSeparator(LineSeparator.Windows);
-                //format.setIndenting(true);
-                //format.setLineWidth(0);             
-                //format.setPreserveSpace(true);
+    public void testNormalizeDocument() throws Exception {
+        DOMConfiguration config = builder.getDomConfig();
+        config.setParameter("error-handler", this);
+        config.setParameter("validate", Boolean.TRUE);
+        Document core = builder.parseURI("tests/dom/dom3/schema.xml");
+        assertEquals("No errors should be reported on initial parse", 0, 
errorCounter);
+
+        errorCounter = 0;
+        NodeList ls2 = core.getElementsByTagName("decVal");
+        Element testElem = (Element) ls2.item(0);
+        testElem.removeAttributeNS("http://www.w3.org/2000/xmlns/";, "xmlns");
+
+        ls2 = core.getElementsByTagName("v02:decVal");
+        testElem = (Element) ls2.item(0);
+        testElem.setPrefix("myPrefix");
+        Element root = core.getDocumentElement();
+
+        Element newElem = core.createElementNS(null, "decVal");
+        newElem.appendChild(core.createTextNode("string"));
+        root.insertBefore(newElem, testElem);
+
+        newElem = core.createElementNS(null, "notInSchema");
+        newElem.appendChild(core.createTextNode("added new element"));
+        root.insertBefore(newElem, testElem);
+
+        root.appendChild(core.createElementNS("UndefinedNamespace", 
"NS1:foo"));
+        config = core.getDomConfig();
+        config.setParameter("error-handler", this);
+        config.setParameter("validate", Boolean.TRUE);
+        config.setParameter("schema-type", "http://www.w3.org/2001/XMLSchema";);
+        core.normalizeDocument();
+        assertEquals("3 errors should be reported after normalize", 3, 
errorCounter);
+
+        errorCounter = 0;
+        config.setParameter("validate", Boolean.FALSE);
+        config.setParameter("comments", Boolean.FALSE);
+        core.normalizeDocument();
+        assertEquals("No errors should be reported after normalize with 
validate=false", 0, errorCounter);
+    }
 
-                //XMLSerializer serializer = new XMLSerializer(System.out, 
format);
-                //serializer.serialize(doc);                
+    public void testNormalizeDocumentPSVI() throws Exception {
+        DOMConfiguration config = builder.getDomConfig();
+        config.setParameter("error-handler", this);
+        config.setParameter("validate", Boolean.TRUE);
+        config.setParameter("psvi", Boolean.TRUE);
+        Document core = builder.parseURI("data/personal-schema.xml");
+        assertEquals("No errors should be reported on initial parse", 0, 
errorCounter);
+
+        NodeList ls2 = core.getElementsByTagName("person");
+        Element testElem = (Element) ls2.item(0);
+        assertEquals("person", ((ElementPSVI) 
testElem).getElementDeclaration().getName());
+
+        Element e1 = core.createElementNS(null, "person");
+        core.getDocumentElement().appendChild(e1);
+        e1.setAttributeNS(null, "id", "newEmp");
+        Element e2 = core.createElementNS(null, "name");
+        e2.appendChild(core.createElementNS(null, "family"));
+        e2.appendChild(core.createElementNS(null, "given"));
+        e1.appendChild(e2);
+        e1.appendChild(core.createElementNS(null, "email"));
+        Element e3 = core.createElementNS(null, "link");
+        e3.setAttributeNS(null, "manager", "Big.Boss");
+        e1.appendChild(e3);
+
+        testElem.removeAttributeNode(testElem.getAttributeNodeNS(null, 
"contr"));
+        config = core.getDomConfig();
+        errorCounter = 0;
+        config.setParameter("psvi", Boolean.TRUE);
+        config.setParameter("error-handler", this);
+        config.setParameter("validate", Boolean.TRUE);
+        config.setParameter("schema-type", "http://www.w3.org/2001/XMLSchema";);
+        core.normalizeDocument();
+        assertEquals("No errors should be reported after normalize", 0, 
errorCounter);
+        assertEquals("person", ((ElementPSVI) 
e1).getElementDeclaration().getName());
+    }
 
-            }
+    public void testNormalizeDocumentCore() throws Exception {
+        Document doc = new DocumentImpl();
+        Element root = 
doc.createElementNS("http://www.w3.org/1999/XSL/Transform";, "xsl:stylesheet");
+        doc.appendChild(root);
+        root.setAttributeNS("http://attr1";, "xsl:attr1", "");
+
+        Element child1 = doc.createElementNS("http://child1";, "NS2:child1");
+        child1.setAttributeNS("http://attr2";, "NS2:attr2", "");
+        root.appendChild(child1);
+
+        Element child2 = doc.createElementNS("http://child2";, "NS4:child2");
+        child2.setAttributeNS("http://attr3";, "attr3", "");
+        root.appendChild(child2);
+
+        Element child3 = 
doc.createElementNS("http://www.w3.org/1999/XSL/Transform";, "xsl:child3");
+        child3.setAttributeNS("http://a1";, "attr1", "");
+        child3.setAttributeNS("http://a2";, "xsl:attr2", "");
+        child3.setAttributeNS("http://www.w3.org/2000/xmlns/";, "xmlns:a1", 
"http://a1";);
+        child3.setAttributeNS("http://www.w3.org/2000/xmlns/";, "xmlns:xsl", 
"http://a2";);
+
+        Element child4 = doc.createElementNS(null, "child4");
+        child4.setAttributeNS("http://a1";, "xsl:attr1", "");
+        child4.setAttributeNS("http://www.w3.org/2000/xmlns/";, "xmlns", 
"default");
+        child3.appendChild(child4);
+        root.appendChild(child3);
+
+        doc.normalizeDocument();
+
+        assertEquals("xsl:stylesheet", root.getNodeName());
+        assertEquals("http://www.w3.org/1999/XSL/Transform";,
+                root.getAttributeNS("http://www.w3.org/2000/xmlns/";, "xsl"));
+
+        assertEquals("http://attr1";,
+                root.getAttributeNS("http://www.w3.org/2000/xmlns/";, "NS1"));
+
+        assertEquals("NS2:child1", child1.getNodeName());
+        assertEquals("http://child1";,
+                child1.getAttributeNS("http://www.w3.org/2000/xmlns/";, "NS2"));
+        assertEquals("http://attr2";,
+                child1.getAttributeNS("http://www.w3.org/2000/xmlns/";, "NS1"));
+
+        assertEquals("xsl:child3", child3.getNodeName());
+        assertEquals("http://a2";,
+                child3.getAttributeNS("http://www.w3.org/2000/xmlns/";, "NS1"));
+        assertEquals("http://a1";,
+                child3.getAttributeNS("http://www.w3.org/2000/xmlns/";, "a1"));
+        assertEquals("http://www.w3.org/1999/XSL/Transform";,
+                child3.getAttributeNS("http://www.w3.org/2000/xmlns/";, "xsl"));
+
+        Attr attr = child3.getAttributeNodeNS("http://a2";, "attr2");
+        assertNotNull(attr);
+        assertEquals(5, child3.getAttributes().getLength());
+
+        Attr temp = child4.getAttributeNodeNS("http://www.w3.org/2000/xmlns/";, 
"xmlns");
+        assertEquals("attribute name is xmlns", "xmlns", temp.getNodeName());
+        assertEquals("xmlns=''", 0, temp.getNodeValue().length());
+    }
 
+    public void testNamespaceFixupSerialization() throws Exception {
+        Document doc = new DocumentImpl();
+        Element root = 
doc.createElementNS("http://www.w3.org/1999/XSL/Transform";, "xsl:stylesheet");
+        doc.appendChild(root);
+        root.setAttributeNS("http://attr1";, "xsl:attr1", "");
+
+        Element child1 = doc.createElementNS("http://child1";, "NS2:child1");
+        child1.setAttributeNS("http://attr2";, "NS2:attr2", "");
+        root.appendChild(child1);
+
+        Element child2 = doc.createElementNS("http://child2";, "NS4:child2");
+        child2.setAttributeNS("http://attr3";, "attr3", "");
+        root.appendChild(child2);
+
+        Element child3 = 
doc.createElementNS("http://www.w3.org/1999/XSL/Transform";, "xsl:child3");
+        child3.setAttributeNS("http://a1";, "attr1", "");
+        child3.setAttributeNS("http://a2";, "xsl:attr2", "");
+        child3.setAttributeNS("http://www.w3.org/2000/xmlns/";, "xmlns:a1", 
"http://a1";);
+        child3.setAttributeNS("http://www.w3.org/2000/xmlns/";, "xmlns:xsl", 
"http://a2";);
+
+        Element child4 = doc.createElementNS(null, "child4");
+        child4.setAttributeNS("http://a1";, "xsl:attr1", "");
+        child4.setAttributeNS("http://www.w3.org/2000/xmlns/";, "xmlns", 
"default");
+        child3.appendChild(child4);
+        root.appendChild(child3);
+
+        LSSerializer serializer = impl.createLSSerializer();
+        serializer.getDomConfig().setParameter("namespaces", Boolean.TRUE);
+        String xmlData = serializer.writeToString(doc);
+        Reader r = new StringReader(xmlData);
+        LSInput in = impl.createLSInput();
+        in.setCharacterStream(r);
+        doc = builder.parse(in);
+
+        root = doc.getDocumentElement();
+        child1 = (Element) root.getFirstChild();
+        child2 = (Element) child1.getNextSibling();
+        child3 = (Element) child2.getNextSibling();
+
+        assertEquals("xsl:stylesheet", root.getNodeName());
+        assertEquals("http://www.w3.org/1999/XSL/Transform";,
+                root.getAttributeNS("http://www.w3.org/2000/xmlns/";, "xsl"));
+
+        assertEquals("http://attr1";,
+                root.getAttributeNS("http://www.w3.org/2000/xmlns/";, "NS1"));
+
+        assertEquals("NS2:child1", child1.getNodeName());
+        assertEquals("http://child1";,
+                child1.getAttributeNS("http://www.w3.org/2000/xmlns/";, "NS2"));
+        assertEquals("http://attr2";,
+                child1.getAttributeNS("http://www.w3.org/2000/xmlns/";, "NS1"));
+
+        assertEquals("xsl:child3", child3.getNodeName());
+        assertEquals("http://a2";,
+                child3.getAttributeNS("http://www.w3.org/2000/xmlns/";, "NS1"));
+        assertEquals("http://a1";,
+                child3.getAttributeNS("http://www.w3.org/2000/xmlns/";, "a1"));
+        assertEquals("http://www.w3.org/1999/XSL/Transform";,
+                child3.getAttributeNS("http://www.w3.org/2000/xmlns/";, "xsl"));
+
+        Attr attr = child3.getAttributeNodeNS("http://a2";, "attr2");
+        assertNotNull(attr);
+        assertEquals(5, child3.getAttributes().getLength());
+    }
 
-            //************************
-            // TEST: replaceWholeText()
-            //       getWholeText()
-            //       
-            //************************
-           
-            //System.out.println("TEST #5: wholeText, input: 
tests/dom/dom3/wholeText.xml");
-           {
-            config = builder.getDomConfig();
-            config.setParameter("error-handler",errorHandler);
-            config.setParameter("validate", Boolean.FALSE);
-            config.setParameter("entities", Boolean.TRUE);
-            Document doc = builder.parseURI("tests/dom/dom3/wholeText.xml");
-
-            Element root = doc.getDocumentElement();
-            Element test = (Element)doc.getElementsByTagName("elem").item(0);
-            
-            test.appendChild(doc.createTextNode("Address: "));
-            test.appendChild(doc.createEntityReference("ent2"));
-            test.appendChild(doc.createTextNode("City: "));
-            
-            test.appendChild(doc.createEntityReference("ent1"));
-            DocumentType doctype = doc.getDoctype();
-            Node entity = doctype.getEntities().getNamedItem("ent3");
-
-            NodeList ls = test.getChildNodes();
-            Assertion.verify(ls.getLength()==5, "List length");
-            
-            String compare1 = "Home Address: 1900 Dallas Road (East) City: 
Dallas. California. USA  PO #5668";
-            
Assertion.verify(((Text)ls.item(0)).getWholeText().equals(compare1), 
"Compare1");
-            String compare2 = "Home Address: 1900 Dallas Road (East) City: 
Dallas. California. USA  PO #5668";
-            
Assertion.verify(((Text)ls.item(1)).getWholeText().equals(compare2), 
"Compare2");
-            
-
-            //TEST replaceWholeText()
-            ((NodeImpl)ls.item(0)).setReadOnly(true, true);
-            
-            Text original = (Text)ls.item(0);
-            Node newNode = original.replaceWholeText("Replace with this text");
-            ls = test.getChildNodes();
-            Assertion.verify(ls.getLength() == 1, "Length == 1");
-            Assertion.verify(ls.item(0).getNodeValue().equals("Replace with 
this text"), "Replacement works");
-            Assertion.verify(newNode != original, "New node created");
-
-            // replace text for node which is not yet attached to the tree
-            Text text = doc.createTextNode("readonly");
-            ((NodeImpl)text).setReadOnly(true, true);
-            text = text.replaceWholeText("Data");
-            Assertion.verify(text.getNodeValue().equals("Data"), "New value 
'Data'");
-
-            // test with second child that does not have any content
-            test = (Element)doc.getElementsByTagName("elem").item(1);
-            try {            
-                ((Text)test.getFirstChild()).replaceWholeText("can't replace");
-            } catch (DOMException e){
-               Assertion.verify(e !=null);
-            }
-            String compare3 = "Test: The Content ends here. ";
-            
//Assertion.assert(((Text)test.getFirstChild()).getWholeText().equals(compare3),
 "Compare3");
-            
-           }
-
-            //************************
-            // TEST: schema-type
-            //       schema-location
-            //       
-            //************************
-            {
-                errorCounter = 0;
-                config = builder.getDomConfig();
-                config.setParameter("error-handler",errorHandler);
-                config.setParameter("resource-resolver",resolver);
-                config.setParameter("validate", Boolean.TRUE);
-                config.setParameter("psvi", Boolean.TRUE);
-                
-                // schema-type is not set validate against both grammars 
-                errorCounter = 0;
-                Document core2 = 
builder.parseURI("tests/dom/dom3/both-error.xml");
-                Assertion.verify(errorCounter == 4, "4 errors should be 
reported");
-                
-                errorCounter = 0;
-                // set schema-type to be XML Schema 
-                config.setParameter("schema-type", 
"http://www.w3.org/2001/XMLSchema";);
-                // test parsing a file that has both XML schema and DTD
-                core2 = builder.parseURI("tests/dom/dom3/both.xml");
-                Assertion.verify(errorCounter == 0, "No errors should be 
reported");
-                
-            
-                // parse a file with XML schema and DTD but validate against 
DTD only
-                errorCounter = 0;
-                
config.setParameter("schema-type","http://www.w3.org/TR/REC-xml";);
-                core2 = builder.parseURI("tests/dom/dom3/both-error.xml");
-                Assertion.verify(errorCounter == 3, "3 errors should be 
reported");
-                
-                // parse a file with DTD only but set schema-location and 
-                // validate against XML Schema
-                // set schema location
-                
-                
-                core2 = builder.parseURI("tests/dom/dom3/both-error.xml");
-                
-                // normalize document
-                errorCounter = 0;
-                Element root = core2.getDocumentElement();
-                root.removeAttributeNS("http://www.w3.org/2001/XMLSchema";, 
"xsi");               
-                root.removeAttributeNS("http://www.w3.org/2001/XMLSchema";, 
"noNamespaceSchemaLocation");
-                config = core2.getDomConfig();
-                config.setParameter("error-handler",errorHandler);
-                config.setParameter("schema-type", 
"http://www.w3.org/2001/XMLSchema";);
-                config.setParameter("schema-location","personal.xsd");
-                config.setParameter("resource-resolver",resolver);
-                config.setParameter("validate", Boolean.TRUE);
-                core2.normalizeDocument();
-                Assertion.verify(errorCounter == 1, "1 error should be 
reported: "+errorCounter);
- 
-    
-            }
-            
-            
-            // baseURI tests
-            {
-                               LSParser parser = 
impl.createLSParser(DOMImplementationLS.MODE_SYNCHRONOUS,
-                                                                               
                                   null);
-                               Document doc = 
parser.parseURI("tests/dom/dom3/baseURI.xml");
-                               Element root = doc.getDocumentElement();
-                               NodeList ls = doc.getElementsByTagNameNS(null, 
"streetNum");
-                               Node e = ls.item(0);
-                               
Assertion.verify(((NodeImpl)e).getBaseURI().endsWith("tests/dom/dom3/baseURI.xml"),
 
-                                                                
"baseURI=tests/dom/dom3/baseURI.xml");
-                               ls = root.getElementsByTagNameNS(null, 
"header");
-                               Node p2 = ls.item(0);
-                               
Assertion.verify(((NodeImpl)p2).getBaseURI().equals("http://paragraph.com";), 
-                                                                
"baseURI=http://paragraph.com";);
-                               p2 = ls.item(1);
-                               
Assertion.verify(((NodeImpl)p2).getBaseURI().equals("http://paragraph.com2";), 
-                                "baseURI=http://paragraph.com2";);
+    public void testWholeText() throws Exception {
+        DOMConfiguration config = builder.getDomConfig();
+        config.setParameter("error-handler", this);
+        config.setParameter("validate", Boolean.FALSE);
+        config.setParameter("entities", Boolean.TRUE);
+        Document doc = builder.parseURI("tests/dom/dom3/wholeText.xml");
+
+        Element test = (Element) doc.getElementsByTagName("elem").item(0);
+        test.appendChild(doc.createTextNode("Address: "));
+        test.appendChild(doc.createEntityReference("ent2"));
+        test.appendChild(doc.createTextNode("City: "));
+        test.appendChild(doc.createEntityReference("ent1"));
+        DocumentType doctype = doc.getDoctype();
+        assertNotNull("ent3 entity should exist", 
doctype.getEntities().getNamedItem("ent3"));
+        NodeList ls = test.getChildNodes();
+        assertEquals("List length", 5, ls.getLength());
+
+        String compare1 = "Home Address: 1900 Dallas Road (East) City: Dallas. 
California. USA  PO #5668";
+        assertEquals("Compare1", compare1, ((Text) ls.item(0)).getWholeText());
+        String compare2 = "Home Address: 1900 Dallas Road (East) City: Dallas. 
California. USA  PO #5668";
+        assertEquals("Compare2", compare2, ((Text) ls.item(1)).getWholeText());
+
+        ((NodeImpl) ls.item(0)).setReadOnly(true, true);
+        Text original = (Text) ls.item(0);
+        Node newNode = original.replaceWholeText("Replace with this text");
+        ls = test.getChildNodes();
+        assertEquals("Length == 1", 1, ls.getLength());
+        assertEquals("Replacement works", "Replace with this text", 
ls.item(0).getNodeValue());
+        assertTrue("New node created", newNode != original);
+
+        Text text = doc.createTextNode("readonly");
+        ((NodeImpl) text).setReadOnly(true, true);
+        text = text.replaceWholeText("Data");
+        assertEquals("New value 'Data'", "Data", text.getNodeValue());
+
+        test = (Element) doc.getElementsByTagName("elem").item(1);
+        Text replaced = ((Text) test.getFirstChild()).replaceWholeText("can't 
replace");

Review Comment:
   You're right, this seems to be an edge case with the nested entity this test 
wanted to cover.
   
   Why Xerces fails to throw it (TextImpl.java): To validate the replacement, 
TextImpl calls canModifyNext(Node). When it encounters a nested entity, it 
recursively calls canModifyNext:
   1. canModifyNext("Test: ")
   2. Iterates to adjacent entity &ent5;
   3. Iterates over children of &ent5; and hits nested entity &ent6;
   4. Recursively calls canModifyNext(&ent6;)
   5. The Bug: canModifyNext(node) immediately calls node.getNextSibling(). As 
a result, it skips checking the children of &ent6;, completely missing the 
<foo/> element.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to