package org.dcache.tests.util; import org.junit.Test; import java.util.regex.PatternSyntaxException; import org.dcache.util.Glob; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.junit.Assert.*; public class GlobTest { @Test public void testNonWildcardMatch() { Glob pattern = new Glob("foobar"); assertTrue(pattern.matches("foobar")); assertFalse(pattern.matches("")); assertFalse(pattern.matches("foobar1")); assertFalse(pattern.matches("foo*bar")); } @Test public void testSingleCharacterWildcard() { Glob pattern = new Glob("foo?bar"); assertTrue(pattern.matches("foo-bar")); assertTrue(pattern.matches("foo?bar")); assertTrue(pattern.matches("foo*bar")); assertFalse(pattern.matches("")); assertFalse(pattern.matches("foo1bar1")); assertFalse(pattern.matches("foobar")); } @Test public void testMultiCharacterWildcard() { Glob pattern = new Glob("foo*bar"); assertTrue(pattern.matches("foo-bar")); assertTrue(pattern.matches("foo?bar")); assertTrue(pattern.matches("foo*bar")); assertTrue(pattern.matches("foofoobar")); assertTrue(pattern.matches("foobar")); assertFalse(pattern.matches("")); assertFalse(pattern.matches("foo1bar1")); } @Test public void testMultiWildcard1() { Glob pattern = new Glob("foo**bar"); assertTrue(pattern.matches("foo-bar")); assertTrue(pattern.matches("foo?bar")); assertTrue(pattern.matches("foo*bar")); assertTrue(pattern.matches("foofoobar")); assertTrue(pattern.matches("foobar")); assertFalse(pattern.matches("")); assertFalse(pattern.matches("foo1bar1")); } @Test public void testMultiWildcard2() { Glob pattern = new Glob("foo*?bar"); assertTrue(pattern.matches("foo-bar")); assertTrue(pattern.matches("foo?bar")); assertTrue(pattern.matches("foo*bar")); assertTrue(pattern.matches("foofoobar")); assertFalse(pattern.matches("foobar")); assertFalse(pattern.matches("")); assertFalse(pattern.matches("foo1bar1")); } @Test public void testMultiWildcard3() { Glob pattern = new Glob("*foo*bar"); assertTrue(pattern.matches("foo-bar")); assertTrue(pattern.matches("foo?bar")); assertTrue(pattern.matches("foo*bar")); assertTrue(pattern.matches("foofoobar")); assertTrue(pattern.matches("foobar")); assertFalse(pattern.matches("")); assertFalse(pattern.matches("foo1bar1")); } @Test public void testMultiWildcard4() { Glob pattern = new Glob("foo*bar*"); assertTrue(pattern.matches("foo-bar")); assertTrue(pattern.matches("foo?bar")); assertTrue(pattern.matches("foo*bar")); assertTrue(pattern.matches("foofoobar")); assertTrue(pattern.matches("foobar")); assertTrue(pattern.matches("foo1bar1")); assertFalse(pattern.matches("")); } @Test public void testOnlyWildcard1() { Glob pattern = new Glob("*"); assertTrue(pattern.matches("foo-bar")); assertTrue(pattern.matches("foo?bar")); assertTrue(pattern.matches("foo*bar")); assertTrue(pattern.matches("foofoobar")); assertTrue(pattern.matches("foobar")); assertTrue(pattern.matches("foo1bar1")); assertTrue(pattern.matches("")); } @Test public void testOnlyWildcard2() { Glob pattern = new Glob("?"); assertFalse(pattern.matches("foo-bar")); assertFalse(pattern.matches("foo?bar")); assertFalse(pattern.matches("foo*bar")); assertFalse(pattern.matches("foofoobar")); assertFalse(pattern.matches("foobar")); assertFalse(pattern.matches("foo1bar1")); assertFalse(pattern.matches("")); assertTrue(pattern.matches("a")); assertTrue(pattern.matches("?")); assertTrue(pattern.matches("*")); } @Test public void testPatternEscape() { Glob pattern = new Glob("\\Q?"); assertFalse(pattern.matches("\\Q")); assertTrue(pattern.matches("\\Qa")); assertTrue(pattern.matches("\\Q\\")); } @Test public void testCurlyBrackets() { Glob pattern = new Glob("{foo,bar}"); assertFalse(pattern.matches("foo,bar")); assertTrue(pattern.matches("foo")); assertTrue(pattern.matches("bar")); } @Test public void testCurlyBracketsInsidePattern() { Glob pattern = new Glob("a{foo,bar}b"); assertFalse(pattern.matches("ab")); assertTrue(pattern.matches("afoob")); assertTrue(pattern.matches("abarb")); } @Test public void testNestedCurlyBrackets() { Glob pattern = new Glob("{foo,{bar,baz*}}"); assertFalse(pattern.matches("bar1")); assertTrue(pattern.matches("foo")); assertTrue(pattern.matches("bar")); assertTrue(pattern.matches("baz")); assertTrue(pattern.matches("baz1")); } @Test public void testIncompleteCurlyBrackets() { Glob pattern = new Glob("{foo{bar}"); assertTrue(pattern.matches("{foobar")); } @Test public void testComma() { Glob pattern = new Glob(","); assertTrue(pattern.matches(",")); } @Test public void testIsAnchored() { Glob pattern = new Glob("foo*bar"); assertTrue(pattern.toPattern().matcher("foo-bar").find()); assertFalse(pattern.toPattern().matcher("<foo-bar>").find()); } @Test public void testGlobExpansion() { assertThat(Glob.expandGlob(""), containsInAnyOrder("")); assertThat(Glob.expandGlob("foo"), containsInAnyOrder("foo")); assertThat(Glob.expandGlob("foo{}"), containsInAnyOrder("foo")); assertThat(Glob.expandGlob("foo{a}"), containsInAnyOrder("fooa")); assertThat(Glob.expandGlob("foo{a,b}"), containsInAnyOrder("fooa", "foob")); assertThat(Glob.expandGlob("foo{a,b,c}"), containsInAnyOrder("fooa", "foob", "fooc")); assertThat(Glob.expandGlob("{}"), containsInAnyOrder("")); assertThat(Glob.expandGlob("{,}"), containsInAnyOrder("", "")); assertThat(Glob.expandGlob("{a,b,c}"), containsInAnyOrder("a", "b", "c")); assertThat(Glob.expandGlob("{a,b,c}foo"), containsInAnyOrder("afoo", "bfoo", "cfoo")); assertThat(Glob.expandGlob("foo{a,b,c}foo"), containsInAnyOrder("fooafoo", "foobfoo", "foocfoo")); assertThat(Glob.expandGlob("foo{a,bar{c,d}}"), containsInAnyOrder("fooa", "foobarc", "foobard")); } @Test(expected = IllegalArgumentException.class) public void testGlobExpansionUnmatchedOpen() { Glob.expandGlob("{"); } // REVISIT: This should not throw an exception @Test(expected = IllegalArgumentException.class) public void testGlobExpansionComma() { Glob.expandGlob(","); } // REVISIT: This should not throw an exception @Test(expected = IllegalArgumentException.class) public void testGlobExpansionComma2() { Glob.expandGlob("a,b"); } @Test(expected = IllegalArgumentException.class) public void testGlobExpansionUnmatchedClose1() { Glob.expandGlob("}"); } @Test(expected = IllegalArgumentException.class) public void testGlobExpansionUnmatchedClose2() { Glob.expandGlob("{}}"); } @Test public void testListExpansion() { assertThat(Glob.expandList(""), containsInAnyOrder("")); assertThat(Glob.expandList("foo"), containsInAnyOrder("foo")); assertThat(Glob.expandList("foo{}"), containsInAnyOrder("foo")); assertThat(Glob.expandList("foo{a}"), containsInAnyOrder("fooa")); assertThat(Glob.expandList("foo{a,b}"), containsInAnyOrder("fooa", "foob")); assertThat(Glob.expandList("foo{a,b,c}"), containsInAnyOrder("fooa", "foob", "fooc")); assertThat(Glob.expandList("{}"), containsInAnyOrder("")); assertThat(Glob.expandList("{,}"), containsInAnyOrder("", "")); assertThat(Glob.expandList(","), containsInAnyOrder("", "")); assertThat(Glob.expandList("{a,b,c}"), containsInAnyOrder("a", "b", "c")); assertThat(Glob.expandList("a,b,c"), containsInAnyOrder("a", "b", "c")); assertThat(Glob.expandList("{a,b,c}foo"), containsInAnyOrder("afoo", "bfoo", "cfoo")); assertThat(Glob.expandList("foo{a,b,c}foo"), containsInAnyOrder("fooafoo", "foobfoo", "foocfoo")); assertThat(Glob.expandList("foo{a,bar{c,d}}"), containsInAnyOrder("fooa", "foobarc", "foobard")); } }