1
2
3
4
5
6
7
8
9
10
11 package org.eclipse.jgit.treewalk.filter;
12
13 import static org.junit.Assert.assertEquals;
14
15 import java.io.IOException;
16 import java.util.ArrayList;
17 import java.util.Arrays;
18 import java.util.List;
19
20 import org.eclipse.jgit.dircache.DirCache;
21 import org.eclipse.jgit.dircache.DirCacheBuilder;
22 import org.eclipse.jgit.dircache.DirCacheEntry;
23 import org.eclipse.jgit.junit.RepositoryTestCase;
24 import org.eclipse.jgit.lib.FileMode;
25 import org.eclipse.jgit.lib.ObjectId;
26 import org.eclipse.jgit.lib.ObjectInserter;
27 import org.eclipse.jgit.treewalk.TreeWalk;
28 import org.junit.Test;
29
30 public class PathSuffixFilterTest extends RepositoryTestCase {
31
32 @Test
33 public void testNonRecursiveFiltering() throws IOException {
34 ObjectId treeId = createTree("a.sth", "a.txt");
35
36 List<String> paths = getMatchingPaths(".txt", treeId);
37 List<String> expected = Arrays.asList("a.txt");
38
39 assertEquals(expected, paths);
40 }
41
42 @Test
43 public void testRecursiveFiltering() throws IOException {
44 ObjectId treeId = createTree("a.sth", "a.txt", "sub/b.sth", "sub/b.txt");
45
46 List<String> paths = getMatchingPaths(".txt", treeId, true);
47 List<String> expected = Arrays.asList("a.txt", "sub/b.txt");
48
49 assertEquals(expected, paths);
50 }
51
52 @Test
53 public void testEdgeCases() throws IOException {
54 ObjectId treeId = createTree("abc", "abcd", "bcd", "c");
55 assertEquals(new ArrayList<String>(), getMatchingPaths("xbcd", treeId));
56 assertEquals(new ArrayList<String>(), getMatchingPaths("abcx", treeId));
57 assertEquals(Arrays.asList("abcd"), getMatchingPaths("abcd", treeId));
58 assertEquals(Arrays.asList("abcd", "bcd"), getMatchingPaths("bcd", treeId));
59 assertEquals(Arrays.asList("abc", "c"), getMatchingPaths("c", treeId));
60 }
61
62 private ObjectId createTree(String... paths) throws IOException {
63 final ObjectInserter odi = db.newObjectInserter();
64 final DirCache dc = db.readDirCache();
65 final DirCacheBuilder builder = dc.builder();
66 for (String path : paths) {
67 DirCacheEntry entry = createEntry(path, FileMode.REGULAR_FILE);
68 builder.add(entry);
69 }
70 builder.finish();
71 final ObjectId treeId = dc.writeTree(odi);
72 odi.flush();
73 return treeId;
74 }
75
76 private List<String> getMatchingPaths(String suffixFilter,
77 final ObjectId treeId) throws IOException {
78 return getMatchingPaths(suffixFilter, treeId, false);
79 }
80
81 private List<String> getMatchingPaths(String suffixFilter,
82 final ObjectId treeId, boolean recursiveWalk) throws IOException {
83 try (TreeWalk tw = new TreeWalk(db)) {
84 tw.setFilter(PathSuffixFilter.create(suffixFilter));
85 tw.setRecursive(recursiveWalk);
86 tw.addTree(treeId);
87
88 List<String> paths = new ArrayList<>();
89 while (tw.next())
90 paths.add(tw.getPathString());
91 return paths;
92 }
93 }
94
95 }