12baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumannpackage android.os;
22baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
32baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumannimport android.test.suitebuilder.annotation.SmallTest;
42baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumannimport junit.framework.TestCase;
52baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumannimport org.junit.runner.RunWith;
62baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumannimport org.junit.Test;
72baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumannimport org.junit.runners.JUnit4;
82baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
92baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann@RunWith(JUnit4.class)
102baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann@SmallTest
112baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumannpublic class PatternMatcherTest extends TestCase{
122baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
132baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    @Test
142baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    public void testAdvancedPatternMatchesAnyToken() {
152baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        PatternMatcher matcher = new PatternMatcher(".", PatternMatcher.PATTERN_ADVANCED_GLOB);
162baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a", matcher);
172baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("b", matcher);
182baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("", matcher);
192baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
202baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
212baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    @Test
222baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    public void testAdvancedPatternMatchesSetToken() {
232baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        PatternMatcher matcher = new PatternMatcher("[a]", PatternMatcher.PATTERN_ADVANCED_GLOB);
242baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a", matcher);
252baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("b", matcher);
262baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
272baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        matcher = new PatternMatcher("[.*+{}\\]\\\\[]", PatternMatcher.PATTERN_ADVANCED_GLOB);
282baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches(".", matcher);
292baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("*", matcher);
302baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("+", matcher);
312baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("{", matcher);
322baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("}", matcher);
332baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("]", matcher);
342baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("\\", matcher);
352baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("[", matcher);
362baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
372baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
382baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    @Test
392baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    public void testAdvancedPatternMatchesSetCharacterClassToken() {
402baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        PatternMatcher matcher = new PatternMatcher("[a-z]", PatternMatcher.PATTERN_ADVANCED_GLOB);
412baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a", matcher);
422baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("b", matcher);
432baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("A", matcher);
442baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("1", matcher);
452baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
462baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        matcher = new PatternMatcher("[a-z][0-9]", PatternMatcher.PATTERN_ADVANCED_GLOB);
472baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a1", matcher);
482baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("1a", matcher);
492baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("aa", matcher);
502baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
512baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        matcher = new PatternMatcher("[z-a]", PatternMatcher.PATTERN_ADVANCED_GLOB);
522baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("a", matcher);
532baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("z", matcher);
542baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("A", matcher);
552baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
562baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        matcher = new PatternMatcher("[^0-9]", PatternMatcher.PATTERN_ADVANCED_GLOB);
572baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a", matcher);
582baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("z", matcher);
592baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("A", matcher);
602baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("9", matcher);
612baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("5", matcher);
622baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("0", matcher);
632baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
642baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("[]a]");
652baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        matcher = new PatternMatcher("[\\[a]", PatternMatcher.PATTERN_ADVANCED_GLOB);
662baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a", matcher);
672baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("[", matcher);
682baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
692baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
702baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    @Test
712baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    public void testAdvancedPatternMatchesEscapedCharacters() {
722baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        PatternMatcher matcher = new PatternMatcher("\\.", PatternMatcher.PATTERN_ADVANCED_GLOB);
732baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches(".", matcher);
742baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("a", matcher);
752baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("1", matcher);
762baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
772baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        matcher = new PatternMatcher("a\\+", PatternMatcher.PATTERN_ADVANCED_GLOB);
782baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a+", matcher);
792baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("a", matcher);
802baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("aaaaa", matcher);
812baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
822baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        matcher = new PatternMatcher("[\\a-\\z]", PatternMatcher.PATTERN_ADVANCED_GLOB);
832baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a", matcher);
842baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("z", matcher);
852baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("A", matcher);
862baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
872baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
882baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    @Test
892baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    public void testAdvancedPatternMatchesLiteralTokens() {
902baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        PatternMatcher matcher = new PatternMatcher("a", PatternMatcher.PATTERN_ADVANCED_GLOB);
912baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("", matcher);
922baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a", matcher);
932baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("z", matcher);
942baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
952baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        matcher = new PatternMatcher("az", PatternMatcher.PATTERN_ADVANCED_GLOB);
962baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("", matcher);
972baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("az", matcher);
982baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("za", matcher);
992baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
1002baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1012baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    @Test
1022baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    public void testAdvancedPatternMatchesSetZeroOrMore() {
1032baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        PatternMatcher matcher = new PatternMatcher("[a-z]*", PatternMatcher.PATTERN_ADVANCED_GLOB);
1042baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1052baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("", matcher);
1062baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a", matcher);
1072baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("abcdefg", matcher);
1082baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("abc1", matcher);
1092baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("1abc", matcher);
1102baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
1112baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1122baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    @Test
1132baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    public void testAdvancedPatternMatchesSetOneOrMore() {
1142baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        PatternMatcher matcher = new PatternMatcher("[a-z]+", PatternMatcher.PATTERN_ADVANCED_GLOB);
1152baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1162baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("", matcher);
1172baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a", matcher);
1182baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("abcdefg", matcher);
1192baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("abc1", matcher);
1202baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("1abc", matcher);
1212baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
1222baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1232baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1242baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    @Test
1252baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    public void testAdvancedPatternMatchesSingleRange() {
1262baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        PatternMatcher matcher = new PatternMatcher("[a-z]{1}",
1272baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann                PatternMatcher.PATTERN_ADVANCED_GLOB);
1282baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1292baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("", matcher);
1302baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a", matcher);
1312baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("z", matcher);
1322baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("1", matcher);
1332baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("aa", matcher);
1342baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
1352baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1362baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    @Test
1372baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    public void testAdvancedPatternMatchesFullRange() {
1382baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        PatternMatcher matcher = new PatternMatcher("[a-z]{1,5}",
1392baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann                PatternMatcher.PATTERN_ADVANCED_GLOB);
1402baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1412baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("", matcher);
1422baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("a", matcher);
1432baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("zazaz", matcher);
1442baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("azazaz", matcher);
1452baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("11111", matcher);
1462baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
1472baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1482baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    @Test
1492baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    public void testAdvancedPatternMatchesPartialRange() {
1502baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        PatternMatcher matcher = new PatternMatcher("[a-z]{3,}",
1512baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann                PatternMatcher.PATTERN_ADVANCED_GLOB);
1522baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1532baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("", matcher);
1542baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("aza", matcher);
1552baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("zazaz", matcher);
1562baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("azazazazazaz", matcher);
1572baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("aa", matcher);
1582baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
1592baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1602baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    @Test
1612baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    public void testAdvancedPatternMatchesComplexPatterns() {
1622baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        PatternMatcher matcher = new PatternMatcher(
1632baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann                "/[0-9]{4}/[0-9]{2}/[0-9]{2}/[a-zA-Z0-9_]+\\.html",
1642baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann                PatternMatcher.PATTERN_ADVANCED_GLOB);
1652baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1662baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("", matcher);
1672baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("/2016/09/07/got_this_working.html", matcher);
1682baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("/2016/09/07/got_this_working2.html", matcher);
1692baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("/2016/09/07/got_this_working2dothtml", matcher);
1702baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("/2016/9/7/got_this_working.html", matcher);
1712baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1722baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        matcher = new PatternMatcher(
1732baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann                "/b*a*bar.*",
1742baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann                PatternMatcher.PATTERN_ADVANCED_GLOB);
1752baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1762baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("/babar", matcher);
1772baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("/babarfff", matcher);
1782baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("/bbaabarfff", matcher);
1792baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("/babar?blah", matcher);
1802baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertMatches("/baaaabar?blah", matcher);
1812baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("?bar", matcher);
1822baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("/bar", matcher);
1832baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("/baz", matcher);
1842baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("/ba/bar", matcher);
1852baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("/barf", matcher);
1862baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("/", matcher);
1872baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertNotMatches("?blah", matcher);
1882baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
1892baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
1902baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    @Test
1912baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    public void testAdvancedPatternPoorFormatThrowsIllegalArgumentException() {
1922baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("[a-z");
1932baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("a{,4}");
1942baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("a{0,a}");
1952baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("a{\\1, 2}");
1962baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("[]");
1972baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("a{}");
1982baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("{3,4}");
1992baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("a+{3,4}");
2002baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("*.");
2012baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern(".+*");
2022baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("a{3,4");
2032baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("[a");
2042baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("abc\\");
2052baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern("+.");
2062baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
2072baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        StringBuilder charSet = new StringBuilder("[");
2082baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        for (int i = 0; i < 1024; i++) {
2092baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann            charSet.append('a' + (i % 26));
2102baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        }
2112baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        charSet.append("]");
2122baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertPoorlyFormattedPattern(charSet.toString());
2132baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
2142baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
2152baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    private void assertMatches(String string, PatternMatcher matcher) {
2162baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertTrue("'" + string + "' should match '" + matcher.toString() + "'",
2172baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann                matcher.match(string));
2182baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
2192baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
2202baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    private void assertNotMatches(String string, PatternMatcher matcher) {
2212baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        assertTrue("'" + string + "' should not match '" + matcher.toString() + "'",
2222baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann                !matcher.match(string));
2232baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
2242baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
2252baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    private void assertPoorlyFormattedPattern(String format) {
2262baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        try {
2272baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann            new PatternMatcher(format, PatternMatcher.PATTERN_ADVANCED_GLOB);
2282baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        } catch (IllegalArgumentException e) {
2292baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann            return;// expected
2302baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        }
2312baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann
2322baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann        fail("'" + format + "' was erroneously created");
2332baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann    }
2342baf095ca9e3827f721271a915d1e04db0718bf9Patrick Baumann}
235