44
44
# set_path_id setting id when state is in memory modified
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)
47
57
class TestCaseWithDirState(tests.TestCaseWithTransport):
48
58
"""Helper functions for creating DirState objects with various content."""
61
_dir_reader_class = None
62
_native_to_unicode = None # Not used yet
65
tests.TestCaseWithTransport.setUp(self)
67
# Save platform specific info and reset it
68
cur_dir_reader = osutils._selected_dir_reader
71
osutils._selected_dir_reader = cur_dir_reader
72
self.addCleanup(restore)
74
osutils._selected_dir_reader = self._dir_reader_class()
50
76
def create_empty_dirstate(self):
51
77
"""Return a locked but empty dirstate"""
52
78
state = dirstate.DirState.initialize('dirstate')
1106
1132
state._validate()
1107
1133
self.assertEqual(expected_entries, list(state._iter_entries()))
1109
def test_add_symlink_to_root_no_parents_all_data(self):
1135
def _test_add_symlink_to_root_no_parents_all_data(self, link_name, target):
1110
1136
# The most trivial addition of a symlink when there are no parents and
1111
1137
# its in the root and all data about the file is supplied
1112
1138
# bzr doesn't support fake symlinks on windows, yet.
1113
1139
self.requireFeature(tests.SymlinkFeature)
1114
os.symlink('target', 'a link')
1115
stat = os.lstat('a link')
1140
os.symlink(target, link_name)
1141
stat = os.lstat(link_name)
1116
1142
expected_entries = [
1117
1143
(('', '', 'TREE_ROOT'), [
1118
1144
('d', '', 0, False, dirstate.DirState.NULLSTAT), # current tree
1120
(('', 'a link', 'a link id'), [
1121
('l', 'target', 6, False, dirstate.pack_stat(stat)), # current tree
1146
(('', link_name.encode('UTF-8'), 'a link id'), [
1147
('l', target.encode('UTF-8'), stat[6],
1148
False, dirstate.pack_stat(stat)), # current tree
1124
1151
state = dirstate.DirState.initialize('dirstate')
1126
state.add('a link', 'a link id', 'symlink', stat, 'target')
1153
state.add(link_name, 'a link id', 'symlink', stat,
1154
target.encode('UTF-8'))
1127
1155
# having added it, it should be in the output of iter_entries.
1128
1156
self.assertEqual(expected_entries, list(state._iter_entries()))
1129
1157
# saving and reloading should not affect this.
1135
1163
self.addCleanup(state.unlock)
1136
1164
self.assertEqual(expected_entries, list(state._iter_entries()))
1166
def test_add_symlink_to_root_no_parents_all_data(self):
1167
self._test_add_symlink_to_root_no_parents_all_data('a link', 'target')
1169
def test_add_symlink_unicode_to_root_no_parents_all_data(self):
1170
self.requireFeature(tests.UnicodeFilenameFeature)
1171
self._test_add_symlink_to_root_no_parents_all_data(
1172
u'\N{Euro Sign}link', u'targ\N{Euro Sign}et')
1138
1174
def test_add_directory_and_child_no_parents_all_data(self):
1139
1175
# after adding a directory, we should be able to add children to it.
1140
1176
self.build_tree(['a dir/', 'a dir/a file'])
2204
2240
self.assertIsInstance(tree_data, str)
2206
2242
def test_unicode_symlink(self):
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',
2243
inv_entry = inventory.InventoryLink('link-file-id',
2244
u'nam\N{Euro Sign}e',
2210
2245
'link-parent-id')
2211
2246
inv_entry.revision = 'link-revision-id'
2212
inv_entry.symlink_target = u'link-target'
2213
details = self.assertDetails(('l', 'link-target', 0, False,
2214
'link-revision-id'), inv_entry)
2247
target = u'link-targ\N{Euro Sign}t'
2248
inv_entry.symlink_target = target
2249
self.assertDetails(('l', target.encode('UTF-8'), 0, False,
2250
'link-revision-id'), inv_entry)
2217
2253
class TestSHA1Provider(tests.TestCaseInTempDir):