]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Move test_undecodable_code() from test_sys to test_cmd_line
authorVictor Stinner <victor.stinner@haypocalc.com>
Wed, 20 Oct 2010 21:52:33 +0000 (21:52 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Wed, 20 Oct 2010 21:52:33 +0000 (21:52 +0000)
Lib/test/test_cmd_line.py
Lib/test/test_sys.py

index f7e8f2418b607656ce0fe455b7548ad66f0fe029..35de813a6d6af6bf9fc99fda872a31e321717aa0 100644 (file)
@@ -108,6 +108,44 @@ class CmdLineTest(unittest.TestCase):
             command = "assert(ord('\xe9') == 0xe9)"
             assert_python_ok('-c', command)
 
+    # On Windows, pass bytes to subprocess doesn't test how Python decodes the
+    # command line, but how subprocess does decode bytes to unicode. Python
+    # doesn't decode the command line because Windows provides directly the
+    # arguments as unicode (using wmain() instead of main()).
+    @unittest.skipIf(sys.platform == 'win32',
+                     'Windows has a native unicode API')
+    def test_undecodable_code(self):
+        undecodable = b"\xff"
+        env = os.environ.copy()
+        # Use C locale to get ascii for the locale encoding
+        env['LC_ALL'] = 'C'
+        code = (
+            b'import locale; '
+            b'print(ascii("' + undecodable + b'"), '
+                b'locale.getpreferredencoding())')
+        p = subprocess.Popen(
+            [sys.executable, "-c", code],
+            stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
+            env=env)
+        stdout, stderr = p.communicate()
+        if p.returncode == 1:
+            # _Py_char2wchar() decoded b'\xff' as '\udcff' (b'\xff' is not
+            # decodable from ASCII) and run_command() failed on
+            # PyUnicode_AsUTF8String(). This is the expected behaviour on
+            # Linux.
+            pattern = b"Unable to decode the command from the command line:"
+        elif p.returncode == 0:
+            # _Py_char2wchar() decoded b'\xff' as '\xff' even if the locale is
+            # C and the locale encoding is ASCII. It occurs on FreeBSD, Solaris
+            # and Mac OS X.
+            pattern = b"'\\xff' "
+            # The output is followed by the encoding name, an alias to ASCII.
+            # Examples: "US-ASCII" or "646" (ISO 646, on Solaris).
+        else:
+            raise AssertionError("Unknown exit code: %s, output=%a" % (p.returncode, stdout))
+        if not stdout.startswith(pattern):
+            raise AssertionError("%a doesn't start with %a" % (stdout, pattern))
+
     def test_unbuffered_output(self):
         # Test expected operation of the '-u' switch
         for stream in ('stdout', 'stderr'):
index e0082815750c314235bee028193f2f4d4fee9e35..93eed03fb1fdee385ccbad7d501cb5aad1aa12ef 100644 (file)
@@ -496,44 +496,6 @@ class SysModuleTest(unittest.TestCase):
 
         self.assertRaises(TypeError, sys.intern, S("abc"))
 
-    # On Windows, pass bytes to subprocess doesn't test how Python decodes the
-    # command line, but how subprocess does decode bytes to unicode. Python
-    # doesn't decode the command line because Windows provides directly the
-    # arguments as unicode (using wmain() instead of main()).
-    @unittest.skipIf(sys.platform == 'win32',
-                     'Windows has a native unicode API')
-    def test_undecodable_code(self):
-        undecodable = b"\xff"
-        env = os.environ.copy()
-        # Use C locale to get ascii for the locale encoding
-        env['LC_ALL'] = 'C'
-        code = (
-            b'import locale; '
-            b'print(ascii("' + undecodable + b'"), '
-                b'locale.getpreferredencoding())')
-        p = subprocess.Popen(
-            [sys.executable, "-c", code],
-            stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
-            env=env)
-        stdout, stderr = p.communicate()
-        if p.returncode == 1:
-            # _Py_char2wchar() decoded b'\xff' as '\udcff' (b'\xff' is not
-            # decodable from ASCII) and run_command() failed on
-            # PyUnicode_AsUTF8String(). This is the expected behaviour on
-            # Linux.
-            pattern = b"Unable to decode the command from the command line:"
-        elif p.returncode == 0:
-            # _Py_char2wchar() decoded b'\xff' as '\xff' even if the locale is
-            # C and the locale encoding is ASCII. It occurs on FreeBSD, Solaris
-            # and Mac OS X.
-            pattern = b"'\\xff' "
-            # The output is followed by the encoding name, an alias to ASCII.
-            # Examples: "US-ASCII" or "646" (ISO 646, on Solaris).
-        else:
-            raise AssertionError("Unknown exit code: %s, output=%a" % (p.returncode, stdout))
-        if not stdout.startswith(pattern):
-            raise AssertionError("%a doesn't start with %a" % (stdout, pattern))
-
     def test_sys_flags(self):
         self.assertTrue(sys.flags)
         attrs = ("debug", "division_warning",