]> granicus.if.org Git - python/commitdiff
Issue #16414: Add support.FS_NONASCII and support.TESTFN_NONASCII
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 6 Nov 2012 22:23:43 +0000 (23:23 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 6 Nov 2012 22:23:43 +0000 (23:23 +0100)
These constants are used to test functions with non-ASCII data, especially
filenames.

Lib/test/support.py
Lib/test/test_cmd_line.py
Lib/test/test_cmd_line_script.py
Lib/test/test_genericpath.py
Lib/test/test_os.py

index 93b94d990f15810d17dd0a92cda5aec23ecea062..4e946aba2c64932d6ea7f818ae836ef356ef2eb4 100644 (file)
@@ -603,6 +603,32 @@ else:
 # module name.
 TESTFN = "{}_{}_tmp".format(TESTFN, os.getpid())
 
+# FS_NONASCII: non-ASCII character encodable by os.fsencode(),
+# or None if there is no such character.
+FS_NONASCII = None
+for character in (
+    # U+00E6 (Latin small letter AE): Encodable to cp1252, cp1254, cp1257, iso-8859-1
+    '\u00E6',
+    # U+0141 (Latin capital letter L with stroke): Encodable to cp1250, cp1257
+    '\u0141',
+    # U+041A (Cyrillic capital letter KA): Encodable to cp932, cp950, cp1251
+    '\u041A',
+    # U+05D0 (Hebrew Letter Alef): Encodable to cp424, cp1255
+    '\u05D0',
+    # U+06A9 (Arabic letter KEHEH): Encodable to cp1256
+    '\u06A9',
+    # U+03A9 (Greek capital letter OMEGA): Encodable to cp932, cp950, cp1253
+    '\u03A9',
+    # U+0E01 (Thai character KO KAI): Encodable to cp874
+    '\u0E01',
+):
+    try:
+        os.fsdecode(os.fsencode(character))
+    except UnicodeError:
+        pass
+    else:
+        FS_NONASCII = character
+        break
 
 # TESTFN_UNICODE is a non-ascii filename
 TESTFN_UNICODE = TESTFN + "-\xe0\xf2\u0258\u0141\u011f"
@@ -658,6 +684,11 @@ for name in (b'abc\xff', b'\xe7w\xf0'):
         TESTFN_UNDECODABLE = name
         break
 
+if FS_NONASCII:
+    TESTFN_NONASCII = TESTFN + '- ' + FS_NONASCII
+else:
+    TESTFN_NONASCII = None
+
 # Save the initial cwd
 SAVEDCWD = os.getcwd()
 
index 4b39115de80501a7d62ed2e35d42370e3308407b..bd8a76711021593ed7deba853acee0ec0cdcf301 100644 (file)
@@ -93,15 +93,15 @@ class CmdLineTest(unittest.TestCase):
         # All good if execution is successful
         assert_python_ok('-c', 'pass')
 
-    @unittest.skipIf(sys.getfilesystemencoding() == 'ascii',
-                     'need a filesystem encoding different than ASCII')
+    @unittest.skipUnless(test.support.FS_NONASCII, 'need support.FS_NONASCII')
     def test_non_ascii(self):
         # Test handling of non-ascii data
         if test.support.verbose:
             import locale
             print('locale encoding = %s, filesystem encoding = %s'
                   % (locale.getpreferredencoding(), sys.getfilesystemencoding()))
-        command = "assert(ord('\xe9') == 0xe9)"
+        command = ("assert(ord(%r) == %s)"
+                   % (test.support.FS_NONASCII, ord(test.support.FS_NONASCII)))
         assert_python_ok('-c', command)
 
     # On Windows, pass bytes to subprocess doesn't test how Python decodes the
index a8472c03a4ffa609e8323d48c776d0055f8984da..2d3a8f37afc767af97e7dc9ce5f05d087c9d6286 100644 (file)
@@ -363,19 +363,12 @@ class CmdLineTest(unittest.TestCase):
             self.assertTrue(text[1].startswith('  File '))
             self.assertTrue(text[3].startswith('NameError'))
 
+    @unittest.skipUnless(support.TESTFN_NONASCII, 'need support.TESTFN_NONASCII')
     def test_non_ascii(self):
         # Issue #16218
         # non-ascii filename encodable to cp1252, cp932, latin1 and utf8
-        filename = support.TESTFN + '\xa3'
-        try:
-            os.fsencode(filename)
-        except UnicodeEncodeError:
-            self.skipTest(
-                "Filesystem encoding %r cannot encode "
-                "the filename: %a"
-                % (sys.getfilesystemencoding(), filename))
         source = 'print(ascii(__file__))\n'
-        script_name = _make_test_script(os.curdir, filename, source)
+        script_name = _make_test_script(os.curdir, support.TESTFN_NONASCII, source)
         self.addCleanup(support.unlink, script_name)
         rc, stdout, stderr = assert_python_ok(script_name)
         self.assertEqual(
index 600ffc03d920a32eff8af7f85c785642661b976d..b1ee110e4683b100f8f68318174d26d282507c65 100644 (file)
@@ -313,6 +313,8 @@ class CommonTest(GenericTest):
     def test_nonascii_abspath(self):
         if support.TESTFN_UNDECODABLE:
             name = support.TESTFN_UNDECODABLE
+        elif support.TESTFN_NONASCII:
+            name = support.TESTFN_NONASCII
         else:
             name = b'a\xffb\xe7w\xf0'
 
index 9cf4070737d827e0973dd8f69fc86533e5b45fa6..ee19da3fc71817ed2d3bfb45be0f018ddadd6c05 100644 (file)
@@ -1243,6 +1243,8 @@ if sys.platform != 'win32':
         def setUp(self):
             if support.TESTFN_UNENCODABLE:
                 self.dir = support.TESTFN_UNENCODABLE
+            elif support.TESTFN_NONASCII:
+                self.dir = support.TESTFN_NONASCII
             else:
                 self.dir = support.TESTFN
             self.bdir = os.fsencode(self.dir)
@@ -1257,6 +1259,8 @@ if sys.platform != 'win32':
             add_filename(support.TESTFN_UNICODE)
             if support.TESTFN_UNENCODABLE:
                 add_filename(support.TESTFN_UNENCODABLE)
+            if support.TESTFN_NONASCII:
+                add_filename(support.TESTFN_NONASCII)
             if not bytesfn:
                 self.skipTest("couldn't create any non-ascii filename")