466
433
message = "Data not equal. Expected %d bytes, received %d."
467
434
self.fail(message % (len(response_data), self.test_data_len))
470
class TestPumpStringFile(TestCase):
472
def test_empty(self):
474
pump_string_file("", output)
475
self.assertEqual("", output.getvalue())
477
def test_more_than_segment_size(self):
479
pump_string_file("123456789", output, 2)
480
self.assertEqual("123456789", output.getvalue())
482
def test_segment_size(self):
484
pump_string_file("12", output, 2)
485
self.assertEqual("12", output.getvalue())
487
def test_segment_size_multiple(self):
489
pump_string_file("1234", output, 2)
490
self.assertEqual("1234", output.getvalue())
493
436
class TestSafeUnicode(TestCase):
495
438
def test_from_ascii_string(self):
872
815
new_dirblock.append((info[0], info[1], info[2], info[4]))
873
816
dirblock[:] = new_dirblock
875
def _save_platform_info(self):
876
cur_winver = win32utils.winver
877
cur_fs_enc = osutils._fs_enc
878
cur_dir_reader = osutils._selected_dir_reader
880
win32utils.winver = cur_winver
881
osutils._fs_enc = cur_fs_enc
882
osutils._selected_dir_reader = cur_dir_reader
883
self.addCleanup(restore)
885
def assertReadFSDirIs(self, expected):
886
"""Assert the right implementation for _walkdirs_utf8 is chosen."""
887
# Force it to redetect
888
osutils._selected_dir_reader = None
889
# Nothing to list, but should still trigger the selection logic
890
self.assertEqual([(('', '.'), [])], list(osutils._walkdirs_utf8('.')))
891
self.assertIsInstance(osutils._selected_dir_reader, expected)
893
def test_force_walkdirs_utf8_fs_utf8(self):
894
self.requireFeature(UTF8DirReaderFeature)
895
self._save_platform_info()
896
win32utils.winver = None # Avoid the win32 detection code
897
osutils._fs_enc = 'UTF-8'
898
self.assertReadFSDirIs(UTF8DirReaderFeature.reader)
900
def test_force_walkdirs_utf8_fs_ascii(self):
901
self.requireFeature(UTF8DirReaderFeature)
902
self._save_platform_info()
903
win32utils.winver = None # Avoid the win32 detection code
904
osutils._fs_enc = 'US-ASCII'
905
self.assertReadFSDirIs(UTF8DirReaderFeature.reader)
907
def test_force_walkdirs_utf8_fs_ANSI(self):
908
self.requireFeature(UTF8DirReaderFeature)
909
self._save_platform_info()
910
win32utils.winver = None # Avoid the win32 detection code
911
osutils._fs_enc = 'ANSI_X3.4-1968'
912
self.assertReadFSDirIs(UTF8DirReaderFeature.reader)
914
def test_force_walkdirs_utf8_fs_latin1(self):
915
self._save_platform_info()
916
win32utils.winver = None # Avoid the win32 detection code
917
osutils._fs_enc = 'latin1'
918
self.assertReadFSDirIs(osutils.UnicodeDirReader)
920
def test_force_walkdirs_utf8_nt(self):
921
# Disabled because the thunk of the whole walkdirs api is disabled.
922
self.requireFeature(Win32ReadDirFeature)
923
self._save_platform_info()
924
win32utils.winver = 'Windows NT'
925
from bzrlib._walkdirs_win32 import Win32ReadDir
926
self.assertReadFSDirIs(Win32ReadDir)
928
def test_force_walkdirs_utf8_98(self):
929
self.requireFeature(Win32ReadDirFeature)
930
self._save_platform_info()
931
win32utils.winver = 'Windows 98'
932
self.assertReadFSDirIs(osutils.UnicodeDirReader)
934
818
def test_unicode_walkdirs(self):
935
819
"""Walkdirs should always return unicode paths."""
936
820
name0 = u'0file-\xb6'
1090
result = list(osutils._walkdirs_utf8('.'))
1091
self._filter_out_stat(result)
1092
self.assertEqual(expected_dirblocks, result)
1094
def test__walkdirs_utf8_win32readdir(self):
1095
self.requireFeature(Win32ReadDirFeature)
1096
self.requireFeature(tests.UnicodeFilenameFeature)
1097
from bzrlib._walkdirs_win32 import Win32ReadDir
1098
self._save_platform_info()
1099
osutils._selected_dir_reader = Win32ReadDir()
1100
name0u = u'0file-\xb6'
1101
name1u = u'1dir-\u062c\u0648'
1102
name2u = u'2file-\u0633'
1106
name1u + '/' + name0u,
1107
name1u + '/' + name1u + '/',
1110
self.build_tree(tree)
1111
name0 = name0u.encode('utf8')
1112
name1 = name1u.encode('utf8')
1113
name2 = name2u.encode('utf8')
1115
# All of the abspaths should be in unicode, all of the relative paths
1117
expected_dirblocks = [
1119
[(name0, name0, 'file', './' + name0u),
1120
(name1, name1, 'directory', './' + name1u),
1121
(name2, name2, 'file', './' + name2u),
1124
((name1, './' + name1u),
1125
[(name1 + '/' + name0, name0, 'file', './' + name1u
1127
(name1 + '/' + name1, name1, 'directory', './' + name1u
1131
((name1 + '/' + name1, './' + name1u + '/' + name1u),
1136
result = list(osutils._walkdirs_utf8(u'.'))
1137
self._filter_out_stat(result)
1138
self.assertEqual(expected_dirblocks, result)
1140
def assertStatIsCorrect(self, path, win32stat):
1141
os_stat = os.stat(path)
1142
self.assertEqual(os_stat.st_size, win32stat.st_size)
1143
self.assertAlmostEqual(os_stat.st_mtime, win32stat.st_mtime, places=4)
1144
self.assertAlmostEqual(os_stat.st_ctime, win32stat.st_ctime, places=4)
1145
self.assertAlmostEqual(os_stat.st_atime, win32stat.st_atime, places=4)
1146
self.assertEqual(os_stat.st_dev, win32stat.st_dev)
1147
self.assertEqual(os_stat.st_ino, win32stat.st_ino)
1148
self.assertEqual(os_stat.st_mode, win32stat.st_mode)
1150
def test__walkdirs_utf_win32_find_file_stat_file(self):
1151
"""make sure our Stat values are valid"""
1152
self.requireFeature(Win32ReadDirFeature)
1153
self.requireFeature(tests.UnicodeFilenameFeature)
1154
from bzrlib._walkdirs_win32 import Win32ReadDir
1155
name0u = u'0file-\xb6'
1156
name0 = name0u.encode('utf8')
1157
self.build_tree([name0u])
1158
# I hate to sleep() here, but I'm trying to make the ctime different
1161
f = open(name0u, 'ab')
1163
f.write('just a small update')
1167
result = Win32ReadDir().read_dir('', u'.')
1169
self.assertEqual((name0, name0, 'file'), entry[:3])
1170
self.assertEqual(u'./' + name0u, entry[4])
1171
self.assertStatIsCorrect(entry[4], entry[3])
1172
self.assertNotEqual(entry[3].st_mtime, entry[3].st_ctime)
1174
def test__walkdirs_utf_win32_find_file_stat_directory(self):
1175
"""make sure our Stat values are valid"""
1176
self.requireFeature(Win32ReadDirFeature)
1177
self.requireFeature(tests.UnicodeFilenameFeature)
1178
from bzrlib._walkdirs_win32 import Win32ReadDir
1179
name0u = u'0dir-\u062c\u0648'
1180
name0 = name0u.encode('utf8')
1181
self.build_tree([name0u + '/'])
1183
result = Win32ReadDir().read_dir('', u'.')
1185
self.assertEqual((name0, name0, 'directory'), entry[:3])
1186
self.assertEqual(u'./' + name0u, entry[4])
1187
self.assertStatIsCorrect(entry[4], entry[3])
970
result = list(osutils._walkdirs_unicode_to_utf8('.'))
971
self._filter_out_stat(result)
972
self.assertEqual(expected_dirblocks, result)
1189
974
def assertPathCompare(self, path_less, path_greater):
1190
975
"""check that path_less and path_greater compare correctly."""