Browse Source

Add testcases for the substitution methods (and make them work 8-)

Add testcase for <replaceregexp>, this task now works with ORO,
Jakarta Regexp and JDK 1.4 if you use \1 to refer to parens in the
regular expression.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269822 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 23 years ago
parent
commit
be53ecfdc2
17 changed files with 814 additions and 32 deletions
  1. +6
    -0
      WHATSNEW
  2. +18
    -10
      build.xml
  3. +5
    -1
      src/etc/testcases/taskdefs/optional/replaceregexp.xml
  4. +27
    -4
      src/main/org/apache/tools/ant/util/regexp/JakartaOroRegexp.java
  5. +26
    -1
      src/main/org/apache/tools/ant/util/regexp/JakartaRegexpRegexp.java
  6. +27
    -2
      src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexp.java
  7. +160
    -0
      src/main/org/apache/tools/ant/util/regexp/MatcherWrappedAsRegexp.java
  8. +11
    -0
      src/main/org/apache/tools/ant/util/regexp/Regexp.java
  9. +13
    -4
      src/main/org/apache/tools/ant/util/regexp/RegexpFactory.java
  10. +0
    -10
      src/main/org/apache/tools/ant/util/regexp/RegexpMatcher.java
  11. +114
    -0
      src/testcases/org/apache/tools/ant/taskdefs/optional/ReplaceRegExpTest.java
  12. +72
    -0
      src/testcases/org/apache/tools/ant/util/regexp/JakartaOroRegexpTest.java
  13. +76
    -0
      src/testcases/org/apache/tools/ant/util/regexp/JakartaRegexpRegexpTest.java
  14. +72
    -0
      src/testcases/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexpTest.java
  15. +85
    -0
      src/testcases/org/apache/tools/ant/util/regexp/MatcherWrappedAsRegexpTest.java
  16. +2
    -0
      src/testcases/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java
  17. +100
    -0
      src/testcases/org/apache/tools/ant/util/regexp/RegexpTest.java

+ 6
- 0
WHATSNEW View File

@@ -4,6 +4,12 @@ Changes from Ant 1.4.1 to current CVS version
Changes that could break older environments:
--------------------------------------------

* the RegexpMatcher interface has been extended to support case
insensitive matches and other options - custom implementations of
this interface won't work any longer. We recommend to use the new
Regexp interface that also supports substitution instead of the
RegexpMatcher interface in the future.

Fixed bugs:
-----------



+ 18
- 10
build.xml View File

@@ -36,6 +36,7 @@
<property name="ant.package" value="org/apache/tools/ant"/>
<property name="optional.package" value="${ant.package}/taskdefs/optional"/>
<property name="regexp.package" value="${ant.package}/util/regexp"/>

<property name="manifest" value="src/etc/manifest"/>

@@ -218,11 +219,11 @@
deprecation="${deprecation}"
optimize="${optimize}" >
<classpath refid="classpath" />
<exclude name="${ant.package}/util/regexp/JakartaRegexp*.java"
<exclude name="${regexp.package}/JakartaRegexp*.java"
unless="jakarta.regexp.present" />
<exclude name="${ant.package}/util/regexp/JakartaOro*.java"
<exclude name="${regexp.package}/JakartaOro*.java"
unless="jakarta.oro.present" />
<exclude name="${ant.package}/util/regexp/Jdk14Regexp*.java"
<exclude name="${regexp.package}/Jdk14Regexp*.java"
unless="jdk1.4+" />
<exclude name="${ant.package}/AntSecurityManager.java"
unless="jdk1.2+" />
@@ -650,11 +651,11 @@

<exclude name="org/apache/tools/ant/taskdefs/optional/ANTLRTest.java"
unless="antlr.present" />
<exclude name="org/apache/tools/ant/util/regexp/JakartaRegexp*Test.java"
<exclude name="${regexp.package}/JakartaRegexp*Test.java"
unless="jakarta.regexp.present" />
<exclude name="org/apache/tools/ant/util/regexp/JakartaOro*Test.java"
<exclude name="${regexp.package}/JakartaOro*Test.java"
unless="jakarta.oro.present" />
<exclude name="org/apache/tools/ant/util/regexp/Jdk14Regexp*Test.java"
<exclude name="${regexp.package}/Jdk14Regexp*Test.java"
unless="jdk1.4+" />
<exclude name="org/apache/tools/ant/taskdefs/optional/sitraka/*.java"
unless="jakarta.oro.present" />
@@ -705,7 +706,8 @@
<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" />
<exclude name="${regexp.package}/RegexpMatcherTest.java" />
<exclude name="${regexp.package}/RegexpTest.java" />

<!-- helper classes, not testcases -->
<exclude name="org/apache/tools/ant/taskdefs/TaskdefTest*Task.java" />
@@ -720,14 +722,20 @@
<!-- only run these tests if their required libraries are installed -->
<exclude name="org/apache/tools/ant/taskdefs/optional/ANTLRTest.java"
unless="antlr.present" />
<exclude name="org/apache/tools/ant/util/regexp/JakartaRegexp*Test.java"
<exclude name="${regexp.package}/JakartaRegexp*Test.java"
unless="jakarta.regexp.present" />
<exclude name="org/apache/tools/ant/util/regexp/JakartaOro*Test.java"
<exclude name="${regexp.package}/JakartaOro*Test.java"
unless="jakarta.oro.present" />
<exclude name="org/apache/tools/ant/util/regexp/Jdk14Regexp*Test.java"
<exclude name="${regexp.package}/Jdk14Regexp*Test.java"
unless="jdk1.4+" />
<exclude name="${optional.package}/ide/VAJExportTest.java" unless="vaj.present" />
<exclude name="${optional.package}/sitraka/*.java" unless="jakarta.oro.present" />
<exclude name="${optional.package}/ReplaceRegExpTest.java"
unless="some.regexp.support" />

<!-- defer for now -->
<exclude name="${regexp.package}/MatcherWrappedAsRegexpTest.java"
unless="invalid-some.regexp.support" />
<!-- run when you have the environment setup to support them -->
<exclude name="org/apache/tools/ant/taskdefs/optional/net/FtpTest.java" />


+ 5
- 1
src/etc/testcases/taskdefs/optional/replaceregexp.xml View File

@@ -1,10 +1,14 @@
<project name="test" default="def" basedir=".">

<target name="def">
<fail>This build file should only be run from within the testcase</fail>
</target>

<target name="setup">
<copy file="replaceregexp.properties" tofile="test.properties" />
</target>

<target name="def" depends="setup">
<target name="testReplace" depends="setup">
<replaceregexp file="test.properties" byline="true">
<regularexpression pattern="Old(.*)=(.*)" />
<substitution expression="NewProp=\1\2" />


+ 27
- 4
src/main/org/apache/tools/ant/util/regexp/JakartaOroRegexp.java View File

@@ -75,15 +75,38 @@ public class JakartaOroRegexp extends JakartaOroMatcher implements Regexp
public String substitute(String input, String argument, int options)
throws BuildException
{
// Determine replacement Type
int sOptions = getSubsOptions(options);
// translate \1 to $1 so that the Perl5Substitution will work
StringBuffer subst = new StringBuffer();
for (int i=0; i<argument.length(); i++) {
char c = argument.charAt(i);
if (c == '\\') {
if (++i < argument.length()) {
c = argument.charAt(i);
int value = Character.digit(c, 10);
if (value > -1) {
subst.append("$").append(value);
} else {
subst.append(c);
}
} else {
// XXX - should throw an exception instead?
subst.append('\\');
}
} else {
subst.append(c);
}
}

// Do the substitution
Substitution s = new Perl5Substitution(argument, sOptions);
Substitution s =
new Perl5Substitution(subst.toString(),
Perl5Substitution.INTERPOLATE_ALL);
return Util.substitute(matcher,
getCompiledPattern(options),
s,
input);
input,
getSubsOptions(options));
}

protected int getSubsOptions(int options)


+ 26
- 1
src/main/org/apache/tools/ant/util/regexp/JakartaRegexpRegexp.java View File

@@ -81,8 +81,33 @@ public class JakartaRegexpRegexp extends JakartaRegexpMatcher implements Regexp
public String substitute(String input, String argument, int options)
throws BuildException
{
int sOptions = getSubsOptions(options);
Vector v = getGroups(input, options);

// replace \1 with the corresponding group
StringBuffer result = new StringBuffer();
for (int i=0; i<argument.length(); i++) {
char c = argument.charAt(i);
if (c == '\\') {
if (++i < argument.length()) {
c = argument.charAt(i);
int value = Character.digit(c, 10);
if (value > -1) {
result.append((String) v.elementAt(value));
} else {
result.append(c);
}
} else {
// XXX - should throw an exception instead?
result.append('\\');
}
} else {
result.append(c);
}
}
argument = result.toString();

RE reg = getCompiledPattern(options);
int sOptions = getSubsOptions(options);
return reg.subst(input, argument, sOptions);
}
}

+ 27
- 2
src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexp.java View File

@@ -83,6 +83,29 @@ public class Jdk14RegexpRegexp extends Jdk14RegexpMatcher implements Regexp
public String substitute(String input, String argument, int options)
throws BuildException
{
// translate \1 to $(1) so that the Matcher will work
StringBuffer subst = new StringBuffer();
for (int i=0; i<argument.length(); i++) {
char c = argument.charAt(i);
if (c == '\\') {
if (++i < argument.length()) {
c = argument.charAt(i);
int value = Character.digit(c, 10);
if (value > -1) {
subst.append("$(").append(value).append(")");
} else {
subst.append(c);
}
} else {
// XXX - should throw an exception instead?
subst.append('\\');
}
} else {
subst.append(c);
}
}
argument = subst.toString();
int sOptions = getSubsOptions(options);
Pattern p = getCompiledPattern(options);
StringBuffer sb = new StringBuffer();
@@ -95,10 +118,12 @@ public class Jdk14RegexpRegexp extends Jdk14RegexpMatcher implements Regexp
else
{
boolean res = m.find();
if (res)
if (res) {
m.appendReplacement(sb, argument);
else
m.appendTail(sb);
} else {
sb.append(input);
}
}

return sb.toString();


+ 160
- 0
src/main/org/apache/tools/ant/util/regexp/MatcherWrappedAsRegexp.java View File

@@ -0,0 +1,160 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following 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;

/**
* Helper class that adapts a RegexpMatcher to a Regexp.
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @version $Revision$
*/
public class MatcherWrappedAsRegexp implements Regexp {
private RegexpMatcher matcher;

public MatcherWrappedAsRegexp(RegexpMatcher matcher) {
this.matcher = matcher;
}

/**
* Set the regexp pattern from the String description.
*/
public void setPattern(String pattern) throws BuildException {
matcher.setPattern(pattern);
}

/**
* Get a String representation of the regexp pattern
*/
public String getPattern() throws BuildException {
return matcher.getPattern();
}

/**
* Does the given argument match the pattern?
*/
public boolean matches(String argument) throws BuildException {
return matcher.matches(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) throws BuildException {
return matcher.getGroups(argument);
}

/**
* Does this regular expression match the input, given
* certain options
* @param input The string to check for a match
* @param options The list of options for the match. See the
* MATCH_ constants above.
*/
public boolean matches(String input, int options) throws BuildException {
return matcher.matches(input, options);
}

/**
* Get the match groups from this regular expression. The return
* type of the elements is always String.
* @param input The string to check for a match
* @param options The list of options for the match. See the
* MATCH_ constants above.
*/
public Vector getGroups(String input, int options) throws BuildException {
return matcher.getGroups(input, options);
}

/**
* Perform a substitution on the regular expression.
* @param input The string to substitute on
* @param argument The string which defines the substitution
* @param options The list of options for the match and replace. See the
* MATCH_ and REPLACE_ constants above.
* REPLACE_ constants will be ignored.
*/
public String substitute(String input, String argument, int options)
throws BuildException {
Vector v = matcher.getGroups(input, options);
StringBuffer result = new StringBuffer();
char[] to = argument.toCharArray();
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();
}
}

+ 11
- 0
src/main/org/apache/tools/ant/util/regexp/Regexp.java View File

@@ -63,6 +63,17 @@ import org.apache.tools.ant.BuildException;
*/
public interface Regexp extends RegexpMatcher
{

/**
* Replace only the first occurance of the regular expression
*/
int REPLACE_FIRST = 0x00000001;

/**
* Replace all occurances of the regular expression
*/
int REPLACE_ALL = 0x00000010;

/**
* Perform a substitution on the regular expression.
* @param input The string to substitute on


+ 13
- 4
src/main/org/apache/tools/ant/util/regexp/RegexpFactory.java View File

@@ -90,24 +90,33 @@ public class RegexpFactory extends RegexpMatcherFactory
}
if (systemDefault != null) {
return (Regexp)createInstance(systemDefault);
return createRegexpInstance(systemDefault);
// XXX should we silently catch possible exceptions and try to
// load a different implementation?
}

try {
return (Regexp)createInstance("org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp");
return createRegexpInstance("org.apache.tools.ant.util.regexp.Jdk14RegexpRegexp");
} catch (BuildException be) {}
try {
return (Regexp)createInstance("org.apache.tools.ant.util.regexp.JakartaOroRegexp");
return createRegexpInstance("org.apache.tools.ant.util.regexp.JakartaOroRegexp");
} catch (BuildException be) {}
try {
return (Regexp)createInstance("org.apache.tools.ant.util.regexp.JakartaRegexpRegexp");
return createRegexpInstance("org.apache.tools.ant.util.regexp.JakartaRegexpRegexp");
} catch (BuildException be) {}

throw new BuildException("No supported regular expression matcher found");
}

protected Regexp createRegexpInstance(String classname) {
RegexpMatcher m = createInstance(classname);
if (m instanceof Regexp) {
return (Regexp) m;
} else {
return new MatcherWrappedAsRegexp(m);
}
}

}

+ 0
- 10
src/main/org/apache/tools/ant/util/regexp/RegexpMatcher.java View File

@@ -65,16 +65,6 @@ import java.util.Vector;
*/
public interface RegexpMatcher {

/***
* Replace only the first occurance of the regular expression
*/
int REPLACE_FIRST = 0x00000001;

/***
* Replace all occurances of the regular expression
*/
int REPLACE_ALL = 0x00000010;

/***
* Default Mask (case insensitive, neither multiline nor
* singleline specified).


+ 114
- 0
src/testcases/org/apache/tools/ant/taskdefs/optional/ReplaceRegExpTest.java View File

@@ -0,0 +1,114 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following 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.taskdefs.optional;

import org.apache.tools.ant.taskdefs.TaskdefsTest;

import java.util.Properties;
import java.io.FileInputStream;
import java.io.IOException;

/**
* JUnit Testcase for the optional replaceregexp task.
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @version $Revision$
*/
public class ReplaceRegExpTest extends TaskdefsTest {

public ReplaceRegExpTest(String name) {
super(name);
}
public void setUp() {
configureProject("src/etc/testcases/taskdefs/optional/replaceregexp.xml");
}
public void tearDown() {
executeTarget("cleanup");
}
public void testReplace() throws IOException {
Properties original = new Properties();
FileInputStream propsFile = null;
try {
propsFile = new FileInputStream("src/etc/testcases/taskdefs/optional/replaceregexp.properties");
original.load(propsFile);
} finally {
if (propsFile != null) {
propsFile.close();
propsFile = null;
}
}

assertEquals("Def", original.get("OldAbc"));

executeTarget("testReplace");

Properties after = new Properties();
try {
propsFile = new FileInputStream("src/etc/testcases/taskdefs/optional/test.properties");
after.load(propsFile);
} finally {
if (propsFile != null) {
propsFile.close();
propsFile = null;
}
}

assertNull(after.get("OldAbc"));
assertEquals("AbcDef", after.get("NewProp"));
}

}// ReplaceRegExpTest

+ 72
- 0
src/testcases/org/apache/tools/ant/util/regexp/JakartaOroRegexpTest.java View File

@@ -0,0 +1,72 @@
/*
* 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;

/**
* Tests for the jakarta-oro implementation of the Regexp interface.
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*/
public class JakartaOroRegexpTest extends RegexpTest {

public Regexp getRegexpImplementation() {
return new JakartaOroRegexp();
}

public JakartaOroRegexpTest(String name) {
super(name);
}

}

+ 76
- 0
src/testcases/org/apache/tools/ant/util/regexp/JakartaRegexpRegexpTest.java View File

@@ -0,0 +1,76 @@
/*
* 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;

/**
* Tests for the jakarta-regexp implementation of the Regexp interface.
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*/
public class JakartaRegexpRegexpTest extends RegexpTest {

public Regexp getRegexpImplementation() {
return new JakartaRegexpRegexp();
}

public JakartaRegexpRegexpTest(String name) {
super(name);
}

/**
* Fails for "default" mode.
*/
protected void doEndTest2(String text) {}
}

+ 72
- 0
src/testcases/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexpTest.java View File

@@ -0,0 +1,72 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following 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;

/**
* Tests for the JDK 1.4 implementation of the Regexp interface.
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*/
public class Jdk14RegexpRegexpTest extends RegexpTest {

public Regexp getRegexpImplementation() {
return new Jdk14RegexpRegexp();
}

public Jdk14RegexpRegexpTest(String name) {
super(name);
}

}

+ 85
- 0
src/testcases/org/apache/tools/ant/util/regexp/MatcherWrappedAsRegexpTest.java View File

@@ -0,0 +1,85 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following 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;

/**
* Test for the wrapped implementation of the Regexp Interface.
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*/
public class MatcherWrappedAsRegexpTest extends RegexpTest {

public MatcherWrappedAsRegexpTest(String name) {
super(name);
}

public Regexp getRegexpImplementation() {
RegexpMatcherFactory fac = new RegexpMatcherFactory();
return new MatcherWrappedAsRegexp(fac.newRegexpMatcher());
}

/**
* Jakarta Regexp fails for "default" mode.
*/
protected void doEndTest2(String text) {
RegexpMatcherFactory fac = new RegexpMatcherFactory();
RegexpMatcher m = fac.newRegexpMatcher();
if (m.getClass().getName().equals("org.apache.tools.ant.util.regexp.JakartaRegexpMatcher")) {
// ignore
} else {
super.doEndTest2(text);
}
}
}

+ 2
- 0
src/testcases/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java View File

@@ -72,6 +72,8 @@ public abstract class RegexpMatcherTest extends TestCase {

public abstract RegexpMatcher getImplementation();

protected final RegexpMatcher getReg() {return reg;}

public RegexpMatcherTest(String name) {
super(name);
}


+ 100
- 0
src/testcases/org/apache/tools/ant/util/regexp/RegexpTest.java View File

@@ -0,0 +1,100 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following 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;

/**
* Tests for all implementations of the Regexp interface.
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*/
public abstract class RegexpTest extends RegexpMatcherTest {

private static final String test = "abcdefg-abcdefg";
private static final String pattern = "ab([^d]*)d([^f]*)f";

public RegexpTest(String name) {
super(name);
}

public final RegexpMatcher getImplementation() {
return getRegexpImplementation();
}

public abstract Regexp getRegexpImplementation();

public void testSubstitution() {
Regexp reg = (Regexp) getReg();
reg.setPattern(pattern);
assertTrue(reg.matches(test));
assertEquals("abedcfg-abcdefg", reg.substitute(test, "ab\\2d\\1f",
Regexp.MATCH_DEFAULT));
}

public void testReplaceFirstSubstitution() {
Regexp reg = (Regexp) getReg();
reg.setPattern(pattern);
assertTrue(reg.matches(test));
assertEquals("abedcfg-abcdefg", reg.substitute(test, "ab\\2d\\1f",
Regexp.REPLACE_FIRST));
}

public void testReplaceAllSubstitution() {
Regexp reg = (Regexp) getReg();
reg.setPattern(pattern);
assertTrue(reg.matches(test));
assertEquals("abedcfg-abedcfg", reg.substitute(test, "ab\\2d\\1f",
Regexp.REPLACE_ALL));
}
}

Loading…
Cancel
Save