aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java204
1 files changed, 204 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java
new file mode 100644
index 00000000..09508274
--- /dev/null
+++ b/framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java
@@ -0,0 +1,204 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.util.regexp;
+
+import java.io.IOException;
+import java.util.Vector;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for all implementations of the RegexpMatcher interface.
+ *
+ */
+public abstract class RegexpMatcherTest extends TestCase {
+
+ public final static String UNIX_LINE = "\n";
+
+ private RegexpMatcher reg;
+
+ public abstract RegexpMatcher getImplementation();
+
+ protected final RegexpMatcher getReg() {return reg;}
+
+ public RegexpMatcherTest(String name) {
+ super(name);
+ }
+
+ public void setUp() {
+ reg = getImplementation();
+ }
+
+ public void testMatches() {
+ reg.setPattern("aaaa");
+ assertTrue("aaaa should match itself", reg.matches("aaaa"));
+ assertTrue("aaaa should match xaaaa", reg.matches("xaaaa"));
+ assertTrue("aaaa shouldn\'t match xaaa", !reg.matches("xaaa"));
+ reg.setPattern("^aaaa");
+ assertTrue("^aaaa shouldn\'t match xaaaa", !reg.matches("xaaaa"));
+ assertTrue("^aaaa should match aaaax", reg.matches("aaaax"));
+ reg.setPattern("aaaa$");
+ assertTrue("aaaa$ shouldn\'t match aaaax", !reg.matches("aaaax"));
+ assertTrue("aaaa$ should match xaaaa", reg.matches("xaaaa"));
+ reg.setPattern("[0-9]+");
+ assertTrue("[0-9]+ should match 123", reg.matches("123"));
+ assertTrue("[0-9]+ should match 1", reg.matches("1"));
+ assertTrue("[0-9]+ shouldn\'t match \'\'", !reg.matches(""));
+ assertTrue("[0-9]+ shouldn\'t match a", !reg.matches("a"));
+ reg.setPattern("[0-9]*");
+ assertTrue("[0-9]* should match 123", reg.matches("123"));
+ assertTrue("[0-9]* should match 1", reg.matches("1"));
+ assertTrue("[0-9]* should match \'\'", reg.matches(""));
+ assertTrue("[0-9]* should match a", reg.matches("a"));
+ reg.setPattern("([0-9]+)=\\1");
+ assertTrue("([0-9]+)=\\1 should match 1=1", reg.matches("1=1"));
+ assertTrue("([0-9]+)=\\1 shouldn\'t match 1=2", !reg.matches("1=2"));
+ }
+
+ public void testGroups() {
+ 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));
+ }
+
+ public void testBugzillaReport14619() {
+ reg.setPattern("^(.*)/src/((.*/)*)([a-zA-Z0-9_\\.]+)\\.java$");
+ Vector v = reg.getGroups("de/tom/src/Google.java");
+ assertEquals(5, v.size());
+ assertEquals("de/tom", v.elementAt(1));
+ assertEquals("", v.elementAt(2));
+ assertEquals("", v.elementAt(3));
+ assertEquals("Google", v.elementAt(4));
+ }
+
+ public void testCaseInsensitiveMatch() {
+ reg.setPattern("aaaa");
+ assertTrue("aaaa doesn't match AAaa", !reg.matches("AAaa"));
+ assertTrue("aaaa matches AAaa ignoring case",
+ reg.matches("AAaa", RegexpMatcher.MATCH_CASE_INSENSITIVE));
+ }
+
+
+// make sure there are no issues concerning line separator interpretation
+// a line separator for regex (perl) is always a unix line (ie \n)
+
+ public void testParagraphCharacter() throws IOException {
+ reg.setPattern("end of text$");
+ assertTrue("paragraph character", !reg.matches("end of text\u2029"));
+ }
+
+ public void testLineSeparatorCharacter() throws IOException {
+ reg.setPattern("end of text$");
+ assertTrue("line-separator character", !reg.matches("end of text\u2028"));
+ }
+
+ public void testNextLineCharacter() throws IOException {
+ reg.setPattern("end of text$");
+ assertTrue("next-line character", !reg.matches("end of text\u0085"));
+ }
+
+ public void testStandaloneCR() throws IOException {
+ reg.setPattern("end of text$");
+ assertTrue("standalone CR", !reg.matches("end of text\r"));
+ }
+
+ public void testWindowsLineSeparator() throws IOException {
+ reg.setPattern("end of text$");
+ assertTrue("Windows line separator", !reg.matches("end of text\r\n"));
+ }
+
+ public void testWindowsLineSeparator2() throws IOException {
+ reg.setPattern("end of text\r$");
+ assertTrue("Windows line separator", reg.matches("end of text\r\n"));
+ }
+
+ public void testUnixLineSeparator() throws IOException {
+ reg.setPattern("end of text$");
+ assertTrue("Unix line separator", reg.matches("end of text\n"));
+ }
+
+
+ public void testMultiVersusSingleLine() throws IOException {
+ StringBuffer buf = new StringBuffer();
+ buf.append("Line1").append(UNIX_LINE);
+ buf.append("starttest Line2").append(UNIX_LINE);
+ buf.append("Line3 endtest").append(UNIX_LINE);
+ buf.append("Line4").append(UNIX_LINE);
+ String text = buf.toString();
+
+ doStartTest1(text);
+ doStartTest2(text);
+ doEndTest1(text);
+ doEndTest2(text);
+ }
+
+ protected void doStartTest1(String text) {
+ reg.setPattern("^starttest");
+ assertTrue("^starttest in default mode", !reg.matches(text));
+ assertTrue("^starttest in single line mode",
+ !reg.matches(text, RegexpMatcher.MATCH_SINGLELINE));
+ assertTrue("^starttest in multi line mode",
+ reg.matches(text, RegexpMatcher.MATCH_MULTILINE));
+ }
+
+ protected void doStartTest2(String text) {
+ reg.setPattern("^Line1");
+ assertTrue("^Line1 in default mode", reg.matches(text));
+ assertTrue("^Line1 in single line mode",
+ reg.matches(text, RegexpMatcher.MATCH_SINGLELINE));
+ assertTrue("^Line1 in multi line mode",
+ reg.matches(text, RegexpMatcher.MATCH_MULTILINE));
+ }
+
+ protected void doEndTest1(String text) {
+ reg.setPattern("endtest$");
+ assertTrue("endtest$ in default mode", !reg.matches(text));
+ assertTrue("endtest$ in single line mode",
+ !reg.matches(text, RegexpMatcher.MATCH_SINGLELINE));
+ assertTrue("endtest$ in multi line mode",
+ reg.matches(text, RegexpMatcher.MATCH_MULTILINE));
+ }
+
+ protected void doEndTest2(String text) {
+ reg.setPattern("Line4$");
+ assertTrue("Line4$ in default mode", reg.matches(text));
+ assertTrue("Line4$ in single line mode",
+ reg.matches(text, RegexpMatcher.MATCH_SINGLELINE));
+ assertTrue("Line4$ in multi line mode",
+ reg.matches(text, RegexpMatcher.MATCH_MULTILINE));
+ }
+
+}