curcuru     01/07/16 17:58:09

  Modified:    test/java/src/org/apache/qetest/xalanj2
                        LoggingTraceListener.java TraceListenerTest.java
  Added:       test/java/src/org/apache/qetest/xalanj2
                        LoggingPrintTraceListener.java
                        LoggingTraceListenerEx.java
  Log:
  Updated TraceListener testing: includes TraceListenerEx logging class
  and PrintTraceListener logging class
  Credit: mmidy
  
  Revision  Changes    Path
  1.5       +4 -8      
xml-xalan/test/java/src/org/apache/qetest/xalanj2/LoggingTraceListener.java
  
  Index: LoggingTraceListener.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/test/java/src/org/apache/qetest/xalanj2/LoggingTraceListener.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- LoggingTraceListener.java 2001/06/29 18:01:09     1.4
  +++ LoggingTraceListener.java 2001/07/17 00:58:09     1.5
  @@ -89,7 +89,7 @@
    * Future improvements: allow you to specify a set of 
    * expected events to validate.
    * @author [EMAIL PROTECTED]
  - * @version $Id: LoggingTraceListener.java,v 1.4 2001/06/29 18:01:09 curcuru 
Exp $
  + * @version $Id: LoggingTraceListener.java,v 1.5 2001/07/17 00:58:09 curcuru 
Exp $
    */
   public class LoggingTraceListener extends LoggingHandler 
          implements TraceListener
  @@ -144,10 +144,6 @@
       }
   
   
  -    /** Prefixed to all logger msg output for TraceListener.  */
  -    public final String prefix = "LTL:";
  -
  -
       /** Cheap-o string representation of last event we got.  */
       protected String lastItem = NOTHING_HANDLED;
   
  @@ -202,7 +198,7 @@
        */
       public int[] getCounters()
       {
  -        return counters;
  +        return this.counters;
       }
   
       /**
  @@ -211,9 +207,9 @@
       public void reset()
       {
           setLastItem(NOTHING_HANDLED);
  -        for (int i = 0; i < counters.length; i++)
  +        for (int i = 0; i < this.counters.length; i++)
           {
  -            counters[i] = 0;
  +            this.counters[i] = 0;
           }
       }
   
  
  
  
  1.2       +151 -20   
xml-xalan/test/java/src/org/apache/qetest/xalanj2/TraceListenerTest.java
  
  Index: TraceListenerTest.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/test/java/src/org/apache/qetest/xalanj2/TraceListenerTest.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TraceListenerTest.java    2001/05/21 20:24:55     1.1
  +++ TraceListenerTest.java    2001/07/17 00:58:09     1.2
  @@ -73,8 +73,10 @@
   import javax.xml.transform.sax.*;
   import javax.xml.transform.stream.*;
   import org.apache.xalan.trace.TraceListener;
  +import org.apache.xalan.trace.TraceListenerEx;
   import org.apache.xalan.trace.TraceManager;
   import org.apache.xalan.transformer.TransformerImpl;
  +import org.apache.xalan.transformer.XalanProperties;
   
   // Needed SAX, DOM, JAXP classes
   
  @@ -87,7 +89,7 @@
   /**
    * Basic functionality testing of TraceListener interface and etc.
    * @author [EMAIL PROTECTED]
  - * @version $Id: TraceListenerTest.java,v 1.1 2001/05/21 20:24:55 curcuru 
Exp $
  + * @version $Id: TraceListenerTest.java,v 1.2 2001/07/17 00:58:09 curcuru 
Exp $
    */
   public class TraceListenerTest extends XSLProcessorTestBase
   {
  @@ -96,8 +98,10 @@
       protected OutputNameManager outNames;
   
       /** Simple test to do tracing on.  */
  -    protected XSLTestfileInfo testFileInfo = new XSLTestfileInfo();
  +    protected TraxDatalet testFileInfo = new TraxDatalet();
   
  +    /** Another '2' Simple test to do tracing on.  */
  +    protected TraxDatalet testFileInfo2 = new TraxDatalet();
   
       /** Subdirectory under test\tests\api for our xsl/xml files.  */
       public static final String X2J_SUBDIR = "xalanj2";
  @@ -106,7 +110,7 @@
       /** Just initialize test name, comment, numTestCases. */
       public TraceListenerTest()
       {
  -        numTestCases = 1;  // REPLACE_num
  +        numTestCases = 2;  // REPLACE_num
           testName = "TraceListenerTest";
           testComment = "Basic functionality testing of TraceListener 
interface and etc";
       }
  @@ -131,26 +135,20 @@
           outNames = new OutputNameManager(outputDir + File.separator + 
X2J_SUBDIR
                                            + File.separator + testName, 
".out");
   
  -        String testBasePath = inputDir 
  -                              + File.separator 
  -                              + X2J_SUBDIR
  -                              + File.separator;
  -        String goldBasePath = goldDir 
  -                              + File.separator 
  -                              + X2J_SUBDIR
  -                              + File.separator;
  -
           // NOTE: validation is tied to details within this file!
  -        testFileInfo.inputName = testBasePath + "TraceListenerTest.xsl";
  -        testFileInfo.xmlName = testBasePath + "TraceListenerTest.xml";
  -        testFileInfo.goldName = goldBasePath + "TraceListenerTest.out";
  -
  +        testFileInfo.setDescription("Simple transform: TraceListenerTest");
  +        testFileInfo.setNames(inputDir + File.separator + X2J_SUBDIR, 
"TraceListenerTest");
  +        testFileInfo.goldName = goldDir + File.separator + X2J_SUBDIR + 
File.separator + "TraceListenerTest.out";
  +        
  +        testFileInfo2.setDescription("for-each transform: 
TraceListenerTest2");
  +        testFileInfo2.setNames(inputDir + File.separator + X2J_SUBDIR, 
"TraceListenerTest2");
  +        testFileInfo2.goldName = goldDir + File.separator + X2J_SUBDIR + 
File.separator + "TraceListenerTest2.out";
           return true;
       }
   
   
       /**
  -     * Quick smoketest of TraceListener.
  +     * Quick smoketest of TraceListener; verify it traces something.
        *
        * @return false if we should abort the test; true otherwise
        */
  @@ -162,7 +160,7 @@
           try
           {
               TransformerFactory factory = TransformerFactory.newInstance();
  -            Transformer transformer = factory.newTransformer(new 
StreamSource(QetestUtils.filenameToURL(testFileInfo.inputName)));
  +            Transformer transformer = 
factory.newTransformer(testFileInfo.getXSLSource());
   
               reporter.logInfoMsg("Transformer created, addTraceListener..."); 
               LoggingTraceListener ltl = new LoggingTraceListener(reporter);
  @@ -173,7 +171,7 @@
               reporter.check(traceManager.hasTraceListeners(), true, 
"traceManager.hasTraceListeners() true after adding one");
            
               reporter.logInfoMsg("About to create output: " + 
outNames.nextName()); 
  -            transformer.transform(new 
StreamSource(QetestUtils.filenameToURL(testFileInfo.xmlName)),
  +            transformer.transform(testFileInfo.getXMLSource(),
                                     new StreamResult(outNames.currentName()));
               reporter.checkPass("Crash test only: returned from transform() 
call");
               int[] tracedEvents = ltl.getCounters();
  @@ -182,13 +180,146 @@
                                     + " events generated:" + 
tracedEvents[LoggingTraceListener.TYPE_GENERATED]
                                     + " events selected:" + 
tracedEvents[LoggingTraceListener.TYPE_SELECTED]);
               reporter.check(tracedEvents[LoggingTraceListener.TYPE_SELECTED], 
3, 
  -                           "Correct number of selected events for testfile " 
+ testFileInfo.inputName);
  +                           "Correct number of selected events for testfile " 
+ testFileInfo.getDescription());
               reporter.logStatusMsg("//@todo add more validation of trace 
events");
           }
           catch (Throwable t)
           {
               reporter.checkFail("testCase1a threw: " + t.toString());
               reporter.logThrowable(Logger.ERRORMSG, t, "testCase1a threw: ");
  +        }
  +
  +        try
  +        {
  +            // Try again with a different file with new Ex listener (should 
be parameterized)
  +            TransformerFactory factory = TransformerFactory.newInstance();
  +            Transformer transformer = 
factory.newTransformer(testFileInfo2.getXSLSource());
  +
  +            reporter.logInfoMsg("Transformer2 created, 
addTraceListener(Ex)..."); 
  +            LoggingTraceListenerEx ltl = new 
LoggingTraceListenerEx(reporter);
  +            TraceManager traceManager = 
((TransformerImpl)transformer).getTraceManager();
  +            traceManager.addTraceListener((TraceListener)ltl);
  +         
  +            reporter.logInfoMsg("About to create output: " + 
outNames.nextName()); 
  +            transformer.transform(testFileInfo2.getXMLSource(),
  +                                  new StreamResult(outNames.currentName()));
  +            reporter.checkPass("Crash test only: returned from transform() 
call");
  +            int[] tracedEvents = ltl.getCounters();
  +            int selectedEndCtr = ltl.getCounterEx();
  +            reporter.logStatusMsg("Last event traced:" + ltl.getLast());
  +            reporter.logStatusMsg("Events traced:" + 
tracedEvents[LoggingTraceListener.TYPE_TRACE]
  +                                  + " events generated:" + 
tracedEvents[LoggingTraceListener.TYPE_GENERATED]
  +                                  + " events selected:" + 
tracedEvents[LoggingTraceListener.TYPE_SELECTED]
  +                                  + " events selectEnd:" + selectedEndCtr);
  +            reporter.check(tracedEvents[LoggingTraceListener.TYPE_SELECTED], 
10, 
  +                           "Correct number of selected events for testfile " 
+ testFileInfo2.getDescription());
  +            reporter.check(selectedEndCtr, 5, 
  +                           "Correct number of selectedEnd events for 
testfile " + testFileInfo2.getDescription());
  +        }
  +        catch (Throwable t)
  +        {
  +            reporter.checkFail("testCase1b threw: " + t.toString());
  +            reporter.logThrowable(Logger.ERRORMSG, t, "testCase1b threw: ");
  +        }
  +
  +        reporter.testCaseClose();
  +        return true;
  +    }
  +
  +
  +    /**
  +     * Test TraceListenerEx and multiple simultaneous trace listeners.
  +     *
  +     * @return false if we should abort the test; true otherwise
  +     */
  +    public boolean testCase2()
  +    {
  +        reporter.testCaseInit("Test TraceListenerEx and multiple 
simultaneous trace listeners");
  +        reporter.logWarningMsg("Note: limited validation: partly just a 
crash test so far.");
  +
  +        try
  +        {
  +            TransformerFactory factory = TransformerFactory.newInstance();
  +            Transformer transformer = 
factory.newTransformer(testFileInfo.getXSLSource());
  +
  +            TraceManager traceManager = 
((TransformerImpl)transformer).getTraceManager();
  +            reporter.check((null != traceManager), true, "getTraceManager is 
non-null");
  +            reporter.logStatusMsg("traceManager.hasTraceListeners() is-0: " 
+ traceManager.hasTraceListeners());
  +
  +            LoggingTraceListener ltl = new LoggingTraceListener(reporter);
  +            LoggingPrintTraceListener ltl2 = new 
LoggingPrintTraceListener(reporter);
  +            LoggingTraceListenerEx ltl3 = new 
LoggingTraceListenerEx(reporter);
  +            
  +            
  +            reporter.logInfoMsg("Transformer created, 
addTraceListener(LoggingTraceListener)..."); 
  +            traceManager.addTraceListener((TraceListener)ltl);
  +            reporter.logStatusMsg("traceManager.hasTraceListeners() is-1: " 
+ traceManager.hasTraceListeners());
  +            
  +            reporter.logInfoMsg("... and 
addTraceListener(LoggingPrintTraceListener)"); 
  +            traceManager.addTraceListener((TraceListener)ltl2);
  +            reporter.logStatusMsg("traceManager.hasTraceListeners() is-2: " 
+ traceManager.hasTraceListeners());
  +
  +            reporter.logInfoMsg("... and 
addTraceListener(LoggingTraceListenerEx)"); 
  +            traceManager.addTraceListener((TraceListener)ltl3);
  +            
  +            reporter.check(traceManager.hasTraceListeners(), true, 
"traceManager.hasTraceListeners() true after adding several");
  +         
  +            reporter.logInfoMsg("About to create output: " + 
outNames.nextName()); 
  +            transformer.transform(testFileInfo.getXMLSource(),
  +                                  new StreamResult(outNames.currentName()));
  +            reporter.checkPass("Crash test only: returned from transform() 
call");
  +            
  +            // Now ask each listener how many events it traced
  +            int[] tracedEvents = ltl.getCounters();
  +            reporter.logStatusMsg("Last event traced(LTL):" + ltl.getLast());
  +            reporter.logStatusMsg("Events traced(LTL):" + 
tracedEvents[LoggingTraceListener.TYPE_TRACE]
  +                                  + " events generated:" + 
tracedEvents[LoggingTraceListener.TYPE_GENERATED]
  +                                  + " events selected:" + 
tracedEvents[LoggingTraceListener.TYPE_SELECTED]);
  +            reporter.check(tracedEvents[LoggingTraceListener.TYPE_SELECTED], 
3, 
  +                           "LTL Correct number of selected events for 
testfile " + testFileInfo.getDescription());
  +            
  +            int[] tracedEvents2 = ltl2.getCounters();
  +            reporter.logStatusMsg("Last event traced(LPTL):" + 
ltl2.getLast());
  +            reporter.logStatusMsg("Events traced(LPTL):" + 
tracedEvents2[LoggingPrintTraceListener.TYPE_TRACE]
  +                                  + " events generated:" + 
tracedEvents2[LoggingPrintTraceListener.TYPE_GENERATED]
  +                                  + " events selected:" + 
tracedEvents2[LoggingPrintTraceListener.TYPE_SELECTED]);
  +            
reporter.check(tracedEvents2[LoggingTraceListener.TYPE_SELECTED], 3, 
  +                           "LPTL Correct number of selected events for 
testfile " + testFileInfo.getDescription());
  +            
  +            // For some reason this returns it's parent's class counter 
  +            //  array, not it's own...
  +            int[] tracedEvents3 = ltl3.getCounters();
  +            int selectedEndCtr = ltl3.getCounterEx();
  +            reporter.logStatusMsg("Last event traced(LTLE):" + 
ltl3.getLast());
  +            reporter.logStatusMsg("Events traced(LTLE):" + 
tracedEvents3[LoggingTraceListenerEx.TYPE_TRACE]
  +                                  + " events generated:" + 
tracedEvents3[LoggingTraceListenerEx.TYPE_GENERATED]
  +                                  + " events selected:" + 
tracedEvents3[LoggingTraceListenerEx.TYPE_SELECTED]
  +                                  + " events selectEnd:" + selectedEndCtr);
  +            
reporter.check(tracedEvents3[LoggingTraceListenerEx.TYPE_SELECTED], 3, 
  +                           "LTLE Correct number of selected events for 
testfile " + testFileInfo.getDescription());
  +            
  +            // Verify removing some doesn't affect the others  //@todo add 
separate test
  +            traceManager.removeTraceListener((TraceListener)ltl);
  +            traceManager.removeTraceListener((TraceListener)ltl3);
  +            ltl2.reset();
  +            
  +            // Verify new Xalan-J 2.x specific property
  +            reporter.logInfoMsg("About to run with Source Location Property 
ON"); 
  +            reporter.logInfoMsg("About to create output: " + 
outNames.nextName()); 
  +            
((TransformerImpl)transformer).setProperty(XalanProperties.SOURCE_LOCATION, 
Boolean.TRUE);
  +            transformer.transform(testFileInfo.getXMLSource(),
  +                                  new StreamResult(outNames.currentName()));
  +            
  +            int[] tracedEvents4 = ltl2.getCounters();
  +            reporter.logStatusMsg("Last event traced(LPTL):" + 
ltl2.getLast());
  +            reporter.logStatusMsg("Events traced(LPTL):" + 
tracedEvents4[LoggingPrintTraceListener.TYPE_TRACE]
  +                                  + " events generated:" + 
tracedEvents4[LoggingPrintTraceListener.TYPE_GENERATED]
  +                                  + " events selected:" + 
tracedEvents4[LoggingPrintTraceListener.TYPE_SELECTED]);
  +        }
  +        catch (Throwable t)
  +        {
  +            reporter.checkFail("testCase2 threw: " + t.toString());
  +            reporter.logThrowable(Logger.ERRORMSG, t, "testCase2 threw: ");
           }
   
           reporter.testCaseClose();
  
  
  
  1.1                  
xml-xalan/test/java/src/org/apache/qetest/xalanj2/LoggingPrintTraceListener.java
  
  Index: LoggingPrintTraceListener.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:  
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 2000, Lotus
   * Development Corporation., http://www.lotus.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   *
   * LoggingPrintTraceListener.java
   *
   */
  package org.apache.qetest.xalanj2;
  import org.apache.qetest.*;
  
  import java.io.IOException;
  
  import org.w3c.dom.Node;
  import org.w3c.dom.traversal.NodeIterator;
  
  import org.apache.xalan.trace.PrintTraceListener;
  import org.apache.xalan.trace.GenerateEvent;
  import org.apache.xalan.trace.SelectionEvent;
  import org.apache.xalan.trace.TracerEvent;
  import org.apache.xalan.templates.ElemTemplate;
  import org.apache.xalan.templates.ElemTemplateElement;
  import org.apache.xalan.templates.ElemTextLiteral;
  import org.apache.xalan.templates.Constants;
  import org.apache.xml.dtm.ref.DTMNodeIterator;
  import org.apache.xml.utils.QName;
  import org.apache.xpath.axes.ContextNodeList;
  import org.apache.xpath.XPath;
  
  /**
   * Logging TraceListener interface.
   * Implementation of the TraceListener interface that
   * prints each event to our logger as it occurs.
   * Future improvements: also implement LoggingHandler properly 
   * so we can do both the PrintTraceListener-specific stuff while 
   * still looking like other LoggingHandlers.
   * @author [EMAIL PROTECTED]
   * @author [EMAIL PROTECTED]
   * @version $Id: LoggingPrintTraceListener.java,v 1.1 2001/07/17 00:58:09 
curcuru Exp $
   */
  public class LoggingPrintTraceListener extends PrintTraceListener       
  {
  
      /**
       * Accesor method for a brief description of this service.  
       * @return String "LoggingPrintTraceListener: logs and counts trace 
events"
       */
      public String getDescription()
      {
          return "LoggingPrintTraceListener: logs and counts trace events";
      }
  
  
      /** No-op sets logger to default.  */
      public LoggingPrintTraceListener()
      {
          super(new java.io.PrintWriter(System.err, true));
          setLogger(getDefaultLogger());
          initTrace();
      }
  
      /**
       * Ctor that calls setLogger automatically.  
       *
       * @param r Logger we should log to
       */
      public LoggingPrintTraceListener(Logger l)
      {
          super(new java.io.PrintWriter(System.err, true));
          setLogger(l);
          initTrace();
      }
      
  
      /**
       * Initialize trace fields from PrintTraceListener.
       */
      public void initTrace()
        {
          m_traceTemplates = true;
          m_traceElements = true;
          m_traceGeneration = true;
          m_traceSelection = true;
        }
  
  
       /** Our Logger, who we tell all our secrets to. */
      protected Logger logger = null;
      
      /**
       * Accesor methods for our Logger.
       *
       * @param l the Logger to have this test use for logging 
       * results; or null to use a default logger
       */
      public void setLogger(Logger l)
        {
          // if null, set a default one
          if (null == l)
              logger = getDefaultLogger();
          else
              logger = l;
        }
  
  
      /**
       * Accesor methods for our Logger.  
       *
       * @return Logger we tell all our secrets to.
       */
      public Logger getLogger()
        {
          return logger;
        }
  
  
      /**
       * Get a default Logger for use with this Handler.  
       * Gets a default ConsoleLogger (only if a Logger isn't 
       * currently set!).  
       *
       * @return current logger; if null, then creates a 
       * Logger.DEFAULT_LOGGER and returns that; if it cannot
       * create one, throws a RuntimeException
       */
      public Logger getDefaultLogger()
      {
          if (logger != null)
              return logger;
  
          try
          {
              Class rClass = Class.forName(Logger.DEFAULT_LOGGER);
              return (Logger)rClass.newInstance();
          } 
          catch (Exception e)
          {
              // Must re-throw the exception, since returning 
              //  null or the like could lead to recursion
              e.printStackTrace();
              throw new RuntimeException(e.toString());
          }
      }
      
      /** What loggingLevel to use for reporter.logMsg(). */
      protected int level = Logger.DEFAULT_LOGGINGLEVEL;
      
  
      /**
       * Set a default handler for us to wrapper - no-op.
       * Since you can add multiple TraceListeners, there's no sense 
       * in us wrappering another one.
       * @param default Object unused
       */
      public void setDefaultHandler(Object noop)
      {
          /* no-op */
      }
  
  
      /**
       * Accessor method for our default handler - no-op.
       * @return null
       */
      public Object getDefaultHandler()
      {
          return null;
      }
  
  
      /** Prefixed to all logger msg output for TraceListener.  */
      public final String prefix = "LPTL:";
  
  
      /** Cheap-o string representation of last event we got.  */
      protected String lastItem = LoggingHandler.NOTHING_HANDLED;
  
  
      /**
       * Accessor for string representation of last trace event.  
       * @param s string to set
       */
      protected void setLastItem(String s)
      {
          lastItem = s;
      }
  
  
      /**
       * Accessor for string representation of last trace event.  
       * @return last event string we had
       */
      public String getLast()
      {
          return lastItem;
      }
  
  
      /** Constant for getCounters()[]: trace events.  */
      public static final int TYPE_TRACE = 0;
  
      /** Constant for getCounters()[]: generated events.  */
      public static final int TYPE_GENERATED = 1;
  
      /** Constant for getCounters()[]: selected events.  */
      public static final int TYPE_SELECTED = 2;
  
      /** 
       * Counters for how many events we've handled.  
       * Index into array are the TYPE_* constants.
       */
      protected int[] counters = 
      {
          0, /* trace */
          0, /* generated */
          0  /* selected */
      };
  
  
      /**
       * Get a list of counters of all items we've logged.
       * Returned as trace, generated, selected
       * Index into array are the TYPE_* constants.
       *
       * @return array of int counters for each item we log
       */
      public int[] getCounters()
      {
          return counters;
      }
  
      /**
       * Reset all items or counters we've handled.  
       */
      public void reset()
      {
          setLastItem(LoggingHandler.NOTHING_HANDLED);
          for (int i = 0; i < counters.length; i++)
          {
              counters[i] = 0;
          }
      }
  
      /** setExpected, etc. not yet implemented.  */
  
      ////////////////// Implement TraceListener ////////////////// 
      /**
       * Logging implementation of TraceListener method.
       * Method that is called when a trace event occurs.
       * The method is blocking.  It must return before processing continues.
       *
       * @param tracerEvent the trace event.
       */
      public void trace(TracerEvent tracerEvent)
      {
        super.trace(tracerEvent);
          counters[TYPE_TRACE]++;
  
          StringBuffer buf = new StringBuffer("trace:");
          int dumpLevel = XalanDumper.DUMP_DEFAULT;
          if (null != tracerEvent.m_mode) // not terribly elegant way to do it
              dumpLevel = XalanDumper.DUMP_NOCLOSE;
          switch (tracerEvent.m_styleNode.getXSLToken())
          {
              // Specific handling for most common 'interesting' items
              case Constants.ELEMNAME_TEXTLITERALRESULT :
                  buf.append(XalanDumper.dump((ElemTextLiteral) 
tracerEvent.m_styleNode, dumpLevel));
                  break;
  
              case Constants.ELEMNAME_TEMPLATE :
                  buf.append(XalanDumper.dump((ElemTemplate) 
tracerEvent.m_styleNode, dumpLevel));
                  break;
  
              default :
                  buf.append(XalanDumper.dump((ElemTemplateElement) 
tracerEvent.m_styleNode, dumpLevel));
          }
          if (null != tracerEvent.m_mode)
              buf.append(XalanDumper.SEP + "m_mode=" + tracerEvent.m_mode + 
XalanDumper.RBRACKET);
  
          setLastItem(buf.toString());
          logger.logMsg(level, prefix + getLast());
      }
  
      /**
       * Logging implementation of TraceListener method.
       * Method that is called just after the formatter listener is called.
       *
       * @param selectionEvent the selected event.
       * @throws javax.xml.transform.TransformerException never thrown
       */
      public void selected(SelectionEvent selectionEvent) 
              throws javax.xml.transform.TransformerException
      {
        super.selected(selectionEvent);
          counters[TYPE_SELECTED]++;
  
          StringBuffer buf = new StringBuffer("selected:");
          ElemTemplateElement styleNodeElem = (ElemTemplateElement) 
selectionEvent.m_styleNode;
          ElemTemplateElement parent = (ElemTemplateElement) 
styleNodeElem.getParentNode();
          if (parent == styleNodeElem.getStylesheetRoot().getDefaultRootRule())
          {
              buf.append("[default-root-rule]");
          }
          else if (parent == 
styleNodeElem.getStylesheetRoot().getDefaultTextRule())
          {
              buf.append("[default-text-rule]");
          }
          else if (parent == styleNodeElem.getStylesheetRoot().getDefaultRule())
          {
              buf.append("[default-rule]");
          }
          else
              buf.append(XalanDumper.dump(styleNodeElem, 
XalanDumper.DUMP_NOCLOSE));
  
          buf.append(selectionEvent.m_attributeName + "="
                     + selectionEvent.m_xpath.getPatternString() + ";");
  
          if (selectionEvent.m_selection.getType() == 
selectionEvent.m_selection.CLASS_NODESET)
          {
              // Must create as DTMNodeIterator for DTM_EXP merge 13-Jun-01
              NodeIterator nl = selectionEvent.m_selection.nodeset();
  
              if (nl instanceof ContextNodeList)
              {
                  try
                  {
                      nl = ((ContextNodeList)nl).cloneWithReset();
                  }
                  catch(CloneNotSupportedException cnse)
                  {
                      buf.append("[Can't trace nodelist, threw: 
CloneNotSupportedException]");
                  }
                  Node pos = nl.nextNode();
  
                  if (null == pos)
                  {
                      buf.append("[empty node list]");
                  }
                  else // (null == pos)
                  {
                      while (null != pos)
                      {
                          buf.append(" " + pos);
                          pos = nl.nextNode();
                      }
                  }
              }
              else // (nl instanceof ContextNodeList)
              {
                  buf.append("[Can't trace nodelist: it isn't a 
ContextNodeList]");
              }
          }
          else // (selectionEvent.m_selection.getType() == 
selectionEvent.m_selection.CLASS_NODESET)
          {
              buf.append("[" + selectionEvent.m_selection.str() +"]");
          }
          buf.append(XalanDumper.RBRACKET);   // Since we said DUMP_NOCLOSE 
above
          setLastItem(buf.toString());
          logger.logMsg(level, prefix + getLast());
      }
  
      /**
       * Logging implementation of TraceListener method.
       * Method that is called just after the formatter listener is called.
       *
       * @param generateEvent the generate event.
       */
      public void generated(GenerateEvent generateEvent)
      {
        super.generated(generateEvent);
          counters[TYPE_GENERATED]++;
  
          StringBuffer buf = new StringBuffer("generated:");
          switch (generateEvent.m_eventtype)
          {
              case GenerateEvent.EVENTTYPE_STARTDOCUMENT :
                  buf.append("STARTDOCUMENT");
              break;
  
              case GenerateEvent.EVENTTYPE_ENDDOCUMENT :
                  buf.append("ENDDOCUMENT");
              break;
  
              case GenerateEvent.EVENTTYPE_STARTELEMENT :
                  buf.append("STARTELEMENT[" + generateEvent.m_name + "]"); // 
just hardcode [ LBRACKET ] RBRACKET here
              break;
  
              case GenerateEvent.EVENTTYPE_ENDELEMENT :
                  buf.append("ENDELEMENT[" + generateEvent.m_name + "]");
              break;
  
              case GenerateEvent.EVENTTYPE_CHARACTERS :
                  String chars1 = new String(generateEvent.m_characters, 
generateEvent.m_start, generateEvent.m_length);
                  buf.append("CHARACTERS[" + chars1 + "]");
              break;
  
              case GenerateEvent.EVENTTYPE_CDATA :
                  String chars2 = new String(generateEvent.m_characters, 
generateEvent.m_start, generateEvent.m_length);
                  buf.append("CDATA[" + chars2 + "]");
              break;
  
              case GenerateEvent.EVENTTYPE_COMMENT :
                  buf.append("COMMENT[" + generateEvent.m_data + "]");
              break;
  
              case GenerateEvent.EVENTTYPE_PI :
                  buf.append("PI[" + generateEvent.m_name + ", " + 
generateEvent.m_data + "]");
              break;
  
              case GenerateEvent.EVENTTYPE_ENTITYREF :
                  buf.append("ENTITYREF[" + generateEvent.m_name + "]");
              break;
  
              case GenerateEvent.EVENTTYPE_IGNORABLEWHITESPACE :
                  buf.append("IGNORABLEWHITESPACE");
              break;
          }
          setLastItem(buf.toString());
          logger.logMsg(level, prefix + getLast());
      }
  }
  
  
  
  1.1                  
xml-xalan/test/java/src/org/apache/qetest/xalanj2/LoggingTraceListenerEx.java
  
  Index: LoggingTraceListenerEx.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:  
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written 
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 2000, Lotus
   * Development Corporation., http://www.lotus.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   *
   * LoggingTraceListenerEx.java
   *
   */
  package org.apache.qetest.xalanj2;
  import org.apache.qetest.*;
  
  import java.io.IOException;
  import java.util.Hashtable;
  
  import org.w3c.dom.Node;
  import org.w3c.dom.traversal.NodeIterator;
  
  import org.apache.xalan.trace.TraceListener;
  import org.apache.xalan.trace.TraceListenerEx;
  import org.apache.xalan.trace.GenerateEvent;
  import org.apache.xalan.trace.SelectionEvent;
  import org.apache.xalan.trace.EndSelectionEvent;
  import org.apache.xalan.trace.TracerEvent;
  import org.apache.xalan.templates.ElemTemplate;
  import org.apache.xalan.templates.ElemTemplateElement;
  import org.apache.xalan.templates.ElemTextLiteral;
  import org.apache.xalan.templates.Constants;
  import org.apache.xml.dtm.ref.DTMNodeIterator;
  import org.apache.xml.utils.QName;
  import org.apache.xpath.axes.ContextNodeList;
  import org.apache.xpath.XPath;
  
  /**
   * Logging TraceListenerEx interface.
   * Implementation of the TraceListenerEx interface that
   * prints each event to our logger as it occurs; simply adds 
   * impl of new selectedEnd event to LoggingTraceListener.
   * Future improvements: allow you to specify a set of 
   * expected events to validate.
   * @author [EMAIL PROTECTED]
   * @version $Id: LoggingTraceListenerEx.java,v 1.1 2001/07/17 00:58:09 
curcuru Exp $
   */
  public class LoggingTraceListenerEx extends LoggingTraceListener 
         implements TraceListenerEx
  {
  
      /**
       * Accesor method for a brief description of this service.  
       * @return String "LoggingTraceListenerEx: logs and counts trace and end 
events"
       */
      public String getDescription()
      {
          return "LoggingTraceListenerEx: logs and counts trace and end events";
      }
  
  
      /** No-op sets logger to default.  */
      public LoggingTraceListenerEx()
      {
          setLogger(getDefaultLogger());
      }
  
      /**
       * Ctor that calls setLogger automatically.  
       *
       * @param r Logger we should log to
       */
      public LoggingTraceListenerEx(Logger l)
      {
          setLogger(l);
      }
  
  
      /** Constant for getCounters()[]: selected events.  */
      public static final int TYPE_SELECTED_END = 3;
  
      /** 
       * Counters for how many events we've handled.  
       * Index into array are the TYPE_* constants.
       */
      protected int[] counters = 
      {
          0, /* trace */
          0, /* generated */
          0, /* selected */
          0  /* selectedEnd */
      };
  
      public int getCounterEx()
      {
          return counters[TYPE_SELECTED_END];
          
      }
      /** setExpected, etc. not yet implemented.  */
  
      ////////////////// Implement TraceListenerEx ////////////////// 
  
      /**
       * Method that is called after an xsl:apply-templates or 
       * xsl:for-each selection occurs.
       *
       * @param ev the generate event.
       *
       * @throws javax.xml.transform.TransformerException
       */
      public void selectEnd(EndSelectionEvent endSelectionEvent) 
            throws javax.xml.transform.TransformerException
      {
          counters[TYPE_SELECTED_END]++;
          Hashtable attrs = new Hashtable();
          attrs.put("event", "selectEnd");
          attrs.put("location", "L" + 
endSelectionEvent.m_styleNode.getLineNumber()
                    + "C" + endSelectionEvent.m_styleNode.getColumnNumber());
  
          StringBuffer buf = new StringBuffer("  <styleNode>");
          ElemTemplateElement styleNodeElem = (ElemTemplateElement) 
endSelectionEvent.m_styleNode;
          ElemTemplateElement parent = (ElemTemplateElement) 
styleNodeElem.getParentNode();
          if (parent == styleNodeElem.getStylesheetRoot().getDefaultRootRule())
          {
              buf.append("[default-root-rule]");
          }
          else if (parent == 
styleNodeElem.getStylesheetRoot().getDefaultTextRule())
          {
              buf.append("[default-text-rule]");
          }
          else if (parent == styleNodeElem.getStylesheetRoot().getDefaultRule())
          {
              buf.append("[default-rule]");
          }
          else
              buf.append(XalanDumper.dump(styleNodeElem, 
XalanDumper.DUMP_DEFAULT));
              
          buf.append("  </styleNode>\n");
  
          buf.append("  <m_xpath>" + endSelectionEvent.m_attributeName + "="
                     + endSelectionEvent.m_xpath.getPatternString() + 
"</m_xpath>\n");
  
          buf.append("  <m_selection>");
          if (endSelectionEvent.m_selection.getType() == 
endSelectionEvent.m_selection.CLASS_NODESET)
          {
              NodeIterator nl = endSelectionEvent.m_selection.nodeset();
  
              if (nl instanceof ContextNodeList)
              {
                  try
                  {
                      nl = ((ContextNodeList)nl).cloneWithReset();
                  }
                  catch(CloneNotSupportedException cnse)
                  {
                      buf.append("[Can't trace nodelist, threw: 
CloneNotSupportedException]");
                  }
                  Node pos = nl.nextNode();
  
                  if (null == pos)
                  {
                      buf.append("[empty node list]");
                  }
                  else // (null == pos)
                  {
                      while (null != pos)
                      {
                          buf.append(" " + pos);
                          pos = nl.nextNode();
                      }
                  }
              }
              else // (nl instanceof ContextNodeList)
              {
                  buf.append("[Can't trace nodelist: it isn't a 
ContextNodeList]");
              }
          }
          else // (selectionEvent.m_selection.getType() == 
selectionEvent.m_selection.CLASS_NODESET)
          {
              buf.append("[" + endSelectionEvent.m_selection.str() +"]");
          }
          buf.append("</m_selection>\n");
  
          buf.append("  <m_sourceNode>" + 
XalanDumper.dump(endSelectionEvent.m_sourceNode, XalanDumper.DUMP_DEFAULT) + 
"</m_sourceNode>\n");
  
          setLastItem(buf.toString());
          logger.logElement(level, TRACE_LISTENER_DUMP, attrs, buf.toString());
      }
  }
  
  
  

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

Reply via email to