ceki        2003/09/12 11:24:26

  Modified:    docs     .cvsignore
               tests/witness simple ttcc
               src/java/org/apache/joran/action AppenderAction.java
                        AppenderRefAction.java RootLoggerAction.java
                        LoggerAction.java
               src/java/org/apache/joran JoranParser.java RuleStore.java
               src/java/org/apache/log4j/pattern PatternParser.java
               src/java/org/apache/log4j PatternLayout.java
               tests/src/java/org/apache/joran JoranParserTest.java
               tests/src/java/org/apache/log4j MinimumTestCase.java
               tests/src/java/org/apache/log4j/helpers
                        BoundedFIFOTestCase.java
  Added:       tests/input/joran parser3.xml
               tests/src/java/org/apache/log4j/util
                        JunitTestRunnerFilter.java
               src/java/org/apache/joran/action NestComponentIA.java
                        ImplicitAction.java
               src/java/org/apache/joran/helper Option.java
  Removed:     src/java/org/apache/joran ImplicitRule.java
  Log:
  
  - Fixed a few JUnit tests to allow them to run under Eclipse. 
  
  - Joran now handles implicit rules. It can congifure the triggering 
  policy and rolling policy in RollingAppender.
  
  - PatternLayout can now learn new conversion rules. (NOT YET TESTED)
  
  Revision  Changes    Path
  1.5       +2 -1      jakarta-log4j/docs/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/docs/.cvsignore,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- .cvsignore        11 Sep 2003 17:25:24 -0000      1.4
  +++ .cvsignore        12 Sep 2003 18:24:26 -0000      1.5
  @@ -7,4 +7,5 @@
   download.html
   earlier.html
   history.html
  -index.html
  \ No newline at end of file
  +index.html
  +package-list
  
  
  
  1.1                  jakarta-log4j/tests/input/joran/parser3.xml
  
  Index: parser3.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8" ?>
  <!DOCTYPE log4j:configuration>
  
  <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
    1
    <appender name="A1" class="org.apache.log4j.rolling.RollingFileAppender">
      <param name="File"   value="output/temp.A1" />
      <param name="Append" value="false" />         
  2
      <rollingPolicy class="org.apache.log4j.rolling.SlidingWindowRollingPolicy">
         <param name="activeFileName" value="output/parser3"/>
        <param name="fileNamePattern" value="output/parser3.%i"/>
      </rollingPolicy>
  3    
      <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
        <param name="maxFileSize" value="100"/>
      </triggeringPolicy>
  4        
      <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p %c{2} - %m%n"/>
      </layout>     
    </appender>
  5  
  6  
    <logger>
      <level value ="debug" />
      <appender-ref ref="A1" />
    </logger>
   7 
     <logger name="asd">
      <level value ="debug" />
      <appender-ref ref="A1" />
    </logger>
  8    
    <root>
      <level value ="debug" />
      <appender-ref ref="A1" />
    </root>
  9  
  </log4j:configuration>
  
  
  1.4       +0 -2      jakarta-log4j/tests/witness/simple
  
  Index: simple
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/tests/witness/simple,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- simple    14 Nov 2002 08:48:40 -0000      1.3
  +++ simple    12 Sep 2003 18:24:26 -0000      1.4
  @@ -34,6 +34,4 @@
        at junit.framework.TestCase.run(X)
        at junit.framework.TestSuite.runTest(X)
        at junit.framework.TestSuite.run(X)
  -     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(X)
  -     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(X)
   INFO - Messages should bear numbers 0 through 23.
  
  
  
  1.4       +0 -2      jakarta-log4j/tests/witness/ttcc
  
  Index: ttcc
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/tests/witness/ttcc,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ttcc      14 Nov 2002 08:48:40 -0000      1.3
  +++ ttcc      12 Sep 2003 18:24:26 -0000      1.4
  @@ -34,6 +34,4 @@
        at junit.framework.TestCase.run(X)
        at junit.framework.TestSuite.runTest(X)
        at junit.framework.TestSuite.run(X)
  -     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(X)
  -     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(X)
    [main] INFO INF - Messages should bear numbers 0 through 23.
  
  
  
  1.1                  
jakarta-log4j/tests/src/java/org/apache/log4j/util/JunitTestRunnerFilter.java
  
  Index: JunitTestRunnerFilter.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, 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 "log4j" 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 (INCLU-
   * DING, 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.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package org.apache.log4j.util;
  
  import org.apache.oro.text.perl.Perl5Util;
  
  
  public class JunitTestRunnerFilter implements Filter {
    Perl5Util util = new Perl5Util();
  
    /**
     * Filter out stack trace lines coming from the various JUnit TestRunners.
     */
    public String filter(String in) {
      if(in == null) 
       return null;
       
      if (util.match("/at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner/", 
in)) {
        return null;
      } else if (util.match("/at 
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner/", in)) {
            return in;
      } else {
        return in;
      }
    }
   
  }
  
  
  
  1.3       +2 -1      
jakarta-log4j/src/java/org/apache/joran/action/AppenderAction.java
  
  Index: AppenderAction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/joran/action/AppenderAction.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AppenderAction.java       11 Sep 2003 17:00:42 -0000      1.2
  +++ AppenderAction.java       12 Sep 2003 18:24:26 -0000      1.3
  @@ -50,6 +50,7 @@
   package org.apache.joran.action;
   
   import org.apache.joran.ExecutionContext;
  +import org.apache.joran.helper.Option;
   
   import org.apache.log4j.Appender;
   import org.apache.log4j.Logger;
  @@ -86,7 +87,7 @@
         String appenderName =
           appenderElement.getAttribute(ActionConst.NAME_ATTRIBUTE);
   
  -      if (appenderName == null) {
  +      if (Option.isEmpty(appenderName)) {
           logger.warn(
             "No appender name given for appender of type " + className + "].");
         } else {
  
  
  
  1.4       +2 -1      
jakarta-log4j/src/java/org/apache/joran/action/AppenderRefAction.java
  
  Index: AppenderRefAction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/joran/action/AppenderRefAction.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- AppenderRefAction.java    11 Sep 2003 17:25:24 -0000      1.3
  +++ AppenderRefAction.java    12 Sep 2003 18:24:26 -0000      1.4
  @@ -50,6 +50,7 @@
   package org.apache.joran.action;
   
   import org.apache.joran.ExecutionContext;
  +import org.apache.joran.helper.Option;
   import org.apache.log4j.Appender;
   import org.apache.log4j.Logger;
   import org.apache.log4j.spi.AppenderAttachable;
  @@ -84,7 +85,7 @@
   
       String appenderName = appenderRef.getAttribute(ActionConst.REF_ATTRIBUTE);
   
  -    if (appenderName == null) {
  +    if (Option.isEmpty(appenderName)) {
         // print a meaningful error message and return
         Node parentNode = appenderRef.getParentNode();
         String errMsg = "Missing appender ref attribute in <appender-ref> tag.";
  
  
  
  1.3       +1 -1      
jakarta-log4j/src/java/org/apache/joran/action/RootLoggerAction.java
  
  Index: RootLoggerAction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/joran/action/RootLoggerAction.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- RootLoggerAction.java     11 Sep 2003 17:25:24 -0000      1.2
  +++ RootLoggerAction.java     12 Sep 2003 18:24:26 -0000      1.3
  @@ -91,7 +91,7 @@
           "The object on the top the of the stack is not the root logger");
           logger.warn("It is: "+o);
       } else {
  -      logger.debug("Removing root logger from stack.");
  +      logger.debug("Removing root logger from top of stack.");
         ec.popObject();
       }
     }
  
  
  
  1.3       +2 -1      jakarta-log4j/src/java/org/apache/joran/action/LoggerAction.java
  
  Index: LoggerAction.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/joran/action/LoggerAction.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LoggerAction.java 11 Sep 2003 17:25:24 -0000      1.2
  +++ LoggerAction.java 12 Sep 2003 18:24:26 -0000      1.3
  @@ -1,6 +1,7 @@
   package org.apache.joran.action;
   
   import org.apache.joran.ExecutionContext;
  +import org.apache.joran.helper.Option;
   
   import org.apache.log4j.Logger;
   import org.apache.log4j.helpers.Loader;
  @@ -23,7 +24,7 @@
   
       // Create a new org.apache.log4j.Category object from the <category> element.
       String loggerName = loggerElement.getAttribute(ActionConst.NAME_ATTRIBUTE);
  -    if(loggerName == null || ActionConst.EMPTY_STR.equals(loggerName)) {
  +    if(Option.isEmpty(loggerName)) {
         inError = true;
                        String errorMsg = "No 'name' attribute in element "
                                +loggerElement.getTagName();
  
  
  
  1.1                  
jakarta-log4j/src/java/org/apache/joran/action/NestComponentIA.java
  
  Index: NestComponentIA.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, 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 "log4j" 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 (INCLU-
   * DING, 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.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package org.apache.joran.action;
  
  import org.apache.joran.ExecutionContext;
  
  import org.apache.log4j.Logger;
  import org.apache.log4j.config.PropertySetter;
  import org.apache.log4j.helpers.Loader;
  import org.apache.log4j.spi.OptionHandler;
  
  import org.w3c.dom.Element;
  
  
  /**
   * @author Ceki G&uuml;lc&uuml;
   *
   */
  public class NestComponentIA extends ImplicitAction {
    static final Logger logger = Logger.getLogger(NestComponentIA.class);
  
    Object nestedComponent;
    int containmentType;
    PropertySetter parentBean;
    
    public boolean isApplicable(Element nestedElement, ExecutionContext ec) {
      inError = false;
      Object o = ec.peekObject();
      parentBean = new PropertySetter(o);
  
      String nestedElementTagName = nestedElement.getTagName();
  
      containmentType = parentBean.canContainComponent(nestedElementTagName);
  
      switch (containmentType) {
      case PropertySetter.NOT_FOUND:
        return false;
  
      case PropertySetter.AS_COLLECTION:
        return true;
  
      case PropertySetter.AS_PROPERTY:
        return true;
        
        default: 
        inError= true;
        ec.addError("PropertySetter.canContainComponent returned "+containmentType);
        return false;
      }
    }
  
    public void begin(ExecutionContext ec, Element e) {
      // inError was reset in isApplicable. It should not be touched here
  
        String className = e.getAttribute(ActionConst.CLASS_ATTRIBUTE);
        
        String tagName = e.getTagName();
        if(className == null || ActionConst.EMPTY_STR.equals(className)) {
          inError = true;
          String errMsg = "No class name attribute in <"+tagName+">";
          logger.error(errMsg);
          ec.addError(errMsg);
          return;
        }
        
        try {
          logger.debug("About to instantiate component <"+tagName+ "> of type [" + 
className + "]");
  
          nestedComponent = Loader.loadClass(className).newInstance();
           
              
          logger.debug("Pushing component <"+tagName+"> on top of the object stack.");
          ec.pushObject(nestedComponent);
        } catch (Exception oops) {
          inError = true;      
          String msg =  "Could not create component <"+tagName+">.";
          logger.error(msg, oops);
          ec.addError(msg);
        }
    }
  
    public void end(ExecutionContext ec, Element e) {
      if (inError) {
          return;
        }
  
        if (nestedComponent instanceof OptionHandler) {
          ((OptionHandler) nestedComponent).activateOptions();
        }
  
        Object o = ec.peekObject();
  
        if (o != nestedComponent) {
          logger.warn(
            "The object on the top the of the stack is not the component pushed 
earlier.");
        } else {
          logger.warn("Removing component from the object stack");
          ec.popObject();
         
           
          String tagName =  e.getTagName();
          // Now let us attach the component
          switch (containmentType) {
          case PropertySetter.AS_PROPERTY:
          logger.debug("Setting ["+tagName+"] to parent.");
            parentBean.setComponent(tagName, nestedComponent);
            break;
  
          case PropertySetter.AS_COLLECTION:
          logger.debug("Adding ["+tagName+"] to parent.");
            parentBean.addComponent(e.getTagName(), nestedComponent);
  
            break;
          } 
        }
    }
  
    public void finish(ExecutionContext ec) {
    }
  }
  
  
  
  1.1                  
jakarta-log4j/src/java/org/apache/joran/action/ImplicitAction.java
  
  Index: ImplicitAction.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, 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 "log4j" 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 (INCLU-
   * DING, 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.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package org.apache.joran.action;
  
  import org.apache.joran.ExecutionContext;
  import org.w3c.dom.Element;
  
  /**
   * ImplcitActions are like normal (explicit) actions except that are applied
   * by the parser when no other pattern applies. Since there can be many implcit 
   * actions, each action is asked whether it applies in the given context. The 
   * first impplcit action to respond postively will be applied. See also the
   * [EMAIL PROTECTED] #isApplicable} method.
   * 
   * @author Ceki G&uuml;lc&uuml;
   */
  public abstract class ImplicitAction extends Action {
  
    public abstract boolean isApplicable(Element e, ExecutionContext ec);
  }
  
  
  
  1.5       +29 -6     jakarta-log4j/src/java/org/apache/joran/JoranParser.java
  
  Index: JoranParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/joran/JoranParser.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- JoranParser.java  10 Sep 2003 16:28:18 -0000      1.4
  +++ JoranParser.java  12 Sep 2003 18:24:26 -0000      1.5
  @@ -57,6 +57,7 @@
   import org.w3c.dom.Element;
   import org.w3c.dom.Node;
   
  +import java.util.ArrayList;
   import java.util.Iterator;
   import java.util.List;
   
  @@ -65,16 +66,22 @@
     static final Logger logger = Logger.getLogger(JoranParser.class);
     private RuleStore ruleStore;
     private ExecutionContext ec;
  -
  +  private ArrayList implicitActions;
  +  
     JoranParser(RuleStore rs) {
       ruleStore = rs;
       ec = new ExecutionContext(this);
  +    implicitActions = new ArrayList(3);
     }
   
     public ExecutionContext getExecutionContext() {
       return ec;
     }
   
  +  public void addImplcitAction(ImplicitAction ia) {
  +    implicitActions.add(ia);
  +  }
  +  
     public void parse(Document document) {
       Pattern currentPattern = new Pattern();
       Element e = document.getDocumentElement();
  @@ -86,19 +93,25 @@
         return;
       }
   
  +
  +    //logger.debug("Node type is "+n.getNodeType()+", name is "+n.getNodeName()+", 
value "+n.getNodeValue());
  +
  +       
       try {
  +     // Element currentElement = (Element) n;
  +            
         currentPattern.push(n.getNodeName());
  -
  -      if (n instanceof Element) {
  +      // only print the pattern for ELEMENT NODES
  +      if(n.getNodeType() == Node.ELEMENT_NODE) {
           logger.debug("pattern is " + currentPattern);
         }
  -
         List applicableActionList = ruleStore.matchActions(currentPattern);
   
         //logger.debug("set of applicable patterns: " + applicableActionList);
   
         if (applicableActionList == null) {
  -        applicableActionList = lookupImplicitAction(currentPattern);
  +        if(n instanceof Element)
  +        applicableActionList = lookupImplicitAction((Element)n, ec);
         }
   
         if (applicableActionList != null) {
  @@ -124,7 +137,17 @@
      * action is found, it is returned. Thus, the returned list will have at most
      * one element.
      */
  -  List lookupImplicitAction(Pattern p) {
  +  List lookupImplicitAction(Element element, ExecutionContext ec) {
  +    int len = implicitActions.size();
  +    for(int i = 0; i < len; i++) {
  +      ImplicitAction ia = (ImplicitAction) implicitActions.get(i);
  +      if(ia.isApplicable(element, ec)) {
  +        List actionList = new ArrayList(1);
  +        actionList.add(ia);
  +        return actionList;
  +      }
  +      
  +    }
       return null;
     }
   
  
  
  
  1.4       +1 -1      jakarta-log4j/src/java/org/apache/joran/RuleStore.java
  
  Index: RuleStore.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/joran/RuleStore.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- RuleStore.java    2 Sep 2003 18:36:29 -0000       1.3
  +++ RuleStore.java    12 Sep 2003 18:24:26 -0000      1.4
  @@ -56,6 +56,6 @@
   
   public interface RuleStore {
     public void addRule(Pattern pattern, Action action);
  -
  +  
     public List matchActions(Pattern pattern);
   }
  
  
  
  1.1                  jakarta-log4j/src/java/org/apache/joran/helper/Option.java
  
  Index: Option.java
  ===================================================================
  
  package org.apache.joran.helper;
  
  /**
   * 
   * 
   * @author Ceki G&uuml;lc&uuml;
   */
  public class Option {
  
    static final String EMPTY_STR = "";
    
     static public boolean isEmpty(String val) {
       return (val == null || EMPTY_STR.equals(val));
     }
  
  }
  
  
  
  1.4       +7 -6      
jakarta-log4j/src/java/org/apache/log4j/pattern/PatternParser.java
  
  Index: PatternParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/pattern/PatternParser.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PatternParser.java        10 Jul 2003 17:08:46 -0000      1.3
  +++ PatternParser.java        12 Sep 2003 18:24:26 -0000      1.4
  @@ -55,6 +55,7 @@
   import org.apache.log4j.helpers.LogLog;
   import org.apache.log4j.helpers.OptionConverter;
   
  +import java.util.HashMap;
   import java.util.Hashtable;
   
   
  @@ -93,10 +94,10 @@
     static final int LEVEL_CONVERTER = 2002;
     static final int NDC_CONVERTER = 2003;
     static final int MESSAGE_CONVERTER = 2004;
  -  static Hashtable globalRulesRegistry;
  +  static HashMap globalRulesRegistry;
   
     static {
  -    globalRulesRegistry = new Hashtable(17);
  +    globalRulesRegistry = new HashMap(17);
       globalRulesRegistry.put("c", LoggerPatternConverter.class.getName());
       globalRulesRegistry.put("C", ClassNamePatternConverter.class.getName());
       globalRulesRegistry.put("F", FileLocationPatternConverter.class.getName());
  @@ -122,7 +123,7 @@
     PatternConverter tail;
     protected FormattingInfo formattingInfo = new FormattingInfo();
     protected String pattern;
  -  Hashtable converterRegistry;
  +  HashMap converterRegistry;
   
     static Logger logger  = Logger.getLogger("LOG4J."+PatternParser.class.getName());
     
  @@ -437,11 +438,11 @@
       formattingInfo.reset();
     }
   
  -  public Hashtable getConverterRegistry() {
  +  public HashMap getConverterRegistry() {
       return converterRegistry;
     }
   
  -  public void setConverterRegistry(Hashtable hashtable) {
  -    converterRegistry = hashtable;
  +  public void setConverterRegistry(HashMap converterRegistry) {
  +    this.converterRegistry = converterRegistry;
     }
   }
  
  
  
  1.21      +34 -6     jakarta-log4j/src/java/org/apache/log4j/PatternLayout.java
  
  Index: PatternLayout.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/PatternLayout.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- PatternLayout.java        23 Jun 2003 16:04:25 -0000      1.20
  +++ PatternLayout.java        12 Sep 2003 18:24:26 -0000      1.21
  @@ -51,6 +51,7 @@
   
   import java.io.IOException;
   import java.io.Writer;
  +import java.util.HashMap;
   
   import org.apache.log4j.pattern.PatternConverter;
   import org.apache.log4j.pattern.PatternParser;
  @@ -439,9 +440,11 @@
     public static final String TTCC_CONVERSION_PATTERN =
       "%r [%t] %p %c %x - %m%n";
   
  -  private String pattern;
  +  private String conversionPattern;
     private PatternConverter head;
   
  +  private HashMap ruleRegistry = null;
  +
     /**
        Constructs a PatternLayout using the DEFAULT_LAYOUT_PATTERN.
   
  @@ -456,34 +459,59 @@
     */
     public PatternLayout(String pattern) {
       //System.out.println("...PatternLayout ["+pattern+"], "+this);
  -    this.pattern = pattern;
  +    this.conversionPattern = pattern;
       head =
         createPatternParser(
           (pattern == null) ? DEFAULT_CONVERSION_PATTERN : pattern).parse();
     }
   
     /**
  +   * 
  +   * Add a new conversion word and associate it with a 
  +   * [EMAIL PROTECTED] org.apache.log4j.pattern.PatternConverter PatternConverter} 
class.
  +   * 
  +   * @param conversionWord New conversion word to accept in conversion patterns
  +   * @param converterClass The class name associated with the conversion word
  +   * @since 1.3
  +   */
  +  public void addConversionRule(String conversionWord, String converterClass) {
  +    if(ruleRegistry == null) {
  +      ruleRegistry = new HashMap(5);
  +    }
  +    ruleRegistry.put(conversionWord, converterClass);
  +  }
  +
  +  /**
  +   * Returns the rule registry specific for this PatternLayout instance.
  +   * @since 1.3
  +   */
  +  public HashMap getRuleRegistry() {
  +    return ruleRegistry;
  +  }
  +  
  +  /**
       Set the <b>ConversionPattern</b> option. This is the string which
       controls formatting and consists of a mix of literal content and
       conversion specifiers.
     */
     public void setConversionPattern(String conversionPattern) {
  -    pattern = conversionPattern;
  -    head = createPatternParser(conversionPattern).parse();
  +    this.conversionPattern = conversionPattern;
     }
   
     /**
        Returns the value of the <b>ConversionPattern</b> option.
      */
     public String getConversionPattern() {
  -    return pattern;
  +    return conversionPattern;
     }
   
     /**
        Does not do anything as options become effective
     */
     public void activateOptions() {
  -    // nothing to do.
  +    PatternParser patternParser = createPatternParser(conversionPattern);
  +    patternParser.setConverterRegistry(ruleRegistry);
  +    head = patternParser.parse();
     }
   
     /**
  
  
  
  1.4       +188 -83   
jakarta-log4j/tests/src/java/org/apache/joran/JoranParserTest.java
  
  Index: JoranParserTest.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/tests/src/java/org/apache/joran/JoranParserTest.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JoranParserTest.java      11 Sep 2003 17:25:24 -0000      1.3
  +++ JoranParserTest.java      12 Sep 2003 18:24:26 -0000      1.4
  @@ -1,4 +1,53 @@
   /*
  + * ============================================================================
  + *                   The Apache Software License, Version 1.1
  + * ============================================================================
  + *
  + *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
  + *
  + * Redistribution and use in source and binary forms, with or without modifica-
  + * tion, 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 "log4j" 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 (INCLU-
  + * DING, 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.  For more  information on the
  + * Apache Software Foundation, please see <http://www.apache.org/>.
  + *
  + */
  +
  +/*
    * Created on Aug 24, 2003
    *
    * To change the template for this generated file go to
  @@ -6,10 +55,7 @@
    */
   package org.apache.joran;
   
  -import java.util.HashMap;
  -
  -import javax.xml.parsers.DocumentBuilder;
  -import javax.xml.parsers.DocumentBuilderFactory;
  +import junit.framework.TestCase;
   
   import org.apache.joran.action.ActionConst;
   import org.apache.joran.action.AppenderAction;
  @@ -17,15 +63,22 @@
   import org.apache.joran.action.LayoutAction;
   import org.apache.joran.action.LevelAction;
   import org.apache.joran.action.LoggerAction;
  +import org.apache.joran.action.NestComponentIA;
   import org.apache.joran.action.ParamAction;
   import org.apache.joran.action.RootLoggerAction;
  +
   import org.apache.log4j.ConsoleAppender;
   import org.apache.log4j.LogManager;
   import org.apache.log4j.Logger;
   import org.apache.log4j.PatternLayout;
  +
   import org.w3c.dom.Document;
   
  -import junit.framework.TestCase;
  +import java.util.HashMap;
  +
  +import javax.xml.parsers.DocumentBuilder;
  +import javax.xml.parsers.DocumentBuilderFactory;
  +
   
   /**
    * @author ceki
  @@ -34,90 +87,142 @@
    * Window>Preferences>Java>Code Generation>Code and Comments
    */
   public class JoranParserTest extends TestCase {
  +  static final Logger logger = Logger.getLogger(JoranParserTest.class);
   
  -   final static Logger logger = Logger.getLogger(JoranParserTest.class);  
  -     
  -     /**
  -      * Constructor for JoranParserTestCase.
  -      * @param name
  -      */
  -     public JoranParserTest(String name) {
  -             super(name);
  -     }
  -
  -     /*
  -      * @see TestCase#setUp()
  -      */
  -     protected void setUp() throws Exception {
  -             super.setUp();
  -             Logger root = Logger.getRootLogger();
  -                      root.addAppender(
  -                              new ConsoleAppender(
  -                                      new PatternLayout("%r %5p [%t] %c{2} - 
%m%n")));
  -     }
  -
  -     /*
  -      * @see TestCase#tearDown()
  -      */
  -     protected void tearDown() throws Exception {
  -             super.tearDown();
  -             LogManager.shutdown();
  -     }
  +  /**
  +   * Constructor for JoranParserTestCase.
  +   * @param name
  +   */
  +  public JoranParserTest(String name) {
  +    super(name);
  +  }
  +
  +  /*
  +   * @see TestCase#setUp()
  +   */
  +  protected void setUp() throws Exception {
  +    super.setUp();
  +
  +    Logger root = Logger.getRootLogger();
  +    root.addAppender(
  +      new ConsoleAppender(new PatternLayout("%r %5p [%t] %c{2} - %m%n")));
  +  }
  +
  +  /*
  +   * @see TestCase#tearDown()
  +   */
  +  protected void tearDown() throws Exception {
  +    super.tearDown();
  +    LogManager.shutdown();
  +  }
   
     public void xtestLoop() throws Exception {
  -     logger.debug("Starting testLoop");
  +    logger.debug("Starting testLoop");
   
  -      DocumentBuilderFactory dbf = null;
  +    DocumentBuilderFactory dbf = null;
   
  -   dbf = DocumentBuilderFactory.newInstance();
  +    dbf = DocumentBuilderFactory.newInstance();
   
  -   DocumentBuilder docBuilder = dbf.newDocumentBuilder();
  -        
  -   //inputSource.setSystemId("dummy://log4j.dtd");
  -
  -        Document doc = docBuilder.parse("file:input/joran/parser1.xml");
  -        RuleStore rs = new SimpleRuleStore();
  -        logger.debug("pattern: "+new Pattern("log4j:configuration/logger"));
  -        rs.addRule(new Pattern("log4j:configuration/logger"), new LoggerAction());
  -              rs.addRule(new Pattern("log4j:configuration/logger/level"), new 
LevelAction());
  -              rs.addRule(new Pattern("log4j:configuration/root"), new 
RootLoggerAction());
  -             rs.addRule(new Pattern("log4j:configuration/root"), new 
RootLoggerAction());
  -        JoranParser jp = new JoranParser(rs);
  -              ExecutionContext ec = jp.getExecutionContext();
  -        HashMap omap = ec.getObjectMap();
  -        omap.put(ActionConst.APPENDER_BAG, new HashMap());
  -              ec.pushObject(LogManager.getLoggerRepository());
  -        jp.parse(doc);
  -  }
  -
  -     public void testLoop2() throws Exception {
  -                     logger.debug("Starting testLoop2");
  -
  -              DocumentBuilderFactory dbf = null;
  -
  -              dbf = DocumentBuilderFactory.newInstance();
  -
  -              DocumentBuilder docBuilder = dbf.newDocumentBuilder();
  -        
  -              //inputSource.setSystemId("dummy://log4j.dtd");
  -
  -                      Document doc = 
docBuilder.parse("file:input/joran/parser2.xml");
  -                      RuleStore rs = new SimpleRuleStore();
  -                      rs.addRule(new Pattern("log4j:configuration/logger"), new 
LoggerAction());
  -                      rs.addRule(new Pattern("log4j:configuration/logger/level"), 
new LevelAction());
  -                      rs.addRule(new Pattern("log4j:configuration/root"), new 
RootLoggerAction());
  -                rs.addRule(new Pattern("log4j:configuration/logger/appender-ref"), 
new AppenderRefAction());
  -                rs.addRule(new Pattern("log4j:configuration/root/appender-ref"), 
new AppenderRefAction());
  -                rs.addRule(new Pattern("log4j:configuration/appender"), new 
AppenderAction());
  -                rs.addRule(new Pattern("log4j:configuration/appender/layout"), new 
LayoutAction());
  -          rs.addRule(new Pattern("*/param"), new ParamAction());
  -                      JoranParser jp = new JoranParser(rs);
  -                      ExecutionContext ec = jp.getExecutionContext();
  -                      HashMap omap = ec.getObjectMap();
  -                      omap.put(ActionConst.APPENDER_BAG, new HashMap());
  -                      ec.pushObject(LogManager.getLoggerRepository());
  -                      jp.parse(doc);
  -             }
  +    DocumentBuilder docBuilder = dbf.newDocumentBuilder();
  +
  +    //inputSource.setSystemId("dummy://log4j.dtd");
  +    Document doc = docBuilder.parse("file:input/joran/parser1.xml");
  +    RuleStore rs = new SimpleRuleStore();
  +    logger.debug("pattern: " + new Pattern("log4j:configuration/logger"));
  +    rs.addRule(new Pattern("log4j:configuration/logger"), new LoggerAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/logger/level"), new LevelAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/root"), new RootLoggerAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/root"), new RootLoggerAction());
  +
  +    JoranParser jp = new JoranParser(rs);
  +    ExecutionContext ec = jp.getExecutionContext();
  +    HashMap omap = ec.getObjectMap();
  +    omap.put(ActionConst.APPENDER_BAG, new HashMap());
  +    ec.pushObject(LogManager.getLoggerRepository());
  +    jp.parse(doc);
  +  }
   
  +  public void xtestLoop2() throws Exception {
  +    logger.debug("Starting testLoop2");
   
  +    DocumentBuilderFactory dbf = null;
  +
  +    dbf = DocumentBuilderFactory.newInstance();
  +
  +    DocumentBuilder docBuilder = dbf.newDocumentBuilder();
  +
  +    //inputSource.setSystemId("dummy://log4j.dtd");
  +    Document doc = docBuilder.parse("file:input/joran/parser2.xml");
  +    RuleStore rs = new SimpleRuleStore();
  +    rs.addRule(new Pattern("log4j:configuration/logger"), new LoggerAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/logger/level"), new LevelAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/root"), new RootLoggerAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/root/level"), new LevelAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/logger/appender-ref"),
  +      new AppenderRefAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/root/appender-ref"),
  +      new AppenderRefAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/appender"), new AppenderAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/appender/layout"), new LayoutAction());
  +    rs.addRule(new Pattern("*/param"), new ParamAction());
  +
  +    JoranParser jp = new JoranParser(rs);
  +    ExecutionContext ec = jp.getExecutionContext();
  +    HashMap omap = ec.getObjectMap();
  +    omap.put(ActionConst.APPENDER_BAG, new HashMap());
  +    ec.pushObject(LogManager.getLoggerRepository());
  +    jp.parse(doc);
  +  }
  +
  +  public void testLoop3() throws Exception {
  +    logger.debug("Starting testLoop3");
  +
  +    DocumentBuilderFactory dbf = null;
  +
  +    dbf = DocumentBuilderFactory.newInstance();
  +
  +    DocumentBuilder docBuilder = dbf.newDocumentBuilder();
  +
  +    //inputSource.setSystemId("dummy://log4j.dtd");
  +    Document doc = docBuilder.parse("file:input/joran/parser3.xml");
  +    RuleStore rs = new SimpleRuleStore();
  +    rs.addRule(new Pattern("log4j:configuration/logger"), new LoggerAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/logger/level"), new LevelAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/root"), new RootLoggerAction());
  +    //rs.addRule(
  +      //new Pattern("log4j:configuration/root/level"), new LevelAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/logger/appender-ref"),
  +      new AppenderRefAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/root/appender-ref"),
  +      new AppenderRefAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/appender"), new AppenderAction());
  +    rs.addRule(
  +      new Pattern("log4j:configuration/appender/layout"), new LayoutAction());
  +    rs.addRule(new Pattern("*/param"), new ParamAction());
  +
  +    JoranParser jp = new JoranParser(rs);
  +    jp.addImplcitAction(new NestComponentIA());
  +
  +    ExecutionContext ec = jp.getExecutionContext();
  +    HashMap omap = ec.getObjectMap();
  +    omap.put(ActionConst.APPENDER_BAG, new HashMap());
  +    ec.pushObject(LogManager.getLoggerRepository());
  +    logger.debug("About to parse doc");
  +    jp.parse(doc);
  +  }
   }
  
  
  
  1.8       +3 -2      
jakarta-log4j/tests/src/java/org/apache/log4j/MinimumTestCase.java
  
  Index: MinimumTestCase.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/tests/src/java/org/apache/log4j/MinimumTestCase.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- MinimumTestCase.java      13 May 2003 16:33:15 -0000      1.7
  +++ MinimumTestCase.java      12 Sep 2003 18:24:26 -0000      1.8
  @@ -99,7 +99,8 @@
   
       Transformer.transform(
         "output/simple", FILTERED,
  -      new Filter[] { new LineNumberFilter(), new SunReflectFilter() });
  +      new Filter[] { new LineNumberFilter(), new SunReflectFilter(), 
  +                     new JunitTestRunnerFilter() });
   
       assertTrue(Compare.compare(FILTERED, "witness/simple"));
     }
  @@ -119,7 +120,7 @@
         "output/ttcc", FILTERED,
         new Filter[] {
           cf1, new LineNumberFilter(), new AbsoluteDateAndTimeFilter(),
  -        new SunReflectFilter()
  +        new SunReflectFilter(), new JunitTestRunnerFilter()
         });
   
       assertTrue(Compare.compare(FILTERED, "witness/ttcc"));
  
  
  
  1.3       +1 -10     
jakarta-log4j/tests/src/java/org/apache/log4j/helpers/BoundedFIFOTestCase.java
  
  Index: BoundedFIFOTestCase.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j/tests/src/java/org/apache/log4j/helpers/BoundedFIFOTestCase.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BoundedFIFOTestCase.java  13 May 2003 16:33:16 -0000      1.2
  +++ BoundedFIFOTestCase.java  12 Sep 2003 18:24:26 -0000      1.3
  @@ -263,14 +263,5 @@
       }
     }
   
  -  public static Test suite() {
  -    TestSuite suite = new TestSuite();
  -    suite.addTest(new BoundedFIFOTestCase("test1"));
  -    suite.addTest(new BoundedFIFOTestCase("test2"));
  -    suite.addTest(new BoundedFIFOTestCase("testResize1"));
  -    suite.addTest(new BoundedFIFOTestCase("testResize2"));
  -    suite.addTest(new BoundedFIFOTestCase("testResize3"));
  -
  -    return suite;
  -  }
  + 
   }
  
  
  

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

Reply via email to