974
978
self._filter_out_stat(result)
975
979
self.assertEqual(expected_dirblocks, result)
981
def test__walkdirs_utf_win32_find_file(self):
982
self.requireFeature(WalkdirsWin32Feature)
983
self.requireFeature(tests.UnicodeFilenameFeature)
984
from bzrlib._walkdirs_win32 import _walkdirs_utf8_win32_find_file
985
name0u = u'0file-\xb6'
986
name1u = u'1dir-\u062c\u0648'
987
name2u = u'2file-\u0633'
991
name1u + '/' + name0u,
992
name1u + '/' + name1u + '/',
995
self.build_tree(tree)
996
name0 = name0u.encode('utf8')
997
name1 = name1u.encode('utf8')
998
name2 = name2u.encode('utf8')
1000
# All of the abspaths should be in unicode, all of the relative paths
1002
expected_dirblocks = [
1004
[(name0, name0, 'file', './' + name0u),
1005
(name1, name1, 'directory', './' + name1u),
1006
(name2, name2, 'file', './' + name2u),
1009
((name1, './' + name1u),
1010
[(name1 + '/' + name0, name0, 'file', './' + name1u
1012
(name1 + '/' + name1, name1, 'directory', './' + name1u
1016
((name1 + '/' + name1, './' + name1u + '/' + name1u),
1021
result = list(_walkdirs_utf8_win32_find_file(u'.'))
1022
self._filter_out_stat(result)
1023
self.assertEqual(expected_dirblocks, result)
1025
def assertStatIsCorrect(self, path, win32stat):
1026
os_stat = os.stat(path)
1027
self.assertEqual(os_stat.st_size, win32stat.st_size)
1028
self.assertAlmostEqual(os_stat.st_mtime, win32stat.st_mtime, places=4)
1029
self.assertAlmostEqual(os_stat.st_ctime, win32stat.st_ctime, places=4)
1030
self.assertAlmostEqual(os_stat.st_atime, win32stat.st_atime, places=4)
1031
self.assertEqual(os_stat.st_dev, win32stat.st_dev)
1032
self.assertEqual(os_stat.st_ino, win32stat.st_ino)
1033
self.assertEqual(os_stat.st_mode, win32stat.st_mode)
1035
def test__walkdirs_utf_win32_find_file_stat_file(self):
1036
"""make sure our Stat values are valid"""
1037
self.requireFeature(WalkdirsWin32Feature)
1038
self.requireFeature(tests.UnicodeFilenameFeature)
1039
from bzrlib._walkdirs_win32 import _walkdirs_utf8_win32_find_file
1040
name0u = u'0file-\xb6'
1041
name0 = name0u.encode('utf8')
1042
self.build_tree([name0u])
1043
# I hate to sleep() here, but I'm trying to make the ctime different
1046
f = open(name0u, 'ab')
1048
f.write('just a small update')
1052
result = list(_walkdirs_utf8_win32_find_file(u'.'))
1053
entry = result[0][1][0]
1054
self.assertEqual((name0, name0, 'file'), entry[:3])
1055
self.assertEqual(u'./' + name0u, entry[4])
1056
self.assertStatIsCorrect(entry[4], entry[3])
1057
self.assertNotEqual(entry[3].st_mtime, entry[3].st_ctime)
1059
def test__walkdirs_utf_win32_find_file_stat_directory(self):
1060
"""make sure our Stat values are valid"""
1061
self.requireFeature(WalkdirsWin32Feature)
1062
self.requireFeature(tests.UnicodeFilenameFeature)
1063
from bzrlib._walkdirs_win32 import _walkdirs_utf8_win32_find_file
1064
name0u = u'0dir-\u062c\u0648'
1065
name0 = name0u.encode('utf8')
1066
self.build_tree([name0u + '/'])
1068
result = list(_walkdirs_utf8_win32_find_file(u'.'))
1069
entry = result[0][1][0]
1070
self.assertEqual((name0, name0, 'directory'), entry[:3])
1071
self.assertEqual(u'./' + name0u, entry[4])
1072
self.assertStatIsCorrect(entry[4], entry[3])
977
1074
def assertPathCompare(self, path_less, path_greater):
978
1075
"""check that path_less and path_greater compare correctly."""
979
1076
self.assertEqual(0, osutils.compare_paths_prefix_order(