aboutsummaryrefslogtreecommitdiff
path: root/jimfs/src/test/java/com/google/common/jimfs/AbstractGlobMatcherTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'jimfs/src/test/java/com/google/common/jimfs/AbstractGlobMatcherTest.java')
-rw-r--r--jimfs/src/test/java/com/google/common/jimfs/AbstractGlobMatcherTest.java154
1 files changed, 154 insertions, 0 deletions
diff --git a/jimfs/src/test/java/com/google/common/jimfs/AbstractGlobMatcherTest.java b/jimfs/src/test/java/com/google/common/jimfs/AbstractGlobMatcherTest.java
new file mode 100644
index 0000000..57936e1
--- /dev/null
+++ b/jimfs/src/test/java/com/google/common/jimfs/AbstractGlobMatcherTest.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed 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 com.google.common.jimfs;
+
+import org.junit.Test;
+
+/** @author Colin Decker */
+public abstract class AbstractGlobMatcherTest extends AbstractPathMatcherTest {
+
+ @Test
+ public void testMatching_literal() {
+ assertThat("foo").matches("foo");
+ assertThat("/foo").matches("/foo");
+ assertThat("/foo/bar/baz").matches("/foo/bar/baz");
+ }
+
+ @Test
+ public void testMatching_questionMark() {
+ assertThat("?").matches("a", "A", "$", "5", "_").doesNotMatch("/", "ab", "");
+ assertThat("??").matches("ab");
+ assertThat("????").matches("1234");
+ assertThat("?oo?").matches("book", "doom").doesNotMatch("/oom");
+ assertThat("/?oo/ba?").matches("/foo/bar");
+ assertThat("foo.?").matches("foo.h");
+ assertThat("foo.??").matches("foo.cc");
+ }
+
+ @Test
+ public void testMatching_star() {
+ assertThat("*")
+ .matches("a", "abc", "298347829473928423", "abc12345", "")
+ .doesNotMatch("/", "/abc");
+ assertThat("/*").matches("/a", "/abcd", "/abc123", "/").doesNotMatch("/foo/bar");
+ assertThat("/*/*/*")
+ .matches("/a/b/c", "/foo/bar/baz")
+ .doesNotMatch("/foo/bar", "/foo/bar/baz/abc");
+ assertThat("/*/bar").matches("/foo/bar", "/abc/bar").doesNotMatch("/bar");
+ assertThat("/foo/*")
+ .matches("/foo/bar", "/foo/baz")
+ .doesNotMatch("/foo", "foo/bar", "/foo/bar/baz");
+ assertThat("/foo*/ba*")
+ .matches("/food/bar", "/fool/bat", "/foo/ba", "/foot/ba", "/foo/bar", "/foods/bartender")
+ .doesNotMatch("/food/baz/bar");
+ assertThat("*.java")
+ .matches("Foo.java", "Bar.java", "GlobPatternTest.java", "Foo.java.java", ".java")
+ .doesNotMatch("Foo.jav", "Foo", "java.Foo", "Foo.java.");
+ assertThat("Foo.*")
+ .matches("Foo.java", "Foo.txt", "Foo.tar.gz", "Foo.Foo.", "Foo.")
+ .doesNotMatch("Foo", ".Foo");
+ assertThat("*/*.java").matches("foo/Bar.java", "foo/.java");
+ assertThat("*/Bar.*").matches("foo/Bar.java");
+ assertThat(".*").matches(".bashrc", ".bash_profile");
+ assertThat("*.............").matches(
+ "............a............a..............a.............a............a.........." +
+ ".........................................................a....................");
+ assertThat("*.............*..").matches(
+ "............a............a..............a.............a............a.........." +
+ "..........a...................................................................");
+ assertThat(".................*........*.*.....*....................*..............*").matches(
+ ".................................abc.........................................." +
+ ".............................................................................." +
+ ".............................................................................." +
+ ".............................................12..............................." +
+ ".........................................................................hello" +
+ "..............................................................................");
+ }
+
+ @Test
+ public void testMatching_starStar() {
+ assertThat("**")
+ .matches("", "a", "abc", "293874982374913794141", "/foo/bar/baz", "foo/bar.txt");
+ assertThat("**foo")
+ .matches("foo", "barfoo", "/foo", "/a/b/c/foo", "c.foo", "a/b/c.foo")
+ .doesNotMatch("foo.bar", "/a/b/food");
+ assertThat("/foo/**/bar.txt")
+ .matches("/foo/baz/bar.txt", "/foo/bar/asdf/bar.txt")
+ .doesNotMatch("/foo/bar.txt", "/foo/baz/bar");
+ assertThat("**/*.java").matches("/Foo.java", "foo/Bar.java", "/.java", "foo/.java");
+ }
+
+ @Test
+ public void testMatching_brackets() {
+ assertThat("[ab]").matches("a", "b").doesNotMatch("ab", "ba", "aa", "bb", "c", "", "/");
+ assertThat("[a-d]")
+ .matches("a", "b", "c", "d")
+ .doesNotMatch("e", "f", "z", "aa", "ab", "abcd", "", "/");
+ assertThat("[a-dz]")
+ .matches("a", "b", "c", "d", "z")
+ .doesNotMatch("e", "f", "aa", "ab", "dz", "", "/");
+ assertThat("[!b]").matches("a", "c", "d", "0", "!", "$").doesNotMatch("b", "/", "", "ac");
+ assertThat("[!b-d3]")
+ .matches("a", "e", "f", "0", "1", "2", "4")
+ .doesNotMatch("b", "c", "d", "3");
+ assertThat("[-]").matches("-");
+ assertThat("[-a-c]").matches("-", "a", "b", "c");
+ assertThat("[!-a-c]").matches("d", "e", "0").doesNotMatch("a", "b", "c", "-");
+ assertThat("[\\d]").matches("\\", "d").doesNotMatch("0", "1");
+ assertThat("[\\s]").matches("\\", "s").doesNotMatch(" ");
+ assertThat("[\\]").matches("\\").doesNotMatch("]");
+ }
+
+ @Test
+ public void testMatching_curlyBraces() {
+ assertThat("{a,b}").matches("a", "b").doesNotMatch("/", "c", "0", "", ",", "{", "}");
+ assertThat("{ab,cd}").matches("ab", "cd").doesNotMatch("bc", "ac", "ad", "ba", "dc", ",");
+ assertThat(".{h,cc}").matches(".h", ".cc").doesNotMatch("h", "cc");
+ assertThat("{?oo,ba?}").matches("foo", "boo", "moo", "bat", "bar", "baz");
+ assertThat("{[Ff]oo*,[Bb]a*,[A-Ca-c]*/[!z]*.txt}")
+ .matches("foo", "Foo", "fools", "ba", "Ba", "bar", "Bar", "Bart", "c/y.txt", "Cat/foo.txt")
+ .doesNotMatch("Cat", "Cat/foo", "blah", "bAr", "c/z.txt", "c/.txt", "*");
+ }
+
+ @Test
+ public void testMatching_escapes() {
+ assertThat("\\\\").matches("\\");
+ assertThat("\\*").matches("*");
+ assertThat("\\*\\*").matches("**");
+ assertThat("\\[").matches("[");
+ assertThat("\\{").matches("{");
+ assertThat("\\a").matches("a");
+ assertThat("{a,\\}}").matches("a", "}");
+ assertThat("{a\\,,b}").matches("a,", "b").doesNotMatch("a", ",");
+ }
+
+ @Test
+ public void testMatching_various() {
+ assertThat("**/[A-Z]*.{[Jj][Aa][Vv][Aa],[Tt][Xx][Tt]}")
+ .matches("/foo/bar/Baz.java", "/A.java", "bar/Test.JAVA", "foo/Foo.tXt");
+ }
+
+ @Test
+ public void testInvalidSyntax() {
+ assertSyntaxError("\\");
+ assertSyntaxError("[");
+ assertSyntaxError("[]");
+ assertSyntaxError("{");
+ assertSyntaxError("{{}");
+ assertSyntaxError("{a,b,a{b,c},d}");
+ }
+}