diff options
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.java | 204 |
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)); + } + +} |