elena       2002/12/11 09:35:34

  Modified:    java/tests/dom/dom3 Test.java
  Log:
  Add tests for "schema-type" and "schema-location" and modify the test to use 
DOMConfiguration
  
  Revision  Changes    Path
  1.4       +215 -33   xml-xerces/java/tests/dom/dom3/Test.java
  
  Index: Test.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/tests/dom/dom3/Test.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Test.java 11 Aug 2002 20:48:16 -0000      1.3
  +++ Test.java 11 Dec 2002 17:35:34 -0000      1.4
  @@ -57,20 +57,45 @@
   
   
   package dom.dom3;
  -import  org.apache.xerces.dom.*;
  -import  org.w3c.dom.*;
  -import  org.w3c.dom.ls.*;
  -
   import java.io.Reader;
  -
   import java.io.StringReader;
   
  +import org.apache.xerces.dom.CoreDocumentImpl;
  +import org.apache.xerces.dom.DocumentImpl;
  +import org.apache.xerces.dom.NodeImpl;
  +import org.apache.xerces.dom.TextImpl;
  +import org.apache.xerces.dom3.DOMConfiguration;
  +import org.apache.xerces.dom3.DOMError;
  +import org.apache.xerces.dom3.DOMErrorHandler;
  +import org.apache.xerces.dom3.DOMImplementationRegistry;
  +import org.apache.xerces.dom3.DOMLocator;
  +import org.apache.xerces.xni.psvi.ElementPSVI;
  +import org.w3c.dom.Attr;
  +import org.w3c.dom.DOMException;
  +import org.w3c.dom.Document;
  +import org.w3c.dom.DocumentType;
  +import org.w3c.dom.Element;
  +import org.w3c.dom.NamedNodeMap;
  +import org.w3c.dom.Node;
  +import org.w3c.dom.NodeList;
  +import org.w3c.dom.Text;
  +import org.w3c.dom.ls.DOMBuilder;
  +import org.w3c.dom.ls.DOMEntityResolver;
  +import org.w3c.dom.ls.DOMImplementationLS;
  +import org.w3c.dom.ls.DOMInputSource;
  +import org.w3c.dom.ls.DOMWriter;
  +
   import dom.util.Assertion;
   
   /**
    * The program tests vacarious DOM Level 3 functionality
    */
  -public class Test implements DOMErrorHandler{
  +public class Test implements DOMErrorHandler, DOMEntityResolver{
  +    
  +    static int errorCounter = 0;
  +    static DOMErrorHandler errorHandler = new Test();
  +    static DOMEntityResolver resolver = new Test();
  +    
       public static void main( String[] argv) {
           try {
               boolean namespaces = true;
  @@ -86,15 +111,16 @@
                                                          null);
   
               DOMWriter writer = impl.createDOMWriter();
  -            builder.setFeature("http://xml.org/sax/features/namespaces",namespaces);
  -            builder.setFeature("http://xml.org/sax/features/validation",false);
  +            DOMConfiguration config = writer.getConfig();
  +            
config.setParameter("namespaces",(namespaces)?Boolean.TRUE:Boolean.FALSE);
  +            config.setParameter("validate",Boolean.FALSE);
               
  -            //************************
  +            //----------------------------
               // TEST: lookupNamespacePrefix
               //       isDefaultNamespace
               //       lookupNamespaceURI
  -            //************************
  -            System.out.println("TEST #1: lookupNamespacePrefix, isDefaultNamespace, 
lookupNamespaceURI, input: tests/dom/dom3/input.xml");
  +            //----------------------------
  +            //System.out.println("TEST #1: lookupNamespacePrefix, 
isDefaultNamespace, lookupNamespaceURI, input: tests/dom/dom3/input.xml");
               {
   
                   Document doc = builder.parseURI("tests/dom/dom3/input.xml");
  @@ -153,17 +179,22 @@
                   
Assertion.assert(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");
  +            //System.out.println("TEST #2: normalizeDocumention() - 3 errors, 
input: tests/dom/dom3/schema.xml");
               {
  -                builder.setFeature("validate", true);
  +                errorCounter = 0;
  +                config = builder.getConfig();
  +                config.setParameter("error-handler",errorHandler);
  +                config.setParameter("validate", Boolean.TRUE);
                   DocumentImpl core = 
(DocumentImpl)builder.parseURI("tests/dom/dom3/schema.xml");
  -
  -
  +                Assertion.assert(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");
  @@ -186,27 +217,79 @@
                   root.insertBefore(newElem, testElem);
   
                   root.appendChild(core.createElementNS("UndefinedNamespace", 
"NS1:foo"));
  -                core.setErrorHandler(new Test());
  -                core.setNormalizationFeature("validate", true);
  +                config = core.getConfig();
  +                config.setParameter("error-handler",errorHandler);
  +                config.setParameter("validate", Boolean.TRUE);
                   core.normalizeDocument();
  +                Assertion.assert(errorCounter == 3, "3 errors should be reported");
   
  -                core.setNormalizationFeature("validate", false);
  -                core.setNormalizationFeature("comments", false);
  +                errorCounter = 0;
  +                config.setParameter("validate", Boolean.FALSE);
  +                config.setParameter("comments", Boolean.FALSE);
                   core.normalizeDocument();
  +                Assertion.assert(errorCounter == 0, "No errors should be reported");
   
   
  -                builder.setFeature("validate", false);
  +                config = builder.getConfig();
  +                config.setParameter("validate", Boolean.FALSE);
                   
  -
               }
   
   
               //************************
  +            //* Test normalizeDocument()
  +            //************************
  +            // System.out.println("TEST #3: normalizeDocumention() + psvi, input: 
data/personal-schema.xml");
  +            {
  +                errorCounter = 0;
  +                config = builder.getConfig();
  +                config.setParameter("error-handler",errorHandler);
  +                config.setParameter("validate", Boolean.TRUE);
  +                config.setParameter("psvi", Boolean.TRUE);
  +                DocumentImpl core = 
(DocumentImpl)builder.parseURI("data/personal-schema.xml");
  +                Assertion.assert(errorCounter == 0, "No errors should be reported");
  +
  +                NodeList ls2 = core.getElementsByTagName("person");
  +
  +                Element testElem = (Element)ls2.item(0);
  +                
Assertion.assert(((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.getConfig();
  +                errorCounter = 0;
  +                config.setParameter("psvi", Boolean.TRUE);
  +                config.setParameter("error-handler",errorHandler);
  +                config.setParameter("validate", Boolean.TRUE);
  +                core.normalizeDocument();
  +                Assertion.assert(errorCounter == 0, "No errors should be reported");
  +                
Assertion.assert(((ElementPSVI)e1).getElementDeclaration().getName().equals("person"), 
"e1 decl");              
  +                
  +                config = builder.getConfig();
  +                config.setParameter("validate", Boolean.FALSE);
  +                
  +
  +            }
  +
  +            //************************
               //* Test normalizeDocument(): core tests
               //************************
  -            System.out.println("TEST #3: normalizeDocument() core");
  +            // 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);
  @@ -229,13 +312,13 @@
                   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();
  +                ((CoreDocumentImpl)doc).normalizeDocument();
  +                
                   //
  -                // make sure algorithm works correctly
  +                // assertions
                   //
   
                   // xsl:stylesheet should include 2 namespace declarations
  @@ -287,6 +370,20 @@
   
                   Assertion.assert(child3.getAttributes().getLength() == 5, 
"xsl:child3 has 5 attrs");
                   
  +                // child 4
  +                Attr temp = 
child4.getAttributeNodeNS("http://www.w3.org/2000/xmlns/";, "xmlns");
  +                Assertion.assert(temp.getNodeName().equals("xmlns"), "attribute 
name is xmlns");
  +                Assertion.assert(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); 
  +                */               
   
               }
   
  @@ -294,7 +391,7 @@
               //************************
               //* Test normalizeDocument(): core tests
               //************************
  -            System.out.println("TEST #4: namespace fixup during serialization");
  +            //System.out.println("TEST #4: namespace fixup during serialization");
               {
   
                   Document doc= new DocumentImpl(); 
  @@ -325,6 +422,7 @@
   
   
                   // serialize data
  +                writer.getConfig().setParameter("namespaces", Boolean.TRUE);
                   String xmlData = writer.writeToString(doc);
                   Reader r = new StringReader(xmlData);
                   DOMInputSource in = impl.createDOMInputSource();
  @@ -410,11 +508,12 @@
               //       
               //************************
              
  -            System.out.println("TEST #4: wholeText, input: 
tests/dom/dom3/wholeText.xml");
  +            //System.out.println("TEST #5: wholeText, input: 
tests/dom/dom3/wholeText.xml");
              {
  -           
  -            builder.setFeature("validate", false);
  -            builder.setFeature("entities", true);
  +            config = builder.getConfig();
  +            config.setParameter("error-handler",errorHandler);
  +            config.setParameter("validate", Boolean.FALSE);
  +            config.setParameter("entities", Boolean.TRUE);
               DocumentImpl doc = 
(DocumentImpl)builder.parseURI("tests/dom/dom3/wholeText.xml");
   
               Element root = doc.getDocumentElement();
  @@ -450,13 +549,13 @@
               // 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");
  +            text = ((TextImpl)text).replaceWholeText("Data");
               Assertion.assert(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");
  +                ((TextImpl)test.getFirstChild()).replaceWholeText("can't replace");
               } catch (DOMException e){
                  Assertion.assert(e !=null);
               }
  @@ -465,6 +564,63 @@
               
              }
   
  +            //************************
  +            // TEST: schema-type
  +            //       schema-location
  +            //       
  +            //************************
  +            {
  +                errorCounter = 0;
  +                config = builder.getConfig();
  +                config.setParameter("error-handler",errorHandler);
  +                config.setParameter("entity-resolver",resolver);
  +                config.setParameter("validate", Boolean.TRUE);
  +                config.setParameter("psvi", Boolean.TRUE);
  +                
  +                // schema-type is not set validate against both grammars 
  +                errorCounter = 0;
  +                DocumentImpl core2 = 
(DocumentImpl)builder.parseURI("tests/dom/dom3/both-error.xml");
  +                Assertion.assert(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 = (DocumentImpl)builder.parseURI("tests/dom/dom3/both.xml");
  +                Assertion.assert(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 = 
(DocumentImpl)builder.parseURI("tests/dom/dom3/both-error.xml");
  +                Assertion.assert(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 = 
(DocumentImpl)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.getConfig();
  +                config.setParameter("error-handler",errorHandler);
  +                config.setParameter("schema-type", 
"http://www.w3.org/2001/XMLSchema";);
  +                config.setParameter("schema-location","personal.xsd");
  +                config.setParameter("entity-resolver",resolver);
  +                config.setParameter("validate", Boolean.TRUE);
  +                core2.normalizeDocument();
  +                Assertion.assert(errorCounter == 1, "1 error should be reported: 
"+errorCounter);
  + 
  +    
  +            }
  +
  +
           } catch ( Exception ex ) {
               ex.printStackTrace();
           }
  @@ -475,6 +631,7 @@
           fError.setLength(0);
           short severity = error.getSeverity();
           if (severity == error.SEVERITY_ERROR) {
  +            errorCounter++;
               fError.append("[Error]");
           }
   
  @@ -513,10 +670,35 @@
               fError.append(error.getMessage());
   
           }
  -        System.out.println(fError.toString());
  +         //System.out.println(fError.toString());
           return true;
   
       }
  +    
  +     /**
  +      * @see org.w3c.dom.ls.DOMEntityResolver#resolveEntity(String, String, String)
  +      */
  +     public DOMInputSource resolveEntity(String publicId, String systemId, String 
baseURI) {
  +             try {
  +                     DOMImplementationLS impl =
  +                             (DOMImplementationLS) 
DOMImplementationRegistry.newInstance().getDOMImplementation(
  +                                     "LS-Load");
  +                     DOMInputSource source = impl.createDOMInputSource();
  +                     if (systemId.equals("personal.xsd")) {
  +                             source.setSystemId("data/personal.xsd");
  +                     }
  +                     else {
  +                             source.setSystemId("data/personal.dtd");
  +                     }
  +
  +                     return source;
  +             }
  +             catch (Exception e) {
  +                     return null;
  +             }
  +     }
  +    
  +   
   }
   
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to