~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to read_changeset.py

  • Committer: John Arbash Meinel
  • Date: 2005-07-04 05:44:40 UTC
  • mto: (0.5.85) (1185.82.1 bzr-w-changeset)
  • mto: This revision was merged to the branch mainline in revision 1738.
  • Revision ID: john@arbash-meinel.com-20050704054440-ed584dd40745fdde
Refactoring, moving test code into test (switching back to assert is None)

Show diffs side-by-side

added added

removed removed

Lines of Context:
772
772
            return None
773
773
        if old_path in self.deleted:
774
774
            return None
775
 
        return self.base_tree.inventory.path2id(old_path)
 
775
        if hasattr(self.base_tree, 'path2id'):
 
776
            return self.base_tree.path2id(old_path)
 
777
        else:
 
778
            return self.base_tree.inventory.path2id(old_path)
776
779
 
777
780
    def id2path(self, file_id):
778
781
        """Return the new path in the target tree of the file with id file_id"""
882
885
 
883
886
    return result
884
887
 
885
 
def test():
886
 
    import unittest
887
 
    from StringIO import StringIO
888
 
    from bzrlib.diff import internal_diff
889
 
    class MockTree(object):
890
 
        def __init__(self):
891
 
            object.__init__(self)
892
 
            self.paths = {}
893
 
            self.ids = {}
894
 
            self.contents = {}
895
 
 
896
 
        def __iter__(self):
897
 
            return self.paths.iterkeys()
898
 
 
899
 
        def add_dir(self, file_id, path):
900
 
            self.paths[file_id] = path
901
 
            self.ids[path] = file_id
902
 
        
903
 
        def add_file(self, file_id, path, contents):
904
 
            self.add_dir(file_id, path)
905
 
            self.contents[file_id] = contents
906
 
 
907
 
        def path2id(self, path):
908
 
            return self.ids.get(path)
909
 
 
910
 
        def id2path(self, file_id):
911
 
            return self.paths.get(file_id)
912
 
 
913
 
        def has_id(self, file_id):
914
 
            return self.id2path(file_id) is not None
915
 
 
916
 
        def get_file(self, file_id):
917
 
            result = StringIO()
918
 
            result.write(self.contents[file_id])
919
 
            result.seek(0,0)
920
 
            return result
921
 
 
922
 
    class CTreeTester(unittest.TestCase):
923
 
 
924
 
        def make_tree_1(self):
925
 
            mtree = MockTree()
926
 
            mtree.add_dir("a", "grandparent")
927
 
            mtree.add_dir("b", "grandparent/parent")
928
 
            mtree.add_file("c", "grandparent/parent/file", "Hello\n")
929
 
            mtree.add_dir("d", "grandparent/alt_parent")
930
 
            return ChangesetTree(mtree), mtree
931
 
            
932
 
        def test_renames(self):
933
 
            """Ensure that file renames have the proper effect on children"""
934
 
            ctree = self.make_tree_1()[0]
935
 
            self.assertEqual(ctree.old_path("grandparent"), "grandparent")
936
 
            self.assertEqual(ctree.old_path("grandparent/parent"), "grandparent/parent")
937
 
            self.assertEqual(ctree.old_path("grandparent/parent/file"),
938
 
                "grandparent/parent/file")
939
 
 
940
 
            self.assertEqual(ctree.id2path("a"), "grandparent")
941
 
            self.assertEqual(ctree.id2path("b"), "grandparent/parent")
942
 
            self.assertEqual(ctree.id2path("c"), "grandparent/parent/file")
943
 
 
944
 
            self.assertEqual(ctree.path2id("grandparent"), "a")
945
 
            self.assertEqual(ctree.path2id("grandparent/parent"), "b")
946
 
            self.assertEqual(ctree.path2id("grandparent/parent/file"), "c")
947
 
 
948
 
            self.assertEqual(ctree.path2id("grandparent2"), None)
949
 
            self.assertEqual(ctree.path2id("grandparent2/parent"), None)
950
 
            self.assertEqual(ctree.path2id("grandparent2/parent/file"), None)
951
 
 
952
 
            ctree.note_rename("grandparent", "grandparent2")
953
 
            self.assertEqual(ctree.old_path("grandparent"), None)
954
 
            self.assertEqual(ctree.old_path("grandparent/parent"), None)
955
 
            self.assertEqual(ctree.old_path("grandparent/parent/file"), None)
956
 
 
957
 
            self.assertEqual(ctree.id2path("a"), "grandparent2")
958
 
            self.assertEqual(ctree.id2path("b"), "grandparent2/parent")
959
 
            self.assertEqual(ctree.id2path("c"), "grandparent2/parent/file")
960
 
 
961
 
            self.assertEqual(ctree.path2id("grandparent2"), "a")
962
 
            self.assertEqual(ctree.path2id("grandparent2/parent"), "b")
963
 
            self.assertEqual(ctree.path2id("grandparent2/parent/file"), "c")
964
 
 
965
 
            self.assertEqual(ctree.path2id("grandparent"), None)
966
 
            self.assertEqual(ctree.path2id("grandparent/parent"), None)
967
 
            self.assertEqual(ctree.path2id("grandparent/parent/file"), None)
968
 
 
969
 
            ctree.note_rename("grandparent/parent", "grandparent2/parent2")
970
 
            self.assertEqual(ctree.id2path("a"), "grandparent2")
971
 
            self.assertEqual(ctree.id2path("b"), "grandparent2/parent2")
972
 
            self.assertEqual(ctree.id2path("c"), "grandparent2/parent2/file")
973
 
 
974
 
            self.assertEqual(ctree.path2id("grandparent2"), "a")
975
 
            self.assertEqual(ctree.path2id("grandparent2/parent2"), "b")
976
 
            self.assertEqual(ctree.path2id("grandparent2/parent2/file"), "c")
977
 
 
978
 
            self.assertEqual(ctree.path2id("grandparent2/parent"), None)
979
 
            self.assertEqual(ctree.path2id("grandparent2/parent/file"), None)
980
 
 
981
 
            ctree.note_rename("grandparent/parent/file", 
982
 
                              "grandparent2/parent2/file2")
983
 
            self.assertEqual(ctree.id2path("a"), "grandparent2")
984
 
            self.assertEqual(ctree.id2path("b"), "grandparent2/parent2")
985
 
            self.assertEqual(ctree.id2path("c"), "grandparent2/parent2/file2")
986
 
 
987
 
            self.assertEqual(ctree.path2id("grandparent2"), "a")
988
 
            self.assertEqual(ctree.path2id("grandparent2/parent2"), "b")
989
 
            self.assertEqual(ctree.path2id("grandparent2/parent2/file2"), "c")
990
 
 
991
 
            self.assertEqual(ctree.path2id("grandparent2/parent2/file"), None)
992
 
 
993
 
        def test_moves(self):
994
 
            """Ensure that file moves have the proper effect on children"""
995
 
            ctree = self.make_tree_1()[0]
996
 
            ctree.note_rename("grandparent/parent/file", 
997
 
                              "grandparent/alt_parent/file")
998
 
            self.assertEqual(ctree.id2path("c"), "grandparent/alt_parent/file")
999
 
            self.assertEqual(ctree.path2id("grandparent/alt_parent/file"), "c")
1000
 
            self.assertEqual(ctree.path2id("grandparent/parent/file"), None)
1001
 
 
1002
 
        def unified_diff(self, old, new):
1003
 
            out = StringIO()
1004
 
            internal_diff("old", old, "new", new, out)
1005
 
            out.seek(0,0)
1006
 
            return out.read()
1007
 
 
1008
 
        def make_tree_2(self):
1009
 
            ctree = self.make_tree_1()[0]
1010
 
            ctree.note_rename("grandparent/parent/file", 
1011
 
                              "grandparent/alt_parent/file")
1012
 
            self.assertEqual(ctree.id2path("e"), None)
1013
 
            self.assertEqual(ctree.path2id("grandparent/parent/file"), None)
1014
 
            ctree.note_id("e", "grandparent/parent/file")
1015
 
            return ctree
1016
 
 
1017
 
        def test_adds(self):
1018
 
            """File/inventory adds"""
1019
 
            ctree = self.make_tree_2()
1020
 
            add_patch = self.unified_diff([], ["Extra cheese\n"])
1021
 
            ctree.note_patch("grandparent/parent/file", add_patch)
1022
 
            self.adds_test(ctree)
1023
 
 
1024
 
        def adds_test(self, ctree):
1025
 
            self.assertEqual(ctree.id2path("e"), "grandparent/parent/file")
1026
 
            self.assertEqual(ctree.path2id("grandparent/parent/file"), "e")
1027
 
            self.assertEqual(ctree.get_file("e").read(), "Extra cheese\n")
1028
 
 
1029
 
        def test_adds2(self):
1030
 
            """File/inventory adds, with patch-compatibile renames"""
1031
 
            ctree = self.make_tree_2()
1032
 
            ctree.contents_by_id = False
1033
 
            add_patch = self.unified_diff(["Hello\n"], ["Extra cheese\n"])
1034
 
            ctree.note_patch("grandparent/parent/file", add_patch)
1035
 
            self.adds_test(ctree)
1036
 
 
1037
 
        def make_tree_3(self):
1038
 
            ctree, mtree = self.make_tree_1()
1039
 
            mtree.add_file("e", "grandparent/parent/topping", "Anchovies\n")
1040
 
            ctree.note_rename("grandparent/parent/file", 
1041
 
                              "grandparent/alt_parent/file")
1042
 
            ctree.note_rename("grandparent/parent/topping", 
1043
 
                              "grandparent/alt_parent/stopping")
1044
 
            return ctree
1045
 
 
1046
 
        def get_file_test(self, ctree):
1047
 
            self.assertEqual(ctree.get_file("e").read(), "Lemon\n")
1048
 
            self.assertEqual(ctree.get_file("c").read(), "Hello\n")
1049
 
 
1050
 
        def test_get_file(self):
1051
 
            """Get file contents"""
1052
 
            ctree = self.make_tree_3()
1053
 
            mod_patch = self.unified_diff(["Anchovies\n"], ["Lemon\n"])
1054
 
            ctree.note_patch("grandparent/alt_parent/stopping", mod_patch)
1055
 
            self.get_file_test(ctree)
1056
 
 
1057
 
        def test_get_file2(self):
1058
 
            """Get file contents, with patch-compatibile renames"""
1059
 
            ctree = self.make_tree_3()
1060
 
            ctree.contents_by_id = False
1061
 
            mod_patch = self.unified_diff([], ["Lemon\n"])
1062
 
            ctree.note_patch("grandparent/alt_parent/stopping", mod_patch)
1063
 
            mod_patch = self.unified_diff([], ["Hello\n"])
1064
 
            ctree.note_patch("grandparent/alt_parent/file", mod_patch)
1065
 
            self.get_file_test(ctree)
1066
 
 
1067
 
        def test_delete(self):
1068
 
            "Deletion by changeset"
1069
 
            ctree = self.make_tree_1()[0]
1070
 
            self.assertEqual(ctree.get_file("c").read(), "Hello\n")
1071
 
            ctree.note_deletion("grandparent/parent/file")
1072
 
            self.assertEqual(ctree.id2path("c"), None)
1073
 
            self.assertEqual(ctree.path2id("grandparent/parent/file"), None)
1074
 
 
1075
 
        def sorted_ids(self, tree):
1076
 
            ids = list(tree)
1077
 
            ids.sort()
1078
 
            return ids
1079
 
 
1080
 
        def test_iteration(self):
1081
 
            """Ensure that iteration through ids works properly"""
1082
 
            ctree = self.make_tree_1()[0]
1083
 
            self.assertEqual(self.sorted_ids(ctree), ['a', 'b', 'c', 'd'])
1084
 
            ctree.note_deletion("grandparent/parent/file")
1085
 
            ctree.note_id("e", "grandparent/alt_parent/fool")
1086
 
            self.assertEqual(self.sorted_ids(ctree), ['a', 'b', 'd', 'e'])
1087
 
            
1088
 
 
1089
 
    patchesTestSuite = unittest.makeSuite(CTreeTester,'test_')
1090
 
    runner = unittest.TextTestRunner()
1091
 
    runner.run(patchesTestSuite)
1092