[Python-checkins] r84224 - python/branches/py3k/Lib/test/test_sys.py

victor.stinner python-checkins at python.org
Fri Aug 20 18:38:14 CEST 2010


Author: victor.stinner
Date: Fri Aug 20 18:38:14 2010
New Revision: 84224

Log:
test_undecodable_code(): set locale to C

The test is still failing on "x86 FreeBSD 7.2 3.x" and "sparc solaris10 gcc
3.x" buildbots. It looks like the locale encoding is able to decode b'\xff'. I
suppose that it is an encoding like 'iso-8859-1'.

Use C locale to set, I hope, the locale encoding to 'ascii'. Display also the
encoding so if the test fails, at least I will learn the locale encoding
choosen for the C locale.


Modified:
   python/branches/py3k/Lib/test/test_sys.py

Modified: python/branches/py3k/Lib/test/test_sys.py
==============================================================================
--- python/branches/py3k/Lib/test/test_sys.py	(original)
+++ python/branches/py3k/Lib/test/test_sys.py	Fri Aug 20 18:38:14 2010
@@ -495,24 +495,21 @@
 
         self.assertRaises(TypeError, sys.intern, S("abc"))
 
-    def test_main_invalid_unicode(self):
-        import locale
+    def test_undecodable_code(self):
         non_decodable = b"\xff"
-        encoding = locale.getpreferredencoding()
-        try:
-            non_decodable.decode(encoding)
-        except UnicodeDecodeError:
-            pass
-        else:
-            self.skipTest('%r is decodable with encoding %s'
-                % (non_decodable, encoding))
-        code = b'print(ascii("' + non_decodable + b'"))'
-        p = subprocess.Popen([sys.executable, "-c", code], stderr=subprocess.PIPE)
+        env = os.environ.copy()
+        env['LANG'] = 'C'
+        code = b'import locale; '
+        code += b'print(ascii("' + non_decodable + b'"), locale.getpreferredencoding())'
+        p = subprocess.Popen(
+            [sys.executable, "-c", code],
+            stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
+            env=env)
         stdout, stderr = p.communicate()
-        self.assertEqual(p.returncode, 1)
         pattern = b"Unable to decode the command from the command line:"
-        if not stderr.startswith(pattern):
-            raise AssertionError("%a doesn't start with %a" % (stderr, pattern))
+        if not stdout.startswith(pattern):
+            raise AssertionError("%a doesn't start with %a" % (stdout, pattern))
+        self.assertEqual(p.returncode, 1)
 
     def test_sys_flags(self):
         self.assertTrue(sys.flags)


More information about the Python-checkins mailing list