package com.beijunyi.parallelgit.filesystem;
import java.io.IOException;
import java.util.regex.PatternSyntaxException;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class GitPathMatcherTest extends AbstractGitFileSystemTest {
@Before
public void setupFs() throws IOException {
initGitFileSystem();
}
@Test
public void basicPathMatchingTest() {
assertTrue(gfs.getPathMatcher("glob:foo.html").matches(gfs.getPath("foo.html")));
assertFalse(gfs.getPathMatcher("glob:foo.htm").matches(gfs.getPath("foo.html")));
assertFalse(gfs.getPathMatcher("glob:bar.html").matches(gfs.getPath("foo.html")));
}
@Test
public void matchZeroOrMoreCharacterTest() {
assertTrue(gfs.getPathMatcher("glob:f*").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:*.html").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:foo.html*").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:*foo.html").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:*foo.html*").matches(gfs.getPath("foo.html")));
assertFalse(gfs.getPathMatcher("glob:*.htm").matches(gfs.getPath("foo.html")));
assertFalse(gfs.getPathMatcher("glob:f.*").matches(gfs.getPath("foo.html")));
}
@Test
public void matchOneCharacterTest() {
assertTrue(gfs.getPathMatcher("glob:??o.html").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:??o.html").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:???.html").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:???.htm?").matches(gfs.getPath("foo.html")));
assertFalse(gfs.getPathMatcher("glob:foo.???").matches(gfs.getPath("foo.html")));
}
@Test
public void groupOfSubPatternsTest() {
assertTrue(gfs.getPathMatcher("glob:foo{.html,.class}").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:foo.{class,html}").matches(gfs.getPath("foo.html")));
assertFalse(gfs.getPathMatcher("glob:foo{.htm,.class}").matches(gfs.getPath("foo.html")));
}
@Test
public void bracketExpressionsTest() {
assertTrue(gfs.getPathMatcher("glob:[f]oo.html").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:[e-g]oo.html").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:[abcde-g]oo.html").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:[abcdefx-z]oo.html").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:[!a]oo.html").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:[!a-e]oo.html").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:foo[-a-z]bar").matches(gfs.getPath("foo-bar")));
assertTrue(gfs.getPathMatcher("glob:foo[!-]html").matches(gfs.getPath("foo.html")));
}
@Test
public void groupsOfSubPatternWithBracketExpressionsTest() {
assertTrue(gfs.getPathMatcher("glob:[f]oo.{[h]tml,class}").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:foo.{[a-z]tml,class}").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("glob:foo.{[!a-e]tml,.class}").matches(gfs.getPath("foo.html")));
}
@Test
public void specialCharactersTest() {
assertTrue(gfs.getPathMatcher("glob:\\{foo*").matches(gfs.getPath("{foo}.html")));
assertTrue(gfs.getPathMatcher("glob:*\\}.html").matches(gfs.getPath("{foo}.html")));
assertTrue(gfs.getPathMatcher("glob:\\[foo*").matches(gfs.getPath("[foo].html")));
assertTrue(gfs.getPathMatcher("glob:*\\].html").matches(gfs.getPath("[foo].html")));
}
@Test(expected = PatternSyntaxException.class)
public void badPatternTest() {
assertTrue(gfs.getPathMatcher("glob:*[a--z]").matches(gfs.getPath("{foo}.html")));
}
@Test
public void absolutePathTest() {
assertTrue(gfs.getPathMatcher("glob:/tmp/*").matches(gfs.getPath("/tmp/foo")));
assertTrue(gfs.getPathMatcher("glob:/tmp/**").matches(gfs.getPath("/tmp/foo/bar")));
}
@Test
public void regexTest() {
assertTrue(gfs.getPathMatcher("regex:.*\\.html").matches(gfs.getPath("foo.html")));
assertTrue(gfs.getPathMatcher("regex:foo\\d+").matches(gfs.getPath("foo012")));
assertTrue(gfs.getPathMatcher("regex:fo\\so").matches(gfs.getPath("fo o")));
assertTrue(gfs.getPathMatcher("regex:\\w+").matches(gfs.getPath("foo")));
}
@Test(expected = UnsupportedOperationException.class)
public void invalidSyntaxTest() {
gfs.getPathMatcher("grep:foo");
}
@Test(expected = IllegalArgumentException.class)
public void missingSyntaxTest() {
gfs.getPathMatcher("foo");
}
}