~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_dirstate.py

  • Committer: Vincent Ladeuil
  • Date: 2009-05-05 15:31:34 UTC
  • mto: (4343.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 4344.
  • Revision ID: v.ladeuil+lp@free.fr-20090505153134-q4bp4is9gywsmzrv
Clean up test for log formats.

* bzrlib/tests/blackbox/test_logformats.py:
Update tests to actual style.

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
# set_path_id  setting id when state is in memory modified
45
45
 
46
46
 
47
 
def load_tests(basic_tests, module, loader):
48
 
    suite = loader.suiteClass()
49
 
    dir_reader_tests, remaining_tests = tests.split_suite_by_condition(
50
 
        basic_tests, tests.condition_isinstance(TestCaseWithDirState))
51
 
    tests.multiply_tests(dir_reader_tests,
52
 
                         test_osutils.dir_reader_scenarios(), suite)
53
 
    suite.addTest(remaining_tests)
54
 
    return suite
55
 
 
56
 
 
57
47
class TestCaseWithDirState(tests.TestCaseWithTransport):
58
48
    """Helper functions for creating DirState objects with various content."""
59
49
 
60
 
    # Set by load_tests
61
 
    _dir_reader_class = None
62
 
    _native_to_unicode = None # Not used yet
63
 
 
64
 
    def setUp(self):
65
 
        tests.TestCaseWithTransport.setUp(self)
66
 
 
67
 
        # Save platform specific info and reset it
68
 
        cur_dir_reader = osutils._selected_dir_reader
69
 
 
70
 
        def restore():
71
 
            osutils._selected_dir_reader = cur_dir_reader
72
 
        self.addCleanup(restore)
73
 
 
74
 
        osutils._selected_dir_reader = self._dir_reader_class()
75
 
 
76
50
    def create_empty_dirstate(self):
77
51
        """Return a locked but empty dirstate"""
78
52
        state = dirstate.DirState.initialize('dirstate')
827
801
        finally:
828
802
            tree.unlock()
829
803
 
 
804
 
830
805
    def test_set_state_from_inventory_mixed_paths(self):
831
806
        tree1 = self.make_branch_and_tree('tree1')
832
807
        self.build_tree(['tree1/a/', 'tree1/a/b/', 'tree1/a-b/',
941
916
        finally:
942
917
            state.unlock()
943
918
 
 
919
 
944
920
    def test_set_parent_trees_no_content(self):
945
921
        # set_parent_trees is a slow but important api to support.
946
922
        tree1 = self.make_branch_and_memory_tree('tree1')
1130
1106
        state._validate()
1131
1107
        self.assertEqual(expected_entries, list(state._iter_entries()))
1132
1108
 
1133
 
    def _test_add_symlink_to_root_no_parents_all_data(self, link_name, target):
 
1109
    def test_add_symlink_to_root_no_parents_all_data(self):
1134
1110
        # The most trivial addition of a symlink when there are no parents and
1135
1111
        # its in the root and all data about the file is supplied
1136
1112
        # bzr doesn't support fake symlinks on windows, yet.
1137
1113
        self.requireFeature(tests.SymlinkFeature)
1138
 
        os.symlink(target, link_name)
1139
 
        stat = os.lstat(link_name)
 
1114
        os.symlink('target', 'a link')
 
1115
        stat = os.lstat('a link')
1140
1116
        expected_entries = [
1141
1117
            (('', '', 'TREE_ROOT'), [
1142
1118
             ('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
1143
1119
             ]),
1144
 
            (('', link_name.encode('UTF-8'), 'a link id'), [
1145
 
             ('l', target.encode('UTF-8'), stat[6],
1146
 
              False, dirstate.pack_stat(stat)), # current tree
 
1120
            (('', 'a link', 'a link id'), [
 
1121
             ('l', 'target', 6, False, dirstate.pack_stat(stat)), # current tree
1147
1122
             ]),
1148
1123
            ]
1149
1124
        state = dirstate.DirState.initialize('dirstate')
1150
1125
        try:
1151
 
            state.add(link_name, 'a link id', 'symlink', stat,
1152
 
                      target.encode('UTF-8'))
 
1126
            state.add('a link', 'a link id', 'symlink', stat, 'target')
1153
1127
            # having added it, it should be in the output of iter_entries.
1154
1128
            self.assertEqual(expected_entries, list(state._iter_entries()))
1155
1129
            # saving and reloading should not affect this.
1161
1135
        self.addCleanup(state.unlock)
1162
1136
        self.assertEqual(expected_entries, list(state._iter_entries()))
1163
1137
 
1164
 
    def test_add_symlink_to_root_no_parents_all_data(self):
1165
 
        self._test_add_symlink_to_root_no_parents_all_data('a link', 'target')
1166
 
 
1167
 
    def test_add_symlink_unicode_to_root_no_parents_all_data(self):
1168
 
        self.requireFeature(tests.UnicodeFilenameFeature)
1169
 
        self._test_add_symlink_to_root_no_parents_all_data(
1170
 
            u'\N{Euro Sign}link', u'targ\N{Euro Sign}et')
1171
 
 
1172
1138
    def test_add_directory_and_child_no_parents_all_data(self):
1173
1139
        # after adding a directory, we should be able to add children to it.
1174
1140
        self.build_tree(['a dir/', 'a dir/a file'])
1236
1202
        self.assertRaises(errors.BzrError,
1237
1203
            state.add, '..', 'ass-id', 'directory', None, None)
1238
1204
 
1239
 
    def test_set_state_with_rename_b_a_bug_395556(self):
1240
 
        # bug 395556 uncovered a bug where the dirstate ends up with a false
1241
 
        # relocation record - in a tree with no parents there should be no
1242
 
        # absent or relocated records. This then leads to further corruption
1243
 
        # when a commit occurs, as the incorrect relocation gathers an
1244
 
        # incorrect absent in tree 1, and future changes go to pot.
1245
 
        tree1 = self.make_branch_and_tree('tree1')
1246
 
        self.build_tree(['tree1/b'])
1247
 
        tree1.lock_write()
1248
 
        try:
1249
 
            tree1.add(['b'], ['b-id'])
1250
 
            root_id = tree1.get_root_id()
1251
 
            inv = tree1.inventory
1252
 
            state = dirstate.DirState.initialize('dirstate')
1253
 
            try:
1254
 
                # Set the initial state with 'b'
1255
 
                state.set_state_from_inventory(inv)
1256
 
                inv.rename('b-id', root_id, 'a')
1257
 
                # Set the new state with 'a', which currently corrupts.
1258
 
                state.set_state_from_inventory(inv)
1259
 
                expected_result1 = [('', '', root_id, 'd'),
1260
 
                                    ('', 'a', 'b-id', 'f'),
1261
 
                                   ]
1262
 
                values = []
1263
 
                for entry in state._iter_entries():
1264
 
                    values.append(entry[0] + entry[1][0][:1])
1265
 
                self.assertEqual(expected_result1, values)
1266
 
            finally:
1267
 
                state.unlock()
1268
 
        finally:
1269
 
            tree1.unlock()
1270
 
 
1271
1205
 
1272
1206
class TestGetLines(TestCaseWithDirState):
1273
1207
 
2270
2204
        self.assertIsInstance(tree_data, str)
2271
2205
 
2272
2206
    def test_unicode_symlink(self):
2273
 
        inv_entry = inventory.InventoryLink('link-file-id',
2274
 
                                            u'nam\N{Euro Sign}e',
 
2207
        # In general, the code base doesn't support a target that contains
 
2208
        # non-ascii characters. So we just assert tha
 
2209
        inv_entry = inventory.InventoryLink('link-file-id', 'name',
2275
2210
                                            'link-parent-id')
2276
2211
        inv_entry.revision = 'link-revision-id'
2277
 
        target = u'link-targ\N{Euro Sign}t'
2278
 
        inv_entry.symlink_target = target
2279
 
        self.assertDetails(('l', target.encode('UTF-8'), 0, False,
2280
 
                            'link-revision-id'), inv_entry)
 
2212
        inv_entry.symlink_target = u'link-target'
 
2213
        details = self.assertDetails(('l', 'link-target', 0, False,
 
2214
                                      'link-revision-id'), inv_entry)
2281
2215
 
2282
2216
 
2283
2217
class TestSHA1Provider(tests.TestCaseInTempDir):