42
43
a_circle_c = u'\xe5'
44
a_circle_d = u'a\u030a'
44
a_circle_d = u'a\u030a'
45
46
a_dots_d = u'a\u0308'
46
47
z_umlat_c = u'\u017d'
47
48
z_umlat_d = u'Z\u030c'
50
class UnicodeFilename(TestCaseWithTransport):
51
"""Test that UnicodeFilename returns the expected values."""
51
class TestNormalization(TestCase):
52
"""Verify that we have our normalizations correct."""
53
def test_a_circle(self):
54
def test_normalize(self):
54
55
self.assertEqual(a_circle_d, normalize('NFKD', a_circle_c))
55
56
self.assertEqual(a_circle_c, normalize('NFKC', a_circle_d))
57
self.assertEqual((a_circle_c, True), unicode_filename(a_circle_c))
58
if normalizes_filenames():
59
self.assertEqual((a_circle_c, True), unicode_filename(a_circle_d))
57
self.assertEqual(a_dots_d, normalize('NFKD', a_dots_c))
58
self.assertEqual(a_dots_c, normalize('NFKC', a_dots_d))
59
self.assertEqual(z_umlat_d, normalize('NFKD', z_umlat_c))
60
self.assertEqual(z_umlat_c, normalize('NFKC', z_umlat_d))
63
class NormalizedFilename(TestCaseWithTransport):
64
"""Test normalized_filename and associated helpers"""
66
def test__accessible_normalized_filename(self):
67
anf = osutils._accessible_normalized_filename
68
# normalized_filename should allow plain ascii strings
69
# not just unicode strings
70
self.assertEqual((u'ascii', True), anf('ascii'))
71
self.assertEqual((a_circle_c, True), anf(a_circle_c))
72
self.assertEqual((a_circle_c, True), anf(a_circle_d))
73
self.assertEqual((a_dots_c, True), anf(a_dots_c))
74
self.assertEqual((a_dots_c, True), anf(a_dots_d))
75
self.assertEqual((z_umlat_c, True), anf(z_umlat_c))
76
self.assertEqual((z_umlat_c, True), anf(z_umlat_d))
78
def test__inaccessible_normalized_filename(self):
79
inf = osutils._inaccessible_normalized_filename
80
# normalized_filename should allow plain ascii strings
81
# not just unicode strings
82
self.assertEqual((u'ascii', True), inf('ascii'))
83
self.assertEqual((a_circle_c, True), inf(a_circle_c))
84
self.assertEqual((a_circle_c, False), inf(a_circle_d))
85
self.assertEqual((a_dots_c, True), inf(a_dots_c))
86
self.assertEqual((a_dots_c, False), inf(a_dots_d))
87
self.assertEqual((z_umlat_c, True), inf(z_umlat_c))
88
self.assertEqual((z_umlat_c, False), inf(z_umlat_d))
90
def test_functions(self):
91
if osutils.normalizes_filenames():
92
self.assertEqual(osutils.normalized_filename,
93
osutils._accessible_normalized_filename)
61
self.assertEqual((a_circle_d, False), unicode_filename(a_circle_d))
95
self.assertEqual(osutils.normalized_filename,
96
osutils._inaccessible_normalized_filename)
63
98
def test_platform(self):
64
99
# With FAT32 and certain encodings on win32
108
147
'contents of %s is incorrect: %r != %r'
109
148
% (path, shouldbe, actual))
150
def test_access_non_normalized(self):
151
# Sometimes we can access non-normalized files by their normalized
152
# path, verify that normalized_filename returns the right info
153
files = [a_circle_d+'.1', a_dots_d+'.2', z_umlat_d+'.3']
156
self.build_tree(files)
158
raise TestSkipped("filesystem cannot create unicode files")
161
# We should get an exception if we can't open the file at
163
path, can_access = osutils.normalized_filename(fname)
165
self.assertNotEqual(path, fname)
167
# We should always be able to access them from the name
168
# they were created with
169
f = open(fname, 'rb')
172
# And normalized_filename sholud tell us correctly if we can
173
# access them by an alternate name
178
self.assertRaises(IOError, open, path, 'rb')