1424
1423
self.assertMergeOrder(['rev3', 'rev1'], graph, 'rev4', ['rev1', 'rev3'])
1426
class TestFindDescendants(TestGraphBase):
1428
def test_find_descendants_rev1_rev3(self):
1429
graph = self.make_graph(ancestry_1)
1430
descendants = graph.find_descendants('rev1', 'rev3')
1431
self.assertEqual(set(['rev1', 'rev2a', 'rev3']), descendants)
1433
def test_find_descendants_rev1_rev4(self):
1434
graph = self.make_graph(ancestry_1)
1435
descendants = graph.find_descendants('rev1', 'rev4')
1436
self.assertEqual(set(['rev1', 'rev2a', 'rev2b', 'rev3', 'rev4']),
1439
def test_find_descendants_rev2a_rev4(self):
1440
graph = self.make_graph(ancestry_1)
1441
descendants = graph.find_descendants('rev2a', 'rev4')
1442
self.assertEqual(set(['rev2a', 'rev3', 'rev4']), descendants)
1444
class TestFindLefthandMerger(TestGraphBase):
1446
def check_merger(self, result, ancestry, merged, tip):
1447
graph = self.make_graph(ancestry)
1448
self.assertEqual(result, graph.find_lefthand_merger(merged, tip))
1450
def test_find_lefthand_merger_rev2b(self):
1451
self.check_merger('rev4', ancestry_1, 'rev2b', 'rev4')
1453
def test_find_lefthand_merger_rev2a(self):
1454
self.check_merger('rev2a', ancestry_1, 'rev2a', 'rev4')
1456
def test_find_lefthand_merger_rev4(self):
1457
self.check_merger(None, ancestry_1, 'rev4', 'rev2a')
1459
def test_find_lefthand_merger_f(self):
1460
self.check_merger('i', complex_shortcut, 'f', 'm')
1462
def test_find_lefthand_merger_g(self):
1463
self.check_merger('i', complex_shortcut, 'g', 'm')
1465
def test_find_lefthand_merger_h(self):
1466
self.check_merger('n', complex_shortcut, 'h', 'n')
1469
class TestGetChildMap(TestGraphBase):
1471
def test_get_child_map(self):
1472
graph = self.make_graph(ancestry_1)
1473
child_map = graph.get_child_map(['rev4', 'rev3', 'rev2a', 'rev2b'])
1474
self.assertEqual({'rev1': ['rev2a', 'rev2b'],
1427
1481
class TestCachingParentsProvider(tests.TestCase):
1428
1482
"""These tests run with:
1599
1653
self.assertEqual(['D'], sorted(graph_thunk.heads(['D', 'C'])))
1600
1654
self.assertEqual(['B', 'C'], sorted(graph_thunk.heads(['B', 'C'])))
1656
def test_add_node(self):
1657
d = {('C',):[('A',)], ('B',): [('A',)], ('A',): []}
1658
g = _mod_graph.KnownGraph(d)
1659
graph_thunk = _mod_graph.GraphThunkIdsToKeys(g)
1660
graph_thunk.add_node("D", ["A", "C"])
1661
self.assertEqual(['B', 'D'],
1662
sorted(graph_thunk.heads(['D', 'B', 'A'])))
1603
1665
class TestPendingAncestryResultGetKeys(TestCaseWithMemoryTransport):
1604
1666
"""Tests for bzrlib.graph.PendingAncestryResult."""