|
|
@@ -60,124 +60,124 @@ import org.junit.Test; |
|
|
|
public class PostOrderTreeWalkTest extends RepositoryTestCase { |
|
|
|
@Test |
|
|
|
public void testInitialize_NoPostOrder() throws Exception { |
|
|
|
final TreeWalk tw = new TreeWalk(db); |
|
|
|
assertFalse(tw.isPostOrderTraversal()); |
|
|
|
try (final TreeWalk tw = new TreeWalk(db)) { |
|
|
|
assertFalse(tw.isPostOrderTraversal()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testInitialize_TogglePostOrder() throws Exception { |
|
|
|
final TreeWalk tw = new TreeWalk(db); |
|
|
|
assertFalse(tw.isPostOrderTraversal()); |
|
|
|
tw.setPostOrderTraversal(true); |
|
|
|
assertTrue(tw.isPostOrderTraversal()); |
|
|
|
tw.setPostOrderTraversal(false); |
|
|
|
assertFalse(tw.isPostOrderTraversal()); |
|
|
|
try (final TreeWalk tw = new TreeWalk(db)) { |
|
|
|
assertFalse(tw.isPostOrderTraversal()); |
|
|
|
tw.setPostOrderTraversal(true); |
|
|
|
assertTrue(tw.isPostOrderTraversal()); |
|
|
|
tw.setPostOrderTraversal(false); |
|
|
|
assertFalse(tw.isPostOrderTraversal()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testResetDoesNotAffectPostOrder() throws Exception { |
|
|
|
final TreeWalk tw = new TreeWalk(db); |
|
|
|
tw.setPostOrderTraversal(true); |
|
|
|
assertTrue(tw.isPostOrderTraversal()); |
|
|
|
tw.reset(); |
|
|
|
assertTrue(tw.isPostOrderTraversal()); |
|
|
|
|
|
|
|
tw.setPostOrderTraversal(false); |
|
|
|
assertFalse(tw.isPostOrderTraversal()); |
|
|
|
tw.reset(); |
|
|
|
assertFalse(tw.isPostOrderTraversal()); |
|
|
|
try (final TreeWalk tw = new TreeWalk(db)) { |
|
|
|
tw.setPostOrderTraversal(true); |
|
|
|
assertTrue(tw.isPostOrderTraversal()); |
|
|
|
tw.reset(); |
|
|
|
assertTrue(tw.isPostOrderTraversal()); |
|
|
|
|
|
|
|
tw.setPostOrderTraversal(false); |
|
|
|
assertFalse(tw.isPostOrderTraversal()); |
|
|
|
tw.reset(); |
|
|
|
assertFalse(tw.isPostOrderTraversal()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testNoPostOrder() throws Exception { |
|
|
|
final DirCache tree = db.readDirCache(); |
|
|
|
{ |
|
|
|
final DirCacheBuilder b = tree.builder(); |
|
|
|
|
|
|
|
b.add(makeFile("a")); |
|
|
|
b.add(makeFile("b/c")); |
|
|
|
b.add(makeFile("b/d")); |
|
|
|
b.add(makeFile("q")); |
|
|
|
|
|
|
|
b.finish(); |
|
|
|
assertEquals(4, tree.getEntryCount()); |
|
|
|
final DirCacheBuilder b = tree.builder(); |
|
|
|
|
|
|
|
b.add(makeFile("a")); |
|
|
|
b.add(makeFile("b/c")); |
|
|
|
b.add(makeFile("b/d")); |
|
|
|
b.add(makeFile("q")); |
|
|
|
|
|
|
|
b.finish(); |
|
|
|
assertEquals(4, tree.getEntryCount()); |
|
|
|
|
|
|
|
try (final TreeWalk tw = new TreeWalk(db)) { |
|
|
|
tw.setPostOrderTraversal(false); |
|
|
|
tw.addTree(new DirCacheIterator(tree)); |
|
|
|
|
|
|
|
assertModes("a", REGULAR_FILE, tw); |
|
|
|
assertModes("b", TREE, tw); |
|
|
|
assertTrue(tw.isSubtree()); |
|
|
|
assertFalse(tw.isPostChildren()); |
|
|
|
tw.enterSubtree(); |
|
|
|
assertModes("b/c", REGULAR_FILE, tw); |
|
|
|
assertModes("b/d", REGULAR_FILE, tw); |
|
|
|
assertModes("q", REGULAR_FILE, tw); |
|
|
|
} |
|
|
|
|
|
|
|
final TreeWalk tw = new TreeWalk(db); |
|
|
|
tw.setPostOrderTraversal(false); |
|
|
|
tw.addTree(new DirCacheIterator(tree)); |
|
|
|
|
|
|
|
assertModes("a", REGULAR_FILE, tw); |
|
|
|
assertModes("b", TREE, tw); |
|
|
|
assertTrue(tw.isSubtree()); |
|
|
|
assertFalse(tw.isPostChildren()); |
|
|
|
tw.enterSubtree(); |
|
|
|
assertModes("b/c", REGULAR_FILE, tw); |
|
|
|
assertModes("b/d", REGULAR_FILE, tw); |
|
|
|
assertModes("q", REGULAR_FILE, tw); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testWithPostOrder_EnterSubtree() throws Exception { |
|
|
|
final DirCache tree = db.readDirCache(); |
|
|
|
{ |
|
|
|
final DirCacheBuilder b = tree.builder(); |
|
|
|
final DirCacheBuilder b = tree.builder(); |
|
|
|
|
|
|
|
b.add(makeFile("a")); |
|
|
|
b.add(makeFile("b/c")); |
|
|
|
b.add(makeFile("b/d")); |
|
|
|
b.add(makeFile("q")); |
|
|
|
b.add(makeFile("a")); |
|
|
|
b.add(makeFile("b/c")); |
|
|
|
b.add(makeFile("b/d")); |
|
|
|
b.add(makeFile("q")); |
|
|
|
|
|
|
|
b.finish(); |
|
|
|
assertEquals(4, tree.getEntryCount()); |
|
|
|
} |
|
|
|
b.finish(); |
|
|
|
assertEquals(4, tree.getEntryCount()); |
|
|
|
|
|
|
|
final TreeWalk tw = new TreeWalk(db); |
|
|
|
tw.setPostOrderTraversal(true); |
|
|
|
tw.addTree(new DirCacheIterator(tree)); |
|
|
|
try (final TreeWalk tw = new TreeWalk(db)) { |
|
|
|
tw.setPostOrderTraversal(true); |
|
|
|
tw.addTree(new DirCacheIterator(tree)); |
|
|
|
|
|
|
|
assertModes("a", REGULAR_FILE, tw); |
|
|
|
assertModes("a", REGULAR_FILE, tw); |
|
|
|
|
|
|
|
assertModes("b", TREE, tw); |
|
|
|
assertTrue(tw.isSubtree()); |
|
|
|
assertFalse(tw.isPostChildren()); |
|
|
|
tw.enterSubtree(); |
|
|
|
assertModes("b/c", REGULAR_FILE, tw); |
|
|
|
assertModes("b/d", REGULAR_FILE, tw); |
|
|
|
assertModes("b", TREE, tw); |
|
|
|
assertTrue(tw.isSubtree()); |
|
|
|
assertFalse(tw.isPostChildren()); |
|
|
|
tw.enterSubtree(); |
|
|
|
assertModes("b/c", REGULAR_FILE, tw); |
|
|
|
assertModes("b/d", REGULAR_FILE, tw); |
|
|
|
|
|
|
|
assertModes("b", TREE, tw); |
|
|
|
assertTrue(tw.isSubtree()); |
|
|
|
assertTrue(tw.isPostChildren()); |
|
|
|
assertModes("b", TREE, tw); |
|
|
|
assertTrue(tw.isSubtree()); |
|
|
|
assertTrue(tw.isPostChildren()); |
|
|
|
|
|
|
|
assertModes("q", REGULAR_FILE, tw); |
|
|
|
assertModes("q", REGULAR_FILE, tw); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testWithPostOrder_NoEnterSubtree() throws Exception { |
|
|
|
final DirCache tree = db.readDirCache(); |
|
|
|
{ |
|
|
|
final DirCacheBuilder b = tree.builder(); |
|
|
|
final DirCacheBuilder b = tree.builder(); |
|
|
|
|
|
|
|
b.add(makeFile("a")); |
|
|
|
b.add(makeFile("b/c")); |
|
|
|
b.add(makeFile("b/d")); |
|
|
|
b.add(makeFile("q")); |
|
|
|
b.add(makeFile("a")); |
|
|
|
b.add(makeFile("b/c")); |
|
|
|
b.add(makeFile("b/d")); |
|
|
|
b.add(makeFile("q")); |
|
|
|
|
|
|
|
b.finish(); |
|
|
|
assertEquals(4, tree.getEntryCount()); |
|
|
|
} |
|
|
|
b.finish(); |
|
|
|
assertEquals(4, tree.getEntryCount()); |
|
|
|
|
|
|
|
final TreeWalk tw = new TreeWalk(db); |
|
|
|
tw.setPostOrderTraversal(true); |
|
|
|
tw.addTree(new DirCacheIterator(tree)); |
|
|
|
try (final TreeWalk tw = new TreeWalk(db)) { |
|
|
|
tw.setPostOrderTraversal(true); |
|
|
|
tw.addTree(new DirCacheIterator(tree)); |
|
|
|
|
|
|
|
assertModes("a", REGULAR_FILE, tw); |
|
|
|
assertModes("a", REGULAR_FILE, tw); |
|
|
|
|
|
|
|
assertModes("b", TREE, tw); |
|
|
|
assertTrue(tw.isSubtree()); |
|
|
|
assertFalse(tw.isPostChildren()); |
|
|
|
assertModes("b", TREE, tw); |
|
|
|
assertTrue(tw.isSubtree()); |
|
|
|
assertFalse(tw.isPostChildren()); |
|
|
|
|
|
|
|
assertModes("q", REGULAR_FILE, tw); |
|
|
|
assertModes("q", REGULAR_FILE, tw); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private DirCacheEntry makeFile(final String path) throws Exception { |