comparison tests/test_walk.py @ 201:58d93453c307

Much more encoding-related methods for DirWalkEntry and some unittests
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 21 Jan 2025 14:30:06 +0100
parents
children b4137ebd8e79
comparison
equal deleted inserted replaced
200:22f92bf3572c 201:58d93453c307
1 # -*- coding: utf-8 -*-
2 r"""Unit tests
3
4 """
5
6 from __future__ import absolute_import, print_function
7
8 import sys
9 import unittest
10
11 import _test_setup # noqa: F401 imported but unused
12
13 from cutils.util import walk
14
15
16 class SurrogateEscapeTests(unittest.TestCase):
17
18 @unittest.skipIf(sys.version_info[0] >= 3, "Skip on Python3")
19 def test_simple_escape(self):
20 w = b"\xc4"
21
22 d = walk.WalkDirEntry.surrogate_decode(w)
23 self.assertEqual(u"\udcc4", d)
24
25 @unittest.skipIf(sys.version_info[0] >= 3, "Skip on Python3")
26 def test_no_escape_min(self):
27 w = b"\x00"
28
29 d = walk.WalkDirEntry.surrogate_decode(w)
30 self.assertEqual(u"\x00", d)
31
32 @unittest.skipIf(sys.version_info[0] >= 3, "Skip on Python3")
33 def test_no_escape_max(self):
34 w = b"\x7f"
35
36 d = walk.WalkDirEntry.surrogate_decode(w)
37 self.assertEqual(u"\x7f", d)
38
39 @unittest.skipIf(sys.version_info[0] >= 3, "Skip on Python3")
40 def test_escape_min(self):
41 w = b"\x80"
42
43 d = walk.WalkDirEntry.surrogate_decode(w)
44 self.assertEqual(u"\udc80", d)
45
46 @unittest.skipIf(sys.version_info[0] >= 3, "Skip on Python3")
47 def test_escape_max(self):
48 w = b"\xff"
49
50 d = walk.WalkDirEntry.surrogate_decode(w)
51 self.assertEqual(u"\udcff", d)
52
53 @unittest.skipIf(sys.version_info[0] >= 3, "Skip on Python3")
54 def test_complex(self):
55 w = b"abc\xc4d\x80\x81\xffefg"
56 d = walk.WalkDirEntry.surrogate_decode(w)
57 self.assertEqual(u"abc\udcc4d\udc80\udc81\udcffefg", d)
58
59
60 class WalkDirEntryTests(unittest.TestCase):
61
62 def setUp(self):
63 self._orig_fsencoding = walk._FSENCODING
64 walk._FSENCODING = "ascii"
65
66 def tearDown(self):
67 walk._FSENCODING = self._orig_fsencoding
68
69 def test_ascii(self):
70 entry = walk.WalkDirEntry.from_path_name("tests", "_test_setup.py")
71 self.assertEqual("_test_setup.py", entry.name)
72 self.assertEqual("tests/_test_setup.py", entry.path)
73 self.assertEqual(u"_test_setup.py", entry.uname)
74 self.assertEqual(u"tests/_test_setup.py", entry.upath)
75 self.assertEqual(b"_test_setup.py", entry.u8name)
76 self.assertEqual(b"tests/_test_setup.py", entry.u8path)
77 self.assertEqual(b"_test_setup.py", entry.alt_u8name)
78 self.assertEqual(b"tests/_test_setup.py", entry.alt_u8path)
79 self.assertEqual(b"_test_setup.py", entry.alt_fsname)
80 self.assertEqual(b"tests/_test_setup.py", entry.alt_fspath)
81
82 @unittest.skipIf(sys.version_info[0] < 3, "Skip on Python2")
83 def test_with_surrogate_escaped_name(self):
84 # instantiate with a surrogate escaped path from PEP 383
85 entry = walk.WalkDirEntry.from_path_name(
86 "tests", "test-\udcc4", _do_stat=False)
87 self.assertEqual("test-\udcc4", entry.name)
88 self.assertEqual("tests/test-\udcc4", entry.path)
89 self.assertEqual(b"test-\xc4", entry.fsname)
90 self.assertEqual(b"tests/test-\xc4", entry.fspath)
91 self.assertEqual(b"test-\xc4", entry.alt_fsname)
92 self.assertEqual(b"tests/test-\xc4", entry.alt_fspath)
93
94 self.assertIsNone(entry.uname)
95 self.assertIsNone(entry.upath)
96 self.assertIsNone(entry.u8name)
97 self.assertIsNone(entry.u8path)
98
99 self.assertEqual(b"test-\\udcc4", entry.alt_u8name)
100 self.assertEqual(b"tests/test-\\udcc4", entry.alt_u8path)
101
102 @unittest.skipIf(sys.version_info[0] < 3, "Skip on Python2")
103 def test_with_surrogate_escaped_path(self):
104 # instantiate with a surrogate escaped path from PEP 383
105 entry = walk.WalkDirEntry.from_path_name(
106 "tests\udcc5", "test", _do_stat=False)
107 self.assertEqual("test", entry.name)
108 self.assertEqual("tests\udcc5/test", entry.path)
109 self.assertEqual(b"test", entry.fsname)
110 self.assertEqual(b"tests\xc5/test", entry.fspath)
111 self.assertEqual(b"test", entry.alt_fsname)
112 self.assertEqual(b"tests\xc5/test", entry.alt_fspath)
113
114 self.assertEqual("test", entry.uname)
115 self.assertIsNone(entry.upath)
116 self.assertEqual(b"test", entry.u8name)
117 self.assertIsNone(entry.u8path)
118
119 self.assertEqual(b"test", entry.alt_u8name)
120 self.assertEqual(b"tests\\udcc5/test", entry.alt_u8path)
121
122 @unittest.skipIf(sys.version_info[0] > 2, "Skip on Python3")
123 def test_py2_with_non_fsdecodable_name(self):
124 entry = walk.WalkDirEntry.from_path_name(
125 b"tests", b"test-\xc4", _do_stat=False)
126 self.assertEqual(b"test-\xc4", entry.name)
127 self.assertEqual(b"tests/test-\xc4", entry.path)
128 self.assertEqual(b"test-\xc4", entry.fsname)
129 self.assertEqual(b"tests/test-\xc4", entry.fspath)
130 self.assertEqual(b"test-\xc4", entry.alt_fsname)
131 self.assertEqual(b"tests/test-\xc4", entry.alt_fspath)
132
133 self.assertIsNone(entry.uname)
134 self.assertIsNone(entry.upath)
135 self.assertIsNone(entry.u8name)
136 self.assertIsNone(entry.u8path)
137
138 self.assertEqual(b"test-\\udcc4", entry.alt_u8name)
139 self.assertEqual(b"tests/test-\\udcc4", entry.alt_u8path)
140
141 @unittest.skipIf(sys.version_info[0] > 2, "Skip on Python3")
142 def test_py2_with_non_fsdecodable_path(self):
143 entry = walk.WalkDirEntry.from_path_name(
144 b"tests\xc5", b"test", _do_stat=False)
145 self.assertEqual(b"test", entry.name)
146 self.assertEqual(b"tests\xc5/test", entry.path)
147 self.assertEqual(b"test", entry.fsname)
148 self.assertEqual(b"tests\xc5/test", entry.fspath)
149 self.assertEqual(b"test", entry.alt_fsname)
150 self.assertEqual(b"tests\xc5/test", entry.alt_fspath)
151
152 self.assertEqual(b"test", entry.uname)
153 self.assertIsNone(entry.upath)
154 self.assertEqual(b"test", entry.u8name)
155 self.assertIsNone(entry.u8path)
156
157 self.assertEqual(b"test", entry.alt_u8name)
158 self.assertEqual(b"tests\\udcc5/test", entry.alt_u8path)
159
160 @unittest.skipIf(sys.version_info[0] > 2, "Skip on Python3")
161 def test_py2_with_non_fsencodable_unicode_name(self):
162 entry = walk.WalkDirEntry.from_path_name(
163 u"tests", u"test-\xc4", _do_stat=False)
164 self.assertEqual(u"test-\xc4", entry.name)
165 self.assertEqual(u"tests/test-\xc4", entry.path)
166 self.assertIsNone(entry.fsname)
167 self.assertIsNone(entry.fspath)
168 self.assertEqual(b"test-\\xc4", entry.alt_fsname)
169 self.assertEqual(b"tests/test-\\xc4", entry.alt_fspath)
170
171 self.assertEqual(u"test-\xc4", entry.uname)
172 self.assertEqual(u"tests/test-\xc4", entry.upath)
173 self.assertEqual(b"test-\xc3\x84", entry.u8name)
174 self.assertEqual(b"tests/test-\xc3\x84", entry.u8path)
175
176 self.assertEqual(b"test-\\xc4", entry.alt_u8name)
177 self.assertEqual(b"tests/test-\\xc4", entry.alt_u8path)
178
179 @unittest.skipIf(sys.version_info[0] > 2, "Skip on Python3")
180 def test_py2_with_non_fsencodable_unicode_path(self):
181 entry = walk.WalkDirEntry.from_path_name(
182 u"tests\xc5", u"test", _do_stat=False)
183 self.assertEqual(u"test", entry.name)
184 self.assertEqual(u"tests\xc5/test", entry.path)
185 self.assertEqual(b"test", entry.fsname)
186 self.assertIsNone(entry.fspath)
187 self.assertEqual(b"test", entry.alt_fsname)
188 self.assertEqual(b"tests\\xc5/test", entry.alt_fspath)
189
190 self.assertEqual(u"test", entry.uname)
191 self.assertEqual(u"tests\xc5/test", entry.upath)
192 self.assertEqual(b"test", entry.u8name)
193 self.assertEqual(b"tests\xc3\x85/test", entry.u8path)
194
195 self.assertEqual(b"test", entry.alt_u8name)
196 self.assertEqual(b"tests\\xc5/test", entry.alt_u8path)
197
198
199 if __name__ == "__main__":
200 sys.exit(unittest.main())