curcuru     01/08/08 06:30:59

  Added:       test/tests/extensions/java javaRedir1.java javaRedir1.xml
                        javaRedir1.xsl javaSample3.java javaSample3.xml
                        javaSample3.xsl javaSample4.java javaSample4.xml
                        javaSample4.xsl
               test/tests/extensions/javascript javascriptSample5.xml
                        javascriptSample5.xsl
  Log:
  Various new Extensions tests, java and javascript
  
  Revision  Changes    Path
  1.1                  xml-xalan/test/tests/extensions/java/javaRedir1.java
  
  Index: javaRedir1.java
  ===================================================================
  /*
   * Covered by The Apache Software License, Version 1.1
   * See xml-xalan/java/License
   */
  
  // explicitly packageless
  
  import org.apache.qetest.CheckService;
  import org.apache.qetest.Logger;
  import org.apache.qetest.xsl.StylesheetDatalet;
  import org.apache.qetest.xsl.TestableExtension;
  import org.apache.qetest.xsl.XHTFileCheckService;
  
  import java.io.File; 
  import java.util.Hashtable;
  
  /**
   * Extension for testing xml-xalan/samples/extensions.  
   */
  public class javaRedir1 extends TestableExtension
  {
      /** Note: no actual extension methods here; this class just does validation.  */
  
      //// Implementations of TestableExtension
      /** Copied from javaRedir1.xml[/doc/foo/@file].  */
      public static final String REDIR_NAME = "javaRedir1a-from-build-extensions.out";
  
      /** 
       * Perform and log any pre-transformation info.  
       * @return true if OK; false if any fatal error occoured
       * @param datalet Datalet of current stylesheet test
       */
      public static boolean preCheck(Logger logger, StylesheetDatalet datalet)
      {
          logger.logMsg(Logger.TRACEMSG, "javaRedir1.preCheck");
          return true;        
      }
      
  
      /** 
       * Perform and log any post-transformation info.  
       * 
       * The extension should validate that it's extension was 
       * properly called; we also validate output file(s).
       * 
       * @param logger Logger to dump any info to
       * @param datalet Datalet of current stylesheet test
       */
      public static void postCheck(Logger logger, StylesheetDatalet datalet)
      {
          logger.logMsg(Logger.TRACEMSG, "javaRedir1.postCheck");
  
          // First, validate the normal output file the normal way
          CheckService fileChecker = 
(CheckService)datalet.options.get("fileCheckerImpl");
          // Supply default value
          if (null == fileChecker)
              fileChecker = new XHTFileCheckService();
          if (Logger.PASS_RESULT
              != fileChecker.check(logger,
                                   new File(datalet.outputName), 
                                   new File(datalet.goldName), 
                                   "Extension test of " + datalet.getDescription())
             )
          {
              // Log a custom element with all the file refs first
              // Closely related to viewResults.xsl select='fileref"
              //@todo check that these links are valid when base 
              //  paths are either relative or absolute!
              Hashtable attrs = new Hashtable();
              attrs.put("idref", (new File(datalet.inputName)).getName());
              attrs.put("inputName", datalet.inputName);
              attrs.put("xmlName", datalet.xmlName);
              attrs.put("outputName", datalet.outputName);
              attrs.put("goldName", datalet.goldName);
              logger.logElement(Logger.STATUSMSG, "fileref", attrs, "Extension test 
file references");
          }
          // Now, also validate the redirected output!
          // Calculate location of gold redir file
          String goldRedir = (new File(datalet.goldName)).getParent() 
                             + File.separator + REDIR_NAME;
          
          // Calculate location of actual redir file
          String outRedir = (new File(datalet.outputName)).getParent() 
                            + File.separator + REDIR_NAME;
          
          // Then check just with actual file name to the constructed 
          //  gold name; don't bother with extra logging
          fileChecker.check(logger, 
                            new File(outRedir), 
                            new File(goldRedir), 
                            "Redir-Extension test of " + datalet.getDescription());
      }
  
  
      /**
       * Description of what this extension does.  
       * @return String description of extension
       */
      public static String getDescription()
      {
          return "No extension methods - just validation";
      }
  }
  
  
  
  
  1.1                  xml-xalan/test/tests/extensions/java/javaRedir1.xml
  
  Index: javaRedir1.xml
  ===================================================================
  <?xml version="1.0"?> 
  <doc>
    <foo file="javaRedir1a-from-build-extensions.out">
      Testing Redirect extension:
      <bar>A foo subelement text node</bar>
    </foo>
    <main>
      Everything else
    </main>  
  </doc>
  
  
  
  1.1                  xml-xalan/test/tests/extensions/java/javaRedir1.xsl
  
  Index: javaRedir1.xsl
  ===================================================================
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
      version="1.0"
      xmlns:lxslt="http://xml.apache.org/xslt";
      xmlns:redirect="org.apache.xalan.lib.Redirect"
      extension-element-prefixes="redirect">
  
  <!-- Copied from xml-xalan/java/samples/extensions/1-redir.xsl -->
  
    <lxslt:component prefix="redirect" elements="write open close" functions="">
      <lxslt:script lang="javaclass" src="org.apache.xalan.lib.Redirect"/>
    </lxslt:component>  
      
    <xsl:template match="/">
      <standard-out>
        Standard output:
        <xsl:apply-templates/>
      </standard-out>
    </xsl:template>
  
    <!-- not redirected -->
    <xsl:template match="doc/main">
      <main>
      -- look in <xsl:value-of select="/doc/foo/@file"/> for the redirected output --
        <xsl:apply-templates/>
      </main>
    </xsl:template>
    
    <!-- redirected -->
    <xsl:template match="doc/foo">
      <!-- get redirect file name from XML input -->
      <redirect:write select="@file">
        <foo-out>
          <xsl:apply-templates/>
        </foo-out>
      </redirect:write>
    </xsl:template>
    
  <!-- redirected (from the xsl:apply-templates above. I.e., bar is in /doc/foo -->  
    <xsl:template match="bar">
      <foobar-out>
        <xsl:apply-templates/>
      </foobar-out>
    </xsl:template>
    
  </xsl:stylesheet>
  
  
  
  1.1                  xml-xalan/test/tests/extensions/java/javaSample3.java
  
  Index: javaSample3.java
  ===================================================================
  /*
   * Covered by The Apache Software License, Version 1.1
   * See xml-xalan/java/License
   */
  
  // explicitly packageless
  
  import org.apache.qetest.CheckService;
  import org.apache.qetest.Logger;
  import org.apache.qetest.xsl.StylesheetDatalet;
  import org.apache.qetest.xsl.TestableExtension;
  import org.apache.qetest.xsl.XHTFileCheckService;
  
  import java.io.File;
  import java.util.Calendar;
  import java.util.Date;
  import java.util.Hashtable;
  
  /**
   * Extension for testing xml-xalan/samples/extensions.  
   */
  public class javaSample3 extends TestableExtension
  {
  
      /** Extension method called from stylesheet.  */
      public static Date getDate(String year, String month, String day)
      {
          // Bump up counter for later validation in postCheck
          counter++;
          Calendar c = Calendar.getInstance();
          // Convert each argument to int.
          c.set(Integer.parseInt(year),Integer.parseInt(month),Integer.parseInt(day));
          return c.getTime();
      }
  
  
      //// Implementations of TestableExtension
      /** Simple counter of number of times called.  */    
      private static int counter = 0;
      
  
      /** 
       * Perform and log any pre-transformation info.  
       * @return true if OK; false if any fatal error occoured
       * @param datalet Datalet of current stylesheet test
       */
      public static boolean preCheck(Logger logger, StylesheetDatalet datalet)
      {
          logger.logMsg(Logger.INFOMSG, "javaSample3.preCheck; counter=" + counter);
          return true;        
      }
      
  
      /** 
       * Perform and log any post-transformation info.  
       * 
       * The extension should validate that it's extension was 
       * properly called; we also validate output file.
       * 
       * @param logger Logger to dump any info to
       * @param datalet Datalet of current stylesheet test
       */
      public static void postCheck(Logger logger, StylesheetDatalet datalet)
      {
          // Verify that we've been called at least once
          if (counter > 0)
              logger.checkPass("javaSample3 has been called " + counter + " times");
          else
              logger.checkFail("javaSample3 has not been called");
  
          // We also validate the output file the normal way
          CheckService fileChecker = 
(CheckService)datalet.options.get("fileCheckerImpl");
          // Supply default value
          if (null == fileChecker)
              fileChecker = new XHTFileCheckService();
          if (Logger.PASS_RESULT
              != fileChecker.check(logger,
                                   new File(datalet.outputName), 
                                   new File(datalet.goldName), 
                                   "Extension test of " + datalet.getDescription())
             )
          {
              // Log a custom element with all the file refs first
              // Closely related to viewResults.xsl select='fileref"
              //@todo check that these links are valid when base 
              //  paths are either relative or absolute!
              Hashtable attrs = new Hashtable();
              attrs.put("idref", (new File(datalet.inputName)).getName());
              attrs.put("inputName", datalet.inputName);
              attrs.put("xmlName", datalet.xmlName);
              attrs.put("outputName", datalet.outputName);
              attrs.put("goldName", datalet.goldName);
              logger.logElement(Logger.STATUSMSG, "fileref", attrs, "Extension test 
file references");
          }
      }
  
  
      /**
       * Description of what this extension does.  
       * @return String description of extension
       */
      public static String getDescription()
      {
          return "getDate() returns date for ints";
      }
  }
  
  
  
  
  1.1                  xml-xalan/test/tests/extensions/java/javaSample3.xml
  
  Index: javaSample3.xml
  ===================================================================
  <?xml version="1.0"?> 
  <doc>
  <!-- Copied from: java/samples/extensions/3-java-namespace.xml -->
     <date
      year="2001" month="5" day="27"
      format="EEEE, MMM dd, yyyy"/>
  </doc>
  
  
  1.1                  xml-xalan/test/tests/extensions/java/javaSample3.xsl
  
  Index: javaSample3.xsl
  ===================================================================
  <?xml version="1.0"?> 
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                  xmlns:java="http://xml.apache.org/xslt/java";
                  version="1.0">
  
  <!-- Copied from: java/samples/extensions/3-java-namespace.xsl -->
  <xsl:output method="xml" indent="yes"/>
                  
    <xsl:template match="/">
      <out>
        <xsl:apply-templates select="/doc/date"/> 
      </out>
    </xsl:template>
   
    <xsl:template match="date">
      <xsl:variable name="year" select="string(@year)"/>
      <xsl:variable name="month" select="string(@month)"/> 
      <xsl:variable name="day" select="string(@day)"/>          
      <xsl:variable name="format" select="string(@format)"/>
      <xsl:variable name="formatter"       
           select="java:java.text.SimpleDateFormat.new($format)"/>
      <xsl:variable name="date" 
           select="java:javaSample3.getDate($year,$month,$day)"/>
      <p>Format:   <xsl:value-of select="$format"/></p>
      <p>Date-xml: y:<xsl:value-of select="$year"/> m:<xsl:value-of select="$month"/> 
d:<xsl:value-of select="$day"/></p>
      <p>Date-ext: <xsl:value-of select="java:format($formatter, $date)"/></p>
    </xsl:template>
   
  </xsl:stylesheet>
  
  
  
  1.1                  xml-xalan/test/tests/extensions/java/javaSample4.java
  
  Index: javaSample4.java
  ===================================================================
  /*
   * Covered by The Apache Software License, Version 1.1
   * See xml-xalan/java/License
   */
  
  // explicitly packageless
  
  import org.apache.qetest.CheckService;
  import org.apache.qetest.Logger;
  import org.apache.qetest.xsl.StylesheetDatalet;
  import org.apache.qetest.xsl.TestableExtension;
  import org.apache.qetest.xsl.XHTFileCheckService;
  
  import java.io.File;
  import java.util.Hashtable;
  
  /**
   * Extension for testing xml-xalan/samples/extensions.  
   */
  public class javaSample4 extends TestableExtension
  {
      static Hashtable counters = new Hashtable ();
  
      /** Simple extension method to setup hashtable.  */
      public void init(org.apache.xalan.extensions.XSLProcessorContext context, 
                         org.w3c.dom.Element elem)
      {
          counter++; // every method call increments plain counter
          String name = elem.getAttribute("name");
          String value = elem.getAttribute("value");
          int val;
          try
          {
              val = Integer.parseInt (value);
          } 
          catch (NumberFormatException e)
          {
              e.printStackTrace ();
              val = 0;
          }
          counters.put (name, new Integer (val));
      }
  
  
      /** Simple extension method to get a value from the hashtable.  */
      public int read(String name)
      { 
          counter++; // every method call increments plain counter
          Integer cval = (Integer)counters.get(name);
          return (cval == null) ? 0 : cval.intValue();
      }
  
  
      /** Simple extension method to increment a value in the hashtable.  */
      public void incr(org.apache.xalan.extensions.XSLProcessorContext context,  
                       org.w3c.dom.Element elem)
      {
          counter++; // every method call increments plain counter
          String name = elem.getAttribute("name");
          Integer cval = (Integer) counters.get(name);
          int nval = (cval == null) ? 0 : (cval.intValue () + 1);
          counters.put (name, new Integer (nval));
      }
  
  
      //// Implementations of TestableExtension
      /** Plain counter of number of times called.  */    
      private static int counter = 0;
      
  
      /** 
       * Perform and log any pre-transformation info.  
       * @return true if OK; false if any fatal error occoured
       * @param datalet Datalet of current stylesheet test
       */
      public static boolean preCheck(Logger logger, StylesheetDatalet datalet)
      {
          logger.logMsg(Logger.INFOMSG, "javaSample4.preCheck; counter=" + counter);
          return true;        
      }
      
  
      /** 
       * Perform and log any post-transformation info.  
       * 
       * The extension should validate that it's extension was 
       * properly called; we also validate output file.
       * 
       * @param logger Logger to dump any info to
       * @param datalet Datalet of current stylesheet test
       */
      public static void postCheck(Logger logger, StylesheetDatalet datalet)
      {
          // Dump out our hashtable for user analysis
          logger.logHashtable(Logger.STATUSMSG, counters, "javaSample4.postCheck() 
counters");
  
          // Verify that we've been called at least once
          //@todo update to verify specific number of calls and hash entries
          if (counter > 0)
              logger.checkPass("javaSample4 has been called " + counter + " times");
          else
              logger.checkFail("javaSample4 has not been called");
  
          // We also validate the output file the normal way
          CheckService fileChecker = 
(CheckService)datalet.options.get("fileCheckerImpl");
          // Supply default value
          if (null == fileChecker)
              fileChecker = new XHTFileCheckService();
          if (Logger.PASS_RESULT
              != fileChecker.check(logger,
                                   new File(datalet.outputName), 
                                   new File(datalet.goldName), 
                                   "Extension test of " + datalet.getDescription())
             )
          {
              // Log a custom element with all the file refs first
              // Closely related to viewResults.xsl select='fileref"
              //@todo check that these links are valid when base 
              //  paths are either relative or absolute!
              Hashtable attrs = new Hashtable();
              attrs.put("idref", (new File(datalet.inputName)).getName());
              attrs.put("inputName", datalet.inputName);
              attrs.put("xmlName", datalet.xmlName);
              attrs.put("outputName", datalet.outputName);
              attrs.put("goldName", datalet.goldName);
              logger.logElement(Logger.STATUSMSG, "fileref", attrs, "Extension test 
file references");
          }
      }
  
  
      /**
       * Description of what this extension does.  
       * @return String description of extension
       */
      public static String getDescription()
      {
          return "Simple hashtable lookup and counter";
      }
  }
  
  
  1.1                  xml-xalan/test/tests/extensions/java/javaSample4.xml
  
  Index: javaSample4.xml
  ===================================================================
  <?xml version="1.0"?>
  <doc>
    <name first="Sanjiva" last="Weerawarana"/>
    <name first="Joseph" last="Kesselman"/>
    <name first="Stephen" last="Auriemma"/>
    <name first="Igor" last="Belakovskiy"/>    
    <name first="David" last="Marston"/>
    <name first="David" last="Bertoni"/>
    <name first="Donald" last="Leslie"/>
    <name first="Emily" last="Farmer"/>
    <name first="Myriam" last="Midy"/>
    <name first="Paul" last="Dick"/>
    <name first="Scott" last="Boag"/>
    <name first="Shane" last="Curcuru"/>
    <name first="Marcia" last="Hoffman"/>
    <name first="Noah" last="Mendelsohn"/>
    <name first="Alex" last="Morrow"/>    
  </doc>
  
  
  1.1                  xml-xalan/test/tests/extensions/java/javaSample4.xsl
  
  Index: javaSample4.xsl
  ===================================================================
  <?xml version="1.0"?> 
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                  xmlns:lxslt="http://xml.apache.org/xslt";
                  xmlns:counter="MyCounter"
                  extension-element-prefixes="counter"
                  version="1.0">
  
  
    <lxslt:component prefix="counter"
                     elements="init incr" functions="read">
      <lxslt:script lang="javaclass" src="javaSample4"/>
    </lxslt:component>
  
    <xsl:template match="/">
      <HTML>
        <H1>Java Example</H1>
        <counter:init name="index" value="1"/>
        <p>Here are the names in alphabetical order by last name:</p>
        <xsl:for-each select="doc/name">
          <xsl:sort select="@last"/>
          <xsl:sort select="@first"/>
          <p>
          <xsl:text>[</xsl:text>
          <xsl:value-of select="counter:read('index')"/>
          <xsl:text>]. </xsl:text>
          <xsl:value-of select="@last"/>
          <xsl:text>, </xsl:text>
          <xsl:value-of select="@first"/>
          </p>
          <counter:incr name="index"/>
        </xsl:for-each>
      </HTML>
    </xsl:template>
   
  </xsl:stylesheet>
  
  
  
  1.1                  xml-xalan/test/tests/extensions/javascript/javascriptSample5.xml
  
  Index: javascriptSample5.xml
  ===================================================================
  <?xml version="1.0"?>
  <doc>
    <name first="Sanjiva" last="Weerawarana"/>
    <name first="Joseph" last="Kesselman"/>
    <name first="Stephen" last="Auriemma"/>
    <name first="Igor" last="Belakovskiy"/>    
    <name first="David" last="Marston"/>
    <name first="David" last="Bertoni"/>
    <name first="Donald" last="Leslie"/>
    <name first="Emily" last="Farmer"/>
    <name first="Myriam" last="Midy"/>
    <name first="Paul" last="Dick"/>
    <name first="Scott" last="Boag"/>
    <name first="Shane" last="Curcuru"/>
    <name first="Marcia" last="Hoffman"/>
    <name first="Noah" last="Mendelsohn"/>
    <name first="Alex" last="Morrow"/>    
  </doc>
  
  
  1.1                  xml-xalan/test/tests/extensions/javascript/javascriptSample5.xsl
  
  Index: javascriptSample5.xsl
  ===================================================================
  <?xml version="1.0"?> 
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                  xmlns:lxslt="http://xml.apache.org/xslt";
                  xmlns:counter="MyCounter"
                  extension-element-prefixes="counter"
                  version="1.0">
  
  <!-- Copied from: java/samples/extensions/5-numlistJscript.xsl -->
  
    <lxslt:component prefix="counter"
                     elements="init incr" functions="read">
      <lxslt:script lang="javascript">
        var counters = new Array();
  
        function init (xslproc, elem) {
          name = elem.getAttribute ("name");
          value = parseInt(elem.getAttribute ("value"));
          counters[name] = value;
          return null;
        }
  
        function read (name) {
          return "" + (counters[name]);
        }
  
        function incr (xslproc, elem)
        {
          name = elem.getAttribute ("name");
          counters[name]++;
          return null;
        }
      </lxslt:script>
    </lxslt:component>
  
    <xsl:template match="/">
      <HTML>
        <H1>JavaScript Example.</H1>
        <counter:init name="index" value="1"/>
        <p>Here are the names in alphabetical order by last name:</p>
        <xsl:for-each select="doc/name">
          <xsl:sort select="@last"/>
          <xsl:sort select="@first"/>
          <p>
          <xsl:text>[</xsl:text>
          <xsl:value-of select="counter:read('index')"/>
          <xsl:text>]. </xsl:text>
          <xsl:value-of select="@last"/>
          <xsl:text>, </xsl:text>
          <xsl:value-of select="@first"/>
          </p>
          <counter:incr name="index"/>
        </xsl:for-each>
      </HTML>
    </xsl:template>
   
  </xsl:stylesheet>
  
  
  

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

Reply via email to