Checks these MatchPatterns against a specified string.
* diff --git a/src/main/java/org/codehaus/plexus/util/SelectorUtils.java b/src/main/java/org/codehaus/plexus/util/SelectorUtils.java index 234a92c5..e84e677a 100644 --- a/src/main/java/org/codehaus/plexus/util/SelectorUtils.java +++ b/src/main/java/org/codehaus/plexus/util/SelectorUtils.java @@ -149,9 +149,9 @@ public static boolean matchPatternStart( String pattern, String str, boolean isC } } - static boolean isAntPrefixedPattern( String pattern ) + public static boolean isAntPrefixedPattern( String pattern ) { - return pattern.length() > ( ANT_HANDLER_PREFIX.length() + PATTERN_HANDLER_SUFFIX.length() + 1 ) + return pattern.length() > ( ANT_HANDLER_PREFIX.length() + PATTERN_HANDLER_SUFFIX.length()) && pattern.startsWith( ANT_HANDLER_PREFIX ) && pattern.endsWith( PATTERN_HANDLER_SUFFIX ); } @@ -281,9 +281,9 @@ private static String toOSRelatedPath( String pattern, String separator ) return pattern; } - static boolean isRegexPrefixedPattern( String pattern ) + public static boolean isRegexPrefixedPattern( String pattern ) { - return pattern.length() > ( REGEX_HANDLER_PREFIX.length() + PATTERN_HANDLER_SUFFIX.length() + 1 ) + return pattern.length() > ( REGEX_HANDLER_PREFIX.length() + PATTERN_HANDLER_SUFFIX.length()) && pattern.startsWith( REGEX_HANDLER_PREFIX ) && pattern.endsWith( PATTERN_HANDLER_SUFFIX ); } @@ -834,4 +834,23 @@ public static String removeWhitespace( String input ) } return result.toString(); } + + /** + * Extract the pattern without the Regex or Ant prefix. In the case of Ant style matches ensure + * that the path uses specified separator. + * @param pattern the pattern to extract from. + * @param separator the system file name separator in the pattern. + * @return The pattern without the Regex or Ant prefix. + */ + public static String extractPattern(final String pattern, final String separator) { + if (isRegexPrefixedPattern(pattern)) { + return pattern.substring( + REGEX_HANDLER_PREFIX.length(), pattern.length() - PATTERN_HANDLER_SUFFIX.length()); + } else { + String localPattern = isAntPrefixedPattern(pattern) + ? pattern.substring(ANT_HANDLER_PREFIX.length(), pattern.length() - PATTERN_HANDLER_SUFFIX.length()) + : pattern; + return toOSRelatedPath(localPattern, separator); + } + } } diff --git a/src/test/java/org/codehaus/plexus/util/MatchPatternTest.java b/src/test/java/org/codehaus/plexus/util/MatchPatternTest.java index bd523457..e61e9b30 100644 --- a/src/test/java/org/codehaus/plexus/util/MatchPatternTest.java +++ b/src/test/java/org/codehaus/plexus/util/MatchPatternTest.java @@ -16,6 +16,8 @@ * limitations under the License. */ +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -30,6 +32,20 @@ */ public class MatchPatternTest { + /** + *testGetSource
+ */ + @Test + public void testGetSource() + { + MatchPattern mp = MatchPattern.fromString( "ABC*" ); + assertEquals("ABC*", mp.getSource()); + mp = MatchPattern.fromString( "%ant[some/ABC*]" ); + assertEquals("some/ABC*", mp.getSource()); + mp = MatchPattern.fromString( "%regex[[ABC].*]" ); + assertEquals("[ABC].*", mp.getSource()); + } + /** *testMatchPath.
* @@ -63,4 +79,20 @@ public void testMatchPatternStart() assertFalse( mp.matchPatternStart( "XXXX", false ) ); } + /** + *testTokenizePathToString.
+ */ + @Test + public void testTokenizePathToString() + { + String[] expected = {"hello", "world"}; + String[] actual = MatchPattern.tokenizePathToString("hello/world", "/"); + assertArrayEquals(expected, actual); + + actual = MatchPattern.tokenizePathToString("/hello/world", "/"); + assertArrayEquals(expected, actual); + + actual = MatchPattern.tokenizePathToString("/hello/world/", "/"); + assertArrayEquals(expected, actual); + } } diff --git a/src/test/java/org/codehaus/plexus/util/MatchPatternsTest.java b/src/test/java/org/codehaus/plexus/util/MatchPatternsTest.java index a10e340e..fc2b3fff 100644 --- a/src/test/java/org/codehaus/plexus/util/MatchPatternsTest.java +++ b/src/test/java/org/codehaus/plexus/util/MatchPatternsTest.java @@ -16,11 +16,15 @@ * limitations under the License. */ +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Test; +import java.util.Arrays; +import java.util.List; + /** *MatchPatternsTest class.
* @@ -30,6 +34,18 @@ */ public class MatchPatternsTest { + /** + *testGetSource
+ */ + @Test + public void testGetSources() + { + ListtestMatches.
* diff --git a/src/test/java/org/codehaus/plexus/util/SelectorUtilsTest.java b/src/test/java/org/codehaus/plexus/util/SelectorUtilsTest.java index 160aa16d..63eb9ec2 100644 --- a/src/test/java/org/codehaus/plexus/util/SelectorUtilsTest.java +++ b/src/test/java/org/codehaus/plexus/util/SelectorUtilsTest.java @@ -16,6 +16,7 @@ * limitations under the License. */ +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -31,6 +32,41 @@ */ public class SelectorUtilsTest { + /** + *testExtractPattern.
+ */ + @Test + public void testExtractPattern() { + assertEquals("[A-Z].*", SelectorUtils.extractPattern("%regex[[A-Z].*]", "/")); + assertEquals("ABC*", SelectorUtils.extractPattern("%ant[ABC*]", "/")); + assertEquals("some/ABC*", SelectorUtils.extractPattern("%ant[some/ABC*]", "/")); + assertEquals("some\\ABC*", SelectorUtils.extractPattern("%ant[some\\ABC*]", "\\")); + assertEquals("some/ABC*", SelectorUtils.extractPattern("%ant[some\\ABC*]", "/")); + assertEquals("some\\ABC*", SelectorUtils.extractPattern("%ant[some/ABC*]", "\\")); + } + + /** + *testIsAntPrefixedPattern.
+ */ + @Test + public void testIsAntPrefixedPattern() { + assertTrue(SelectorUtils.isAntPrefixedPattern("%ant[A]")); // single char not allowed + assertTrue(SelectorUtils.isAntPrefixedPattern("%ant[AB]")); + assertFalse(SelectorUtils.isAntPrefixedPattern("%ant[]")); + assertFalse(SelectorUtils.isAntPrefixedPattern("*")); + } + + /** + *testIsRegexPrefixedPattern.
+ */ + @Test + public void testIsRegexPrefixedPattern() { + assertTrue(SelectorUtils.isRegexPrefixedPattern("%regex[A]")); // single char not allowed + assertTrue(SelectorUtils.isRegexPrefixedPattern("%regex[.*]")); + assertFalse(SelectorUtils.isRegexPrefixedPattern("%regex[]")); + assertFalse(SelectorUtils.isRegexPrefixedPattern("*")); + } + /** *testMatchPath_DefaultFileSeparator.
*/