pauldick    2002/06/04 08:39:12

  Modified:    test/java/src/org/apache/qetest/dtm TestDTM.java
  Log:
  Major overhaul. Now runs with harness, and uses the new
  LinebyLineCheckService used to compare text based output.
  
  Revision  Changes    Path
  1.2       +235 -98   xml-xalan/test/java/src/org/apache/qetest/dtm/TestDTM.java
  
  Index: TestDTM.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/test/java/src/org/apache/qetest/dtm/TestDTM.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestDTM.java      9 Apr 2002 14:20:23 -0000       1.1
  +++ TestDTM.java      4 Jun 2002 15:39:12 -0000       1.2
  @@ -56,17 +56,25 @@
    */
   package org.apache.qetest.dtm;
   
  +// Support for test reporting and harness classes
  +import org.apache.qetest.*;
  +import org.apache.qetest.xsl.*;
  +
  +// java classes
  +import java.io.File;
   import java.io.StringReader;
  +import java.io.FileOutputStream;
  +import java.util.Properties;
  +
  +// Needed SAX, DOM, JAXP, Xalan classes
   import javax.xml.transform.Source;
   import javax.xml.transform.dom.DOMSource;
   import javax.xml.transform.sax.SAXSource;
   import javax.xml.transform.stream.StreamSource;
   
  -import org.apache.xpath.objects.XMLStringFactoryImpl;
  -
   import org.apache.xml.dtm.*;
   import org.apache.xml.dtm.ref.*;
  -
  +import org.apache.xpath.objects.XMLStringFactoryImpl;
   
   /**
    * Unit test for DTMManager/DTM
  @@ -80,7 +88,51 @@
    * %REVIEW% Extend to test DOM2DTM, incremental, DOM view of the DTM, 
    * whitespace-filtered, indexed/nonindexed, ...
    * */
  -public class TestDTM {
  +public class TestDTM extends XSLProcessorTestBase
  +{
  +/**
  +* This test creates a DTM and tests basic functionality of the DTM API
  +* - execute 'build package.trax', 'traxapitest TestDTMIter.java'
  +* - a bunch of convenience variables/initializers are included, 
  +*   use or delete as is useful
  +* @author Paul Dick
  +* @version $Id: TestDTM.java,v 1.2 2002/06/04 15:39:12 pauldick Exp $
  +*
  +* Provides nextName(), currentName() functionality for tests 
  +* that may produce any number of output files.
  +*/
  +protected OutputNameManager outNames;
  +
  +/** 
  +* Information about an xsl/xml file pair for transforming.  
  +* Public members include inputName (for xsl); xmlName; goldName; etc.
  +* If you don't use an .xml file on disk, you don't actually need this.
  +*/
  +protected XSLTestfileInfo testFileInfo = new XSLTestfileInfo();
  +
  +/** Subdirectory under test\tests\api for our xsl/xml files.  */
  +public static final String DTM_SUBDIR = "dtm";
  +public static final String DTM_Prefix = "DTM_";
  +
  +String defaultSource=
  +     "<?xml version=\"1.0\"?>\n"+
  +     "  <bdd:dummyDocument xmlns:bdd=\"www.bdd.org\" version=\"99\">\n"+
  +     "  <!-- Default test document -->&#09;&amp;"+
  +     "  <?api attrib1=\"yes\" attrib2=\"no\"?>"+
  +     "   <A>\n"+
  +     "    <B hat=\"new\" car=\"Honda\" dog=\"Boxer\">Life is good</B>\n"+
  +     "   </A>\n"+
  +     "   <C>My Anaconda<xyz:D xmlns:xyz=\"www.xyz.org\"/>Words</C>\n"+
  +     "          Want a more interesting docuent, provide the URI on the command 
line!\n"+
  +     "   <Sub-Doc xmlns:d=\"www.d.com\" a1=\"hello\" a2=\"goodbye\">"+
  +     "   <!-- Default test Subdocument -->"+
  +     "   <?api a1=\"yes\" a2=\"no\"?>"+
  +     "   <A><!-- A Subtree --><B><C><D><E><f:F xmlns:f=\"www.f.com\" a1=\"down\" 
a2=\"up\"/></E></D></C></B></A>"+
  +     "   <Aa/><Ab/><Ac><Ac1/></Ac>"+
  +     "   <Ad:Ad xmlns:Ad=\"www.Ad.com\" xmlns:y=\"www.y.com\" 
xmlns:z=\"www.z.com\">"+
  +     "   <Ad1/></Ad:Ad>"+
  +     "   </Sub-Doc>"+
  +     "  </bdd:dummyDocument>\n";
   
   static final String[] TYPENAME=
     { "NULL",
  @@ -99,76 +151,110 @@
       "NAMESPACE"
     };
   
  -  public static void main(String argv[])
  -  {
  -     System.out.println("\nHELLO THERE AND WELCOME TO THE WACKY WORLD OF DTM'S \n");
  -    try
  +    /** Just initialize test name, comment, numTestCases. */
  +    public TestDTM()
       {
  -             // Pick our input source
  -             Source source=null;
  -             if(argv.length<1)
  -             {
  -                     String defaultSource=
  -                             "<?xml version=\"1.0\"?>\n"+
  -                             "  <bdd:dummyDocument xmlns:bdd=\"www.bdd.org\">\n"+
  -                             "  <!-- Default test document -->&#09;&amp;"+
  -                             "  <?api attrib1=\"yes\" attrib2=\"no\"?>"+
  -                             "   <A>\n"+
  -                             "    <B hat=\"new\" car=\"Honda\" dog=\"Boxer\">Life 
is good</B>\n"+
  -                             "   </A>\n"+
  -                             "   <C>My Anaconda<xyz:D 
xmlns:xyz=\"www.xyz.org\"/>Words</C>\n"+
  -                             "          Want a more interesting docuent, provide 
the URI on the command line!\n"+
  -                             "  </bdd:dummyDocument>\n";
  -                     source=new StreamSource(new StringReader(defaultSource));
  -             }
  -             else if (argv.length>1 &&  "X".equalsIgnoreCase(argv[1]))
  -             {
  -                     // XNI stream startup goes here
  -                     // Remember to perform Schema validation, to obtain PSVI 
annotations
  -             }
  -             else
  -             {
  -                     // Read from a URI via whatever mechanism the DTMManager 
prefers
  -                     source=new StreamSource(argv[0]);
  -             }
  -     
  -      // Get a DTM manager, and ask it to load the DTM "uniquely",
  -      // with no whitespace filtering, nonincremental, but _with_
  -      // indexing (a fairly common case, and avoids the special
  -      // mode used for RTF DTMs).
  -      DTMManager manager= new DTMManagerDefault().newInstance(new 
XMLStringFactoryImpl());
  -      DTM dtm=manager.getDTM(source, true, null, false, true);
  -      
  -      // Get the root node. NOTE THE ASSUMPTION that this is a single-document
  -      // DTM -- which will always be true for a node obtained this way, but
  -      // won't be true for "shared" DTMs used to hold XSLT variables
  -      int rootNode=dtm.getDocument();
  -       System.out.println("DOCUMENT PROPERTIES:\n"+
  +        numTestCases = 1;
  +        testName = "TestDTM";
  +        testComment = "Function test of DTM";
  +    }
  +
  +    /**
  +     * Initialize this test - Set names of xml/xsl test files,
  +     * REPLACE_other_test_file_init.  
  +     *
  +     * @param p Properties to initialize from (if needed)
  +     * @return false if we should abort the test; true otherwise
  +     */
  +    public boolean doTestFileInit(Properties p)
  +    {
  +        // Used for all tests; just dump files in dtm subdir
  +        File outSubDir = new File(outputDir + File.separator + DTM_SUBDIR);
  +        if (!outSubDir.mkdirs())
  +            reporter.logWarningMsg("Could not create output dir: " + outSubDir);
  +
  +        // Initialize an output name manager to that dir with .out extension
  +        outNames = new OutputNameManager(outputDir + File.separator + DTM_SUBDIR
  +                                         + File.separator + testName, ".out");
  +
  +        String testBasePath = inputDir 
  +                              + File.separator 
  +                              + DTM_SUBDIR
  +                              + File.separator;
  +        String goldBasePath = goldDir 
  +                              + File.separator 
  +                              + DTM_SUBDIR
  +                              + File.separator
  +                              + DTM_Prefix;
  +
  +        //testFileInfo.inputName = testBasePath + "REPLACE_xslxml_filename.xsl";
  +        //testFileInfo.xmlName = testBasePath + "REPLACE_xslxml_filename.xml";
  +        testFileInfo.goldName = goldBasePath;
  +
  +        return true;
  +    }
  +
  +    /**
  +     * Cleanup this test - REPLACE_other_test_file_cleanup.  
  +     *
  +     * @param p Properties to initialize from (if needed)
  +     * @return false if we should abort the test; true otherwise
  +     */
  +    public boolean doTestFileClose(Properties p)
  +    {
  +        // Often will be a no-op
  +        return true;
  +    }
  +
  +   /**
  +    * Create AxisIterator and walk CHILD axis.
  +    * @return false if we should abort the test; true otherwise
  +    */
  +public boolean testCase1()
  +  {
  +     reporter.testCaseInit("Basic Functionality of DTM");
  +     StringBuffer buf = new StringBuffer();
  +     FileOutputStream fos = openFileStream(outNames.nextName());
  +    String gold = testFileInfo.goldName + "testcase1.out";
  +
  +    // Create dtm and generate initial context
  +     DTM dtm = generateDTM();
  +
  +    // DTM -- which will always be true for a node obtained this way, but
  +    // won't be true for "shared" DTMs used to hold XSLT variables
  +    int rootNode=dtm.getDocument();
  +     buf.append(" *** DOCUMENT PROPERTIES: *** "+
          "\nDocURI=\""+dtm.getDocumentBaseURI()+"\" "+
          "SystemID=\""+dtm.getDocumentSystemIdentifier(rootNode)+"\"\n"+
          "DocEncoding=\""+dtm.getDocumentEncoding(rootNode)+"\" "+
          "StandAlone=\""+dtm.getDocumentStandalone(rootNode)+"\" "+
  -       "DocVersion=\""+dtm.getDocumentVersion(rootNode)+"\" "+
  -       " "
  -             );
  +       "DocVersion=\""+dtm.getDocumentVersion(rootNode)+"\""+
  +       "\n\n");
         
  -      // Simple test: Recursively dump the DTM's content.
  -      // We'll want to replace this with more serious examples
  -       System.out.println("\nDOCUMENT DATA:\n");
  -      recursiveDumpNode(dtm,rootNode);
  -    }
  -    catch(Exception e)
  -      {
  -        e.printStackTrace();
  -      }
  -  }
  +    // Simple test: Recursively dump the DTM's content.
  +    // We'll want to replace this with more serious examples
  +     buf.append(" *** DOCUMENT DATA: *** ");
  +    recursiveDumpNode(dtm, rootNode, buf);
  +    
  +     // Write results and close output file.
  +     writeClose(fos, buf);
  +
  +    // Verify results                
  +    LinebyLineCheckService myfilechecker = new LinebyLineCheckService();
  +    myfilechecker.check(reporter, new File(outNames.currentName()),
  +                                                       new File(gold),
  +                                                       "Testcase1");                
                                  
  +    reporter.testCaseClose();
  +    return true;
  +
  +}
     
  -  static void recursiveDumpNode(DTM dtm,int nodeHandle)
  -  {
  +void recursiveDumpNode(DTM dtm, int nodeHandle, StringBuffer buf)
  +{
       // ITERATE over siblings
       for( ; nodeHandle!=DTM.NULL; nodeHandle=dtm.getNextSibling(nodeHandle) )
       {
  -     printNode(dtm,nodeHandle,"");
  +     buf.append(getNodeInfo(dtm,nodeHandle,""));
         
            // List the namespaces, if any.
            // Include only node's local namespaces, not inherited
  @@ -176,10 +262,10 @@
            int kid=dtm.getFirstNamespaceNode(nodeHandle,false);
            if(kid!=DTM.NULL)
                {
  -                     System.out.println("\tNAMESPACES:");
  +                     buf.append("\n\tNAMESPACES:");
                        for( ; kid!=DTM.NULL; 
kid=dtm.getNextNamespaceNode(nodeHandle,kid,false))
                        {
  -                             printNode(dtm,kid,"\t");
  +                             buf.append(getNodeInfo(dtm,kid,"\t"));
                        }
                }
                                                                                
  @@ -187,54 +273,105 @@
                kid=dtm.getFirstAttribute(nodeHandle);
                if(kid!=DTM.NULL)
                {
  -                     System.out.println("\tATTRIBUTES:");
  +                     buf.append("\n\tATTRIBUTES:");
                        for( ; kid!=DTM.NULL; kid=dtm.getNextSibling(kid))
                        {
  -                             printNode(dtm,kid,"\t");
  +                             buf.append(getNodeInfo(dtm,kid,"\t"));
                        }
                }
         
                // Recurse into the children, if any
  -             recursiveDumpNode(dtm,dtm.getFirstChild(nodeHandle));
  +             recursiveDumpNode(dtm, dtm.getFirstChild(nodeHandle), buf);
        }
  -  }
  +}
   
  -  static void printNode(DTM dtm,int nodeHandle,String indent)
  -  {
  -    // Briefly display this node
  -    // Don't bother displaying namespaces or attrs; we do that at the
  -    // next level up.
  -    // %REVIEW% Add namespace info, type info, ...
  +String getNodeInfo(DTM dtm, int nodeHandle, String indent)
  +{
   
       // Formatting hack -- suppress quotes when value is null, to distinguish
       // it from "null".
  +     String buf = new String("null");
       String value=dtm.getNodeValue(nodeHandle);
       String vq=(value==null) ? "" : "\"";
   
  -    System.out.println(indent+
  -                    "Node "+nodeHandle+": "+
  -                    TYPENAME[dtm.getNodeType(nodeHandle)]+" \""+
  +    // Skip outputing of text nodes. In most cases they clutter the output, 
  +     // besides I'm only interested in the elemental structure of the dtm. 
  +     {
  +     buf = new String("\n" + indent+
  +                    nodeHandle+": "+
  +                    TYPENAME[dtm.getNodeType(nodeHandle)]+" "+
                       dtm.getNodeNameX(nodeHandle)+ " : " +
                           dtm.getNodeName(nodeHandle)+
  -                    "\" expandedType="+dtm.getExpandedTypeID(nodeHandle)+
  -
  -                    "\n"+
  -                    indent+
  -                        "\tQName Info: "+
  -                        //"Prefix= " +dtm.getPrefix(kid)+
  -                        " LocalName= "+"\""+dtm.getLocalName(nodeHandle)+"\""+
  -                        " URI= "+"\""+dtm.getNamespaceURI(nodeHandle)+"\""+
  -
  -                    "\n"+
  +                    "\" E-Type="+dtm.getExpandedTypeID(nodeHandle)+
  +                        " Level=" + dtm.getLevel(nodeHandle)+
  +                    " Value=" + vq + value + vq      + "\n"+
                       indent+
  -                    "\tParent=" + dtm.getParent(nodeHandle) +
  -                    " FirstChild=" + dtm.getFirstChild(nodeHandle) +
  -                    " NextSib=" + dtm.getNextSibling(nodeHandle)+
  -                        " Level=" + dtm.getLevel(nodeHandle)+"\n"+
  -                    
  -                    indent+
  -                    "\tValue=" + vq + value + vq
  -                    ); 
  -  }
  +                        "\tPrefix= "+"\""+dtm.getPrefix(nodeHandle)+"\""+
  +                        " Name= "+"\""+dtm.getLocalName(nodeHandle)+"\""+
  +                        " URI= "+"\""+dtm.getNamespaceURI(nodeHandle)+"\" "+
  +                    "Parent=" + dtm.getParent(nodeHandle) +
  +                    " 1stChild=" + dtm.getFirstChild(nodeHandle) +
  +                    " NextSib=" + dtm.getNextSibling(nodeHandle)
  +                    );
  +
  +     } 
  +     return buf;
  +}
     
  +public String usage()
  +{
  +     return ("Common [optional] options supported by TestDTM:\n"
  +             + "(Note: assumes inputDir=.\\tests\\api)\n");
  +}
  +
  +FileOutputStream openFileStream(String name)
  +{
  +     FileOutputStream fos = null;
  +
  +     try
  +     {  fos = new FileOutputStream(name); }
  +
  +     catch (Exception e)
  +     {  reporter.checkFail("Failure opening output file."); }
  +
  +     return fos;
  +}
  +
  +// This routine generates a new DTM for each testcase
  +DTM generateDTM()
  +{
  +     dtmWSStripper stripper = new dtmWSStripper();
  +
  +     // Create DTM and generate initial context
  +     Source source = new StreamSource(new StringReader(defaultSource));
  +     DTMManager manager= new DTMManagerDefault().newInstance(new 
XMLStringFactoryImpl());
  +     DTM dtm=manager.getDTM(source, true, stripper, false, true);
  +   
  +     return dtm;
  +}
  +
  +void writeClose(FileOutputStream fos, StringBuffer buf)
  +{
  +     // Write results and close output file.
  +     try
  +     {
  +             fos.write(buf.toString().getBytes());
  +             fos.close();
  +     }
  +
  +     catch (Exception e)
  +     {  reporter.checkFail("Failure writing output.");       }
  + }
  +    
  +/**
  +* Main method to run test from the command line - can be left alone.  
  +* @param args command line argument array
  +*/
  +public static void main(String[] args)
  +{
  +     TestDTM app = new TestDTM();
  +     app.doMain(args);
  +}
  +
  +
   }
  
  
  

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

Reply via email to