aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Nieder <jrn@google.com>2015-12-14 19:22:25 -0800
committerJonathan Nieder <jrn@google.com>2015-12-15 15:22:05 -0800
commit29dfbd22b7250d1a7779ba4fe00323fd167e35fc (patch)
tree4760e5872738146afba4e537e1eb4c8c7b3d9e01
parent2647d024afe7aac427ab37bba1655f2e54b257d5 (diff)
downloadjgit-29dfbd22b7250d1a7779ba4fe00323fd167e35fc.tar.gz
jgit-29dfbd22b7250d1a7779ba4fe00323fd167e35fc.zip
Add tests for PathFilterGroup.Single
Expand the existing PathFilterGroup tests to check which paths the tree entry matches. This expands test coverage by ensuring that PathFilterGroup's simpler code path to match against a single PathFilter works correctly. While at it, move the check on tree entry d/e/f/g.y into two separate tests: one to check that it doesn't match any of the configured paths, and another to check that it does not throw StopWalkException to end the walk early. Change-Id: I55bd512cd049fc2018659e2f86a4b8650f171fda
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathFilterGroupTest.java119
1 files changed, 86 insertions, 33 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathFilterGroupTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathFilterGroupTest.java
index d0062e1990..2968067238 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathFilterGroupTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathFilterGroupTest.java
@@ -43,11 +43,18 @@
package org.eclipse.jgit.treewalk.filter;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.dircache.DirCacheEditor;
@@ -58,6 +65,7 @@ import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.errors.StopWalkException;
import org.eclipse.jgit.lib.FileMode;
import org.eclipse.jgit.lib.ObjectReader;
+import org.eclipse.jgit.lib.Sets;
import org.eclipse.jgit.treewalk.TreeWalk;
import org.junit.Before;
import org.junit.Test;
@@ -66,6 +74,8 @@ public class PathFilterGroupTest {
private TreeFilter filter;
+ private Map<String, TreeFilter> singles;
+
@Before
public void setup() {
// @formatter:off
@@ -81,64 +91,65 @@ public class PathFilterGroupTest {
};
// @formatter:on
filter = PathFilterGroup.createFromStrings(paths);
+ singles = new HashMap<>();
+ for (String path : paths) {
+ singles.put(path, PathFilterGroup.createFromStrings(path));
+ }
}
@Test
public void testExact() throws MissingObjectException,
IncorrectObjectTypeException, IOException {
- assertTrue(filter.include(fakeWalk("a")));
- assertTrue(filter.include(fakeWalk("b/c")));
- assertTrue(filter.include(fakeWalk("c/d/e")));
- assertTrue(filter.include(fakeWalk("c/d/f")));
- assertTrue(filter.include(fakeWalk("d/e/f/g")));
- assertTrue(filter.include(fakeWalk("d/e/f/g.x")));
+ assertMatches(Sets.of("a"), fakeWalk("a"));
+ assertMatches(Sets.of("b/c"), fakeWalk("b/c"));
+ assertMatches(Sets.of("c/d/e"), fakeWalk("c/d/e"));
+ assertMatches(Sets.of("c/d/f"), fakeWalk("c/d/f"));
+ assertMatches(Sets.of("d/e/f/g"), fakeWalk("d/e/f/g"));
+ assertMatches(Sets.of("d/e/f/g.x"), fakeWalk("d/e/f/g.x"));
}
@Test
public void testNoMatchButClose() throws MissingObjectException,
IncorrectObjectTypeException, IOException {
- assertFalse(filter.include(fakeWalk("a+")));
- assertFalse(filter.include(fakeWalk("b+/c")));
- assertFalse(filter.include(fakeWalk("c+/d/e")));
- assertFalse(filter.include(fakeWalk("c+/d/f")));
- assertFalse(filter.include(fakeWalk("c/d.a")));
- assertFalse(filter.include(fakeWalk("d+/e/f/g")));
+ assertNoMatches(fakeWalk("a+"));
+ assertNoMatches(fakeWalk("b+/c"));
+ assertNoMatches(fakeWalk("c+/d/e"));
+ assertNoMatches(fakeWalk("c+/d/f"));
+ assertNoMatches(fakeWalk("c/d.a"));
+ assertNoMatches(fakeWalk("d+/e/f/g"));
}
@Test
public void testJustCommonPrefixIsNotMatch() throws MissingObjectException,
IncorrectObjectTypeException, IOException {
- assertFalse(filter.include(fakeWalk("b/a")));
- assertFalse(filter.include(fakeWalk("b/d")));
- assertFalse(filter.include(fakeWalk("c/d/a")));
- assertFalse(filter.include(fakeWalk("d/e/e")));
+ assertNoMatches(fakeWalk("b/a"));
+ assertNoMatches(fakeWalk("b/d"));
+ assertNoMatches(fakeWalk("c/d/a"));
+ assertNoMatches(fakeWalk("d/e/e"));
+ assertNoMatches(fakeWalk("d/e/f/g.y"));
}
@Test
public void testKeyIsPrefixOfFilter() throws MissingObjectException,
IncorrectObjectTypeException, IOException {
- assertTrue(filter.include(fakeWalk("b")));
- assertTrue(filter.include(fakeWalk("c/d")));
- assertTrue(filter.include(fakeWalk("c/d")));
- assertTrue(filter.include(fakeWalk("c")));
- assertTrue(filter.include(fakeWalk("d/e/f")));
- assertTrue(filter.include(fakeWalk("d/e")));
- assertTrue(filter.include(fakeWalk("d")));
+ assertMatches(Sets.of("b/c"), fakeWalk("b"));
+ assertMatches(Sets.of("c/d/e", "c/d/f"), fakeWalk("c/d"));
+ assertMatches(Sets.of("c/d/e", "c/d/f"), fakeWalk("c"));
+ assertMatches(Sets.of("d/e/f/g", "d/e/f/g.x"), fakeWalk("d/e/f"));
+ assertMatches(Sets.of("d/e/f/g", "d/e/f/g.x"), fakeWalk("d/e"));
+ assertMatches(Sets.of("d/e/f/g", "d/e/f/g.x"), fakeWalk("d"));
}
@Test
public void testFilterIsPrefixOfKey() throws MissingObjectException,
IncorrectObjectTypeException, IOException {
- assertTrue(filter.include(fakeWalk("a/b")));
- assertTrue(filter.include(fakeWalk("b/c/d")));
- assertTrue(filter.include(fakeWalk("c/d/e/f")));
- assertTrue(filter.include(fakeWalk("c/d/f/g")));
- assertTrue(filter.include(fakeWalk("d/e/f/g/h")));
- assertTrue(filter.include(fakeWalk("d/e/f/g/y")));
- assertTrue(filter.include(fakeWalk("d/e/f/g.x/h")));
- // listed before g/y, so can't StopWalk here, but it's not included
- // either
- assertFalse(filter.include(fakeWalk("d/e/f/g.y")));
+ assertMatches(Sets.of("a"), fakeWalk("a/b"));
+ assertMatches(Sets.of("b/c"), fakeWalk("b/c/d"));
+ assertMatches(Sets.of("c/d/e"), fakeWalk("c/d/e/f"));
+ assertMatches(Sets.of("c/d/f"), fakeWalk("c/d/f/g"));
+ assertMatches(Sets.of("d/e/f/g"), fakeWalk("d/e/f/g/h"));
+ assertMatches(Sets.of("d/e/f/g"), fakeWalk("d/e/f/g/y"));
+ assertMatches(Sets.of("d/e/f/g.x"), fakeWalk("d/e/f/g.x/h"));
}
@Test
@@ -182,6 +193,10 @@ public class PathFilterGroupTest {
// less obvious #2 due to git sorting order
filter.include(fakeWalk("d/e/f/g/h.txt"));
+ // listed before g/y, so can't StopWalk here
+ filter.include(fakeWalk("d/e/f/g.y"));
+ singles.get("d/e/f/g").include(fakeWalk("d/e/f/g.y"));
+
// non-ascii
try {
filter.include(fakeWalk("\u00C0"));
@@ -191,6 +206,44 @@ public class PathFilterGroupTest {
}
}
+ private void assertNoMatches(TreeWalk tw) throws MissingObjectException,
+ IncorrectObjectTypeException, IOException {
+ assertMatches(Sets.<String> of(), tw);
+ }
+
+ private void assertMatches(Set<String> expect, TreeWalk tw)
+ throws MissingObjectException, IncorrectObjectTypeException,
+ IOException {
+ List<String> actual = new ArrayList<>();
+ for (String path : singles.keySet()) {
+ if (includes(singles.get(path), tw)) {
+ actual.add(path);
+ }
+ }
+
+ String[] e = expect.toArray(new String[expect.size()]);
+ String[] a = actual.toArray(new String[actual.size()]);
+ Arrays.sort(e);
+ Arrays.sort(a);
+ assertArrayEquals(e, a);
+
+ if (expect.isEmpty()) {
+ assertFalse(includes(filter, tw));
+ } else {
+ assertTrue(includes(filter, tw));
+ }
+ }
+
+ private static boolean includes(TreeFilter f, TreeWalk tw)
+ throws MissingObjectException, IncorrectObjectTypeException,
+ IOException {
+ try {
+ return f.include(tw);
+ } catch (StopWalkException e) {
+ return false;
+ }
+ }
+
TreeWalk fakeWalk(final String path) throws IOException {
DirCache dc = DirCache.newInCore();
DirCacheEditor dce = dc.editor();