Mercurial > hgrepos > Python > apps > py-cutils
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()) |
