ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bode...@locus.apache.org
Subject cvs commit: jakarta-ant/src/testcases/org/apache/tools/ant/util/regexp JakartaRegexpMatcherTest.java RegexpMatcherTest.java
Date Tue, 28 Nov 2000 15:10:42 GMT
bodewig     00/11/28 07:10:39

  Modified:    .        bootstrap.bat bootstrap.sh build.xml
               src/main/org/apache/tools/ant/types Mapper.java
  Added:       src/main/org/apache/tools/ant/util RegexpPatternMapper.java
               src/main/org/apache/tools/ant/util/regexp
                        JakartaRegexpMatcher.java RegexpMatcher.java
               src/testcases/org/apache/tools/ant/util/regexp
                        JakartaRegexpMatcherTest.java
                        RegexpMatcherTest.java
  Log:
  New Mapper type for regular expression replacements. Currently only
  jakarta-regexp is supported, at least an ORO implementation will follow.
  
  Revision  Changes    Path
  1.20      +1 -1      jakarta-ant/bootstrap.bat
  
  Index: bootstrap.bat
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/bootstrap.bat,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- bootstrap.bat	2000/11/15 17:45:41	1.19
  +++ bootstrap.bat	2000/11/28 15:10:27	1.20
  @@ -44,7 +44,7 @@
   echo.
   echo ... Compiling Ant Classes
   
  -%JAVAC% -d %CLASSDIR% %TOOLS%\tar\*.java %TOOLS%\ant\*.java %TOOLS%\ant\types\*.java %TOOLS%\ant\taskdefs\*.java
%TOOLS%\ant\util\*.java
  +%JAVAC% -d %CLASSDIR% %TOOLS%\tar\*.java %TOOLS%\ant\*.java %TOOLS%\ant\types\*.java %TOOLS%\ant\taskdefs\*.java
%TOOLS%\ant\util\*.java %TOOLS%\ant\util\regexp\RegexpMatcher.java
   
   echo.
   echo ... Copying Required Files
  
  
  
  1.26      +1 -0      jakarta-ant/bootstrap.sh
  
  Index: bootstrap.sh
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/bootstrap.sh,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- bootstrap.sh	2000/11/15 17:45:41	1.25
  +++ bootstrap.sh	2000/11/28 15:10:28	1.26
  @@ -51,6 +51,7 @@
   ${JAVAC} -d ${CLASSDIR} ${TOOLS}/tar/*.java
   ${JAVAC} -d ${CLASSDIR} ${TOOLS}/ant/types/*.java
   ${JAVAC} -d ${CLASSDIR} ${TOOLS}/ant/*.java
  +${JAVAC} -d ${CLASSDIR} ${TOOLS}/ant/util/regexp/RegexpMatcher.java
   ${JAVAC} -d ${CLASSDIR} ${TOOLS}/ant/util/*.java
   ${JAVAC} -d ${CLASSDIR} ${TOOLS}/ant/taskdefs/*.java
   
  
  
  
  1.100     +7 -0      jakarta-ant/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/build.xml,v
  retrieving revision 1.99
  retrieving revision 1.100
  diff -u -r1.99 -r1.100
  --- build.xml	2000/11/25 01:46:52	1.99
  +++ build.xml	2000/11/28 15:10:28	1.100
  @@ -74,6 +74,7 @@
       <available property="antlr.present" classname="antlr.Tool" />
       <available property="vaj.present" classname="com.ibm.ivj.util.base.Workspace" />
       <available property="stylebook.present" classname="org.apache.stylebook.Engine"
/>
  +    <available property="jakarta.regexp.present" classname="org.apache.regexp.RE" />
     </target>
   
     <!-- =================================================================== -->
  @@ -113,6 +114,7 @@
         <exclude name="**/AntStarTeam*.java" unless="starteam.present" />
         <exclude name="**/ANTLR.java" unless="antlr.present" />
         <exclude name="**/ide/VAJ*.java" unless="vaj.present" />
  +      <exclude name="**/JakartaRegexpMatcher.java" unless="jakarta.regexp.present" />
       </javac>
    
       <copy todir="${build.classes}">
  @@ -335,6 +337,7 @@
           <path refid="classpath" />
         </classpath>
         <exclude name="org/apache/tools/ant/taskdefs/optional/ANTLRTest.java" unless="antlr.present"
/>
  +      <exclude name="org/apache/tools/ant/util/regexp/JakartaRegexpMatcherTest.java"
unless="jakarta.regexp.present" />
       </javac>
      </target>
   
  @@ -358,6 +361,7 @@
             <include name="**/*Test*" />
             <!-- abstract class, not a testcase -->
             <exclude name="org/apache/tools/ant/taskdefs/TaskdefsTest.java" />
  +          <exclude name="org/apache/tools/ant/util/regexp/RegexpMatcherTest.java" />
   
             <!-- these depend on order -->
             <exclude name="org/apache/tools/ant/taskdefs/GUnzipTest.java" />
  @@ -365,6 +369,8 @@
   
             <!-- only run this test if ANTLR is installed -->
             <exclude name="org/apache/tools/ant/taskdefs/optional/ANTLRTest.java" unless="antlr.present"
/>
  +
  +          <exclude name="org/apache/tools/ant/util/regexp/JakartaRegexpMatcherTest.java"
unless="jakarta.regexp.present" />
           </fileset>
         </batchtest>
   
  @@ -376,6 +382,7 @@
       <delete dir="src/etc/testcases/taskdefs/optional/antlr/antlr.tmp" />
       <delete dir="src/etc/testcases/taskdefs/taskdefs.tmp" />
       <delete dir="src/etc/testcases/taskdefs.tmp" />
  +    <delete file="src/etc/testcases/taskdefs/tmp.jar" />
     </target>
   
     <target name="run.single.test" if="testcase" depends="compiletests">
  
  
  
  1.2       +5 -1      jakarta-ant/src/main/org/apache/tools/ant/types/Mapper.java
  
  Index: Mapper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/types/Mapper.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Mapper.java	2000/11/17 10:00:58	1.1
  +++ Mapper.java	2000/11/28 15:10:32	1.2
  @@ -141,6 +141,8 @@
               m.setFrom(from);
               m.setTo(to);
               return m;
  +        } catch (BuildException be) {
  +            throw be;
           } catch (Throwable t) {
               throw new BuildException(t);
           }
  @@ -182,10 +184,12 @@
                                   "org.apache.tools.ant.util.GlobPatternMapper");
               implementations.put("merge", 
                                   "org.apache.tools.ant.util.MergingMapper");
  +            implementations.put("regexp", 
  +                                "org.apache.tools.ant.util.RegexpPatternMapper");
           }
   
           public String[] getValues() {
  -            return new String[] {"identity", "flatten", "glob", "merge"};
  +            return new String[] {"identity", "flatten", "glob", "merge", "regexp"};
           }
   
           public String getImplementation() {
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java
  
  Index: RegexpPatternMapper.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 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 acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", 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 apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 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.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.tools.ant.util;
  
  import org.apache.tools.ant.BuildException;
  import org.apache.tools.ant.util.regexp.RegexpMatcher;
  
  import java.util.Enumeration;
  import java.util.Vector;
  
  /**
   * Implementation of FileNameMapper that does regular expression
   * replacements.
   *
   * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
   */
  public class RegexpPatternMapper implements FileNameMapper {
      protected RegexpMatcher reg = null;
      protected char[] to = null;
      protected StringBuffer result = new StringBuffer();
      protected Class regexpMatcherClass = null;
  
      public RegexpPatternMapper() throws BuildException {
          try {
              regexpMatcherClass = Class.forName("org.apache.tools.ant.util.regexp.JakartaRegexpMatcher");
          } catch (ClassNotFoundException ce) {}
  
          if (regexpMatcherClass == null) {
              throw new BuildException("No supported regular expression matcher found");
          }
      }
      
      /**
       * Sets the &quot;from&quot; pattern. Required.
       */
      public void setFrom(String from) throws BuildException {
          reg = createMatcher(from);
      }
  
      /**
       * Sets the &quot;to&quot; pattern. Required.
       */
      public void setTo(String to) {
          this.to = to.toCharArray();
      }
  
      /**
       * Returns null if the source file name doesn't match the
       * &quot;from&quot; pattern, an one-element array containing the
       * translated file otherwise.
       */
      public String[] mapFileName(String sourceFileName) {
          if (reg == null  || to == null
              || !reg.matches(sourceFileName)) {
              return null;
          }
          return new String[] {replaceReferences(sourceFileName)};
      }
  
      /**
       * Replace all backreferences in the to pattern with the matched
       * groups of the source.
       */
      protected String replaceReferences(String source) {
          Vector v = reg.getGroups(source);
          
          result.setLength(0);
          for (int i=0; i<to.length; i++) {
              if (to[i] == '\\') {
                  if (++i < to.length) {
                      int value = Character.digit(to[i], 10);
                      if (value > -1) {
                          result.append((String) v.elementAt(value));
                      } else {
                          result.append(to[i]);
                      }
                  } else {
                      // XXX - should throw an exception instead?
                      result.append('\\');
                  }
              } else {
                  result.append(to[i]);
              }
          }
          return result.toString();
      }
  
      /**
       * Create an implementation of RegexpMatcher based on the classes
       * that can be loaded.
       */
      protected RegexpMatcher createMatcher(String pattern) 
          throws BuildException {
          try {
              RegexpMatcher rm = (RegexpMatcher) regexpMatcherClass.newInstance();
              rm.setPattern(pattern);
              return rm;
          } catch (Throwable t) {
              throw new BuildException(t);
          }
          
      }
  }
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/util/regexp/JakartaRegexpMatcher.java
  
  Index: JakartaRegexpMatcher.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 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 acknowlegement:  
   *       "This product includes software developed by the 
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", 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 apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 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.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.tools.ant.util.regexp;
  
  import org.apache.regexp.*;
  
  import org.apache.tools.ant.BuildException;
  import java.util.Vector;
  
  /**
   * Implementation of RegexpMatcher for Jakarta-Regexp.
   *
   * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
   */
  public class JakartaRegexpMatcher implements RegexpMatcher {
  
      protected RE reg = null;
      private String pattern;
  
      /**
       * Set the regexp pattern from the String description.
       */
      public void setPattern(String pattern) throws BuildException {
          try {
              this.pattern = pattern;
              reg = new RE(pattern);
          } catch (RESyntaxException e) {
              throw new BuildException(e);
          }
      }
  
      /**
       * Get a String representation of the regexp pattern
       */
      public String getPattern() {
          return pattern;
      }
  
      /**
       * Does the given argument match the pattern?
       */
      public boolean matches(String argument) {
          return reg.match(argument);
      }
  
      /**
       * Returns a Vector of matched groups found in the argument.
       *
       * <p>Group 0 will be the full match, the rest are the
       * parenthesized subexpressions</p>.
       */
      public Vector getGroups(String argument) {
          if (!matches(argument)) {
              return null;
          }
          Vector v = new Vector();
          for (int i=0; i<reg.getParenCount(); i++) {
              v.addElement(reg.getParen(i));
          }
          return v;
      }
  
  }
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/util/regexp/RegexpMatcher.java
  
  Index: RegexpMatcher.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 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 acknowlegement:  
   *       "This product includes software developed by the 
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", 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 apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 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.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.tools.ant.util.regexp;
  
  import org.apache.tools.ant.BuildException;
  import java.util.Vector;
  
  /**
   * Interface describing a regular expression matcher.
   *
   * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
   */
  public interface RegexpMatcher {
  
      /**
       * Set the regexp pattern from the String description.
       */
      public void setPattern(String pattern) throws BuildException;
  
      /**
       * Get a String representation of the regexp pattern
       */
      public String getPattern();
  
      /**
       * Does the given argument match the pattern?
       */
      public boolean matches(String argument);
  
      /**
       * Returns a Vector of matched groups found in the argument.
       *
       * <p>Group 0 will be the full match, the rest are the
       * parenthesized subexpressions</p>.
       */
      public Vector getGroups(String argument);
  }
  
  
  
  1.1                  jakarta-ant/src/testcases/org/apache/tools/ant/util/regexp/JakartaRegexpMatcherTest.java
  
  Index: JakartaRegexpMatcherTest.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 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 acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", 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 apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 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.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.tools.ant.util.regexp;
  
  /**
   * Tests for the jakarta-regexp implementation of the RegexpMatcher interface.
   *
   * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
   */
  public class JakartaRegexpMatcherTest extends RegexpMatcherTest {
  
      public RegexpMatcher getImplementation() {
          return new JakartaRegexpMatcher();
      }
  
      public JakartaRegexpMatcherTest(String name) {
          super(name);
      }
  
  }
  
  
  
  1.1                  jakarta-ant/src/testcases/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java
  
  Index: RegexpMatcherTest.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 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 acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", 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 apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 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.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.tools.ant.util.regexp;
  
  import java.util.Vector;
  
  import junit.framework.Test;
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  
  /**
   * Tests for all implementations of the RegexpMatcher interface.
   *
   * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> 
   */
  public abstract class RegexpMatcherTest extends TestCase {
  
      public abstract RegexpMatcher getImplementation();
  
      public RegexpMatcherTest(String name) {
          super(name);
      }
  
      public void testMatches() {
          RegexpMatcher reg = getImplementation();
          reg.setPattern("aaaa");
          assert("aaaa should match itself", reg.matches("aaaa"));
          assert("aaaa should match xaaaa", reg.matches("xaaaa"));
          assert("aaaa shouldn\'t match xaaa", !reg.matches("xaaa"));
          reg.setPattern("^aaaa");
          assert("^aaaa shouldn\'t match xaaaa", !reg.matches("xaaaa"));
          assert("^aaaa should match aaaax", reg.matches("aaaax"));
          reg.setPattern("aaaa$");
          assert("aaaa$ shouldn\'t match aaaax", !reg.matches("aaaax"));
          assert("aaaa$ should match xaaaa", reg.matches("xaaaa"));
          reg.setPattern("[0-9]+");
          assert("[0-9]+ should match 123", reg.matches("123"));
          assert("[0-9]+ should match 1", reg.matches("1"));
          assert("[0-9]+ shouldn\'t match \'\'", !reg.matches(""));
          assert("[0-9]+ shouldn\'t match a", !reg.matches("a"));
          reg.setPattern("[0-9]*");
          assert("[0-9]* should match 123", reg.matches("123"));
          assert("[0-9]* should match 1", reg.matches("1"));
          assert("[0-9]* should match \'\'", reg.matches(""));
          assert("[0-9]* should match a", reg.matches("a"));
          reg.setPattern("([0-9]+)=\\1");
          assert("([0-9]+)=\\1 should match 1=1", reg.matches("1=1"));
          assert("([0-9]+)=\\1 shouldn\'t match 1=2", !reg.matches("1=2"));
      }
  
      public void testGroups() {
          RegexpMatcher reg = getImplementation();
          reg.setPattern("aaaa");
          Vector v = reg.getGroups("xaaaa");
          assertEquals("No parens -> no extra groups", 1, v.size());
          assertEquals("Trivial match with no parens", "aaaa", 
                       (String) v.elementAt(0));
  
          reg.setPattern("(aaaa)");
          v = reg.getGroups("xaaaa");
          assertEquals("Trivial match with single paren", 2, v.size());
          assertEquals("Trivial match with single paren, full match", "aaaa", 
                       (String) v.elementAt(0));
          assertEquals("Trivial match with single paren, matched paren", "aaaa", 
                       (String) v.elementAt(0));
  
          reg.setPattern("(a+)b(b+)");
          v = reg.getGroups("xaabb");
          assertEquals(3, v.size());
          assertEquals("aabb", (String) v.elementAt(0));
          assertEquals("aa", (String) v.elementAt(1));
          assertEquals("b", (String) v.elementAt(2));
      }
  }
  
  
  

Mime
View raw message