822
822
new_dirblock.append((info[0], info[1], info[2], info[4]))
823
823
dirblock[:] = new_dirblock
825
def test__walkdirs_utf8_selection(self):
826
# Just trigger the function once, to make sure it has selected a real
828
list(osutils._walkdirs_utf8('.'))
829
if WalkdirsWin32Feature.available():
830
# If the compiled form is available, make sure it is used
831
from bzrlib._walkdirs_win32 import _walkdirs_utf8_win32_find_file
832
self.assertIs(_walkdirs_utf8_win32_find_file,
833
osutils._real_walkdirs_utf8)
834
elif sys.platform == 'win32':
835
self.assertIs(osutils._walkdirs_unicode_to_utf8,
836
osutils._real_walkdirs_utf8)
837
elif osutils._fs_enc.upper() in ('UTF-8', 'ASCII', 'ANSI_X3.4-1968'): # ascii
838
self.assertIs(osutils._walkdirs_fs_utf8,
839
osutils._real_walkdirs_utf8)
841
self.assertIs(osutils._walkdirs_unicode_to_utf8,
842
osutils._real_walkdirs_utf8)
844
def _save_platform_info(self):
845
cur_winver = win32utils.winver
846
cur_fs_enc = osutils._fs_enc
847
cur_real_walkdirs_utf8 = osutils._real_walkdirs_utf8
849
win32utils.winver = cur_winver
850
osutils._fs_enc = cur_fs_enc
851
osutils._real_walkdirs_utf8 = cur_real_walkdirs_utf8
852
self.addCleanup(restore)
854
def assertWalkdirsUtf8Is(self, expected):
855
"""Assert the right implementation for _walkdirs_utf8 is chosen."""
856
# Force it to redetect
857
osutils._real_walkdirs_utf8 = None
858
# Nothing to list, but should still trigger the selection logic
859
self.assertEqual([(('', '.'), [])], list(osutils._walkdirs_utf8('.')))
860
self.assertIs(expected, osutils._real_walkdirs_utf8)
862
def test_force_walkdirs_utf8_fs_utf8(self):
863
self._save_platform_info()
864
win32utils.winver = None # Avoid the win32 detection code
865
osutils._fs_enc = 'UTF-8'
866
self.assertWalkdirsUtf8Is(osutils._walkdirs_fs_utf8)
868
def test_force_walkdirs_utf8_fs_ascii(self):
869
self._save_platform_info()
870
win32utils.winver = None # Avoid the win32 detection code
871
osutils._fs_enc = 'US-ASCII'
872
self.assertWalkdirsUtf8Is(osutils._walkdirs_fs_utf8)
874
def test_force_walkdirs_utf8_fs_ANSI(self):
875
self._save_platform_info()
876
win32utils.winver = None # Avoid the win32 detection code
877
osutils._fs_enc = 'ANSI_X3.4-1968'
878
self.assertWalkdirsUtf8Is(osutils._walkdirs_fs_utf8)
880
def test_force_walkdirs_utf8_fs_latin1(self):
881
self._save_platform_info()
882
win32utils.winver = None # Avoid the win32 detection code
883
osutils._fs_enc = 'latin1'
884
self.assertWalkdirsUtf8Is(osutils._walkdirs_unicode_to_utf8)
886
def test_force_walkdirs_utf8_nt(self):
887
self.requireFeature(WalkdirsWin32Feature)
888
self._save_platform_info()
889
win32utils.winver = 'Windows NT'
890
from bzrlib._walkdirs_win32 import _walkdirs_utf8_win32_find_file
891
self.assertWalkdirsUtf8Is(_walkdirs_utf8_win32_find_file)
893
def test_force_walkdirs_utf8_nt(self):
894
self.requireFeature(WalkdirsWin32Feature)
895
self._save_platform_info()
896
win32utils.winver = 'Windows 98'
897
self.assertWalkdirsUtf8Is(osutils._walkdirs_unicode_to_utf8)
825
899
def test_unicode_walkdirs(self):
826
900
"""Walkdirs should always return unicode paths."""
827
901
name0 = u'0file-\xb6'