]> granicus.if.org Git - python/commitdiff
#11420: make test suite pass with -B/DONTWRITEBYTECODE set. Initial patch by Thomas...
authorEzio Melotti <ezio.melotti@gmail.com>
Sat, 16 Mar 2013 17:48:51 +0000 (19:48 +0200)
committerEzio Melotti <ezio.melotti@gmail.com>
Sat, 16 Mar 2013 17:48:51 +0000 (19:48 +0200)
Lib/distutils/tests/test_bdist_dumb.py
Lib/importlib/test/source/test_file_loader.py
Lib/test/test_imp.py
Lib/test/test_import.py
Lib/test/test_runpy.py
Misc/NEWS

index 1037d8216ec58db510f3c68f3a0a55b3f9362ba2..0ad32d421ecf64cde7d83f277b75026d9ece8b58 100644 (file)
@@ -88,9 +88,9 @@ class BuildDumbTestCase(support.TempdirManager,
             fp.close()
 
         contents = sorted(os.path.basename(fn) for fn in contents)
-        wanted = ['foo-0.1-py%s.%s.egg-info' % sys.version_info[:2],
-                  'foo.%s.pyc' % imp.get_tag(),
-                  'foo.py']
+        wanted = ['foo-0.1-py%s.%s.egg-info' % sys.version_info[:2], 'foo.py']
+        if not sys.dont_write_bytecode:
+            wanted.append('foo.%s.pyc' % imp.get_tag())
         self.assertEqual(contents, sorted(wanted))
 
 def test_suite():
index c7a7d8fbcae2d371c166f7a050c8e50844d6a3f6..b4d7e7dba9e9c584925e3d1a90ad377080bfd039 100644 (file)
@@ -127,7 +127,8 @@ class SimpleTest(unittest.TestCase):
         finally:
             os.unlink(file_path)
             pycache = os.path.dirname(imp.cache_from_source(file_path))
-            shutil.rmtree(pycache)
+            if os.path.exists(pycache):
+                shutil.rmtree(pycache)
 
     def test_timestamp_overflow(self):
         # When a modification timestamp is larger than 2**32, it should be
index 551ad1b85cc7373e56d86e5ad0b3dd091beb5d17..5df891539902221a3f4c4365e0aa59289febcaa8 100644 (file)
@@ -153,9 +153,11 @@ class ImportTests(unittest.TestCase):
             mod = imp.load_source(temp_mod_name, temp_mod_name + '.py')
             self.assertEqual(mod.a, 1)
 
-            mod = imp.load_compiled(
-                temp_mod_name, imp.cache_from_source(temp_mod_name + '.py'))
-            self.assertEqual(mod.a, 1)
+            if not sys.dont_write_bytecode:
+                mod = imp.load_compiled(
+                    temp_mod_name,
+                    imp.cache_from_source(temp_mod_name + '.py'))
+                self.assertEqual(mod.a, 1)
 
             if not os.path.exists(test_package_name):
                 os.mkdir(test_package_name)
index b10f350e1e9281a18ef8b7eef1d47e406e8ff919..1aa665a1b269d579b1d58e2bd6d44f9a170b833b 100644 (file)
@@ -20,6 +20,10 @@ from test.support import (
 from test import script_helper
 
 
+skip_if_dont_write_bytecode = unittest.skipIf(
+        sys.dont_write_bytecode,
+        "test meaningful only when writing bytecode")
+
 def _files(name):
     return (name + os.extsep + "py",
             name + os.extsep + "pyc",
@@ -109,6 +113,7 @@ class ImportTests(unittest.TestCase):
 
     @unittest.skipUnless(os.name == 'posix',
                          "test meaningful only on posix systems")
+    @skip_if_dont_write_bytecode
     def test_execute_bit_not_copied(self):
         # Issue 6070: under posix .pyc files got their execute bit set if
         # the .py file had the execute bit set, but they aren't executable.
@@ -133,6 +138,7 @@ class ImportTests(unittest.TestCase):
                 remove_files(TESTFN)
                 unload(TESTFN)
 
+    @skip_if_dont_write_bytecode
     def test_rewrite_pyc_with_read_only_source(self):
         # Issue 6074: a long time ago on posix, and more recently on Windows,
         # a read only source file resulted in a read only pyc file, which
@@ -299,6 +305,7 @@ class ImportTests(unittest.TestCase):
             remove_files(TESTFN)
             unload(TESTFN)
 
+    @skip_if_dont_write_bytecode
     def test_file_to_source(self):
         # check if __file__ points to the source file where available
         source = TESTFN + ".py"
@@ -619,6 +626,7 @@ class PycacheTests(unittest.TestCase):
         del sys.path[0]
         self._clean()
 
+    @skip_if_dont_write_bytecode
     def test_import_pyc_path(self):
         self.assertFalse(os.path.exists('__pycache__'))
         __import__(TESTFN)
@@ -631,6 +639,7 @@ class PycacheTests(unittest.TestCase):
                          "test meaningful only on posix systems")
     @unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0,
             "due to varying filesystem permission semantics (issue #11956)")
+    @skip_if_dont_write_bytecode
     def test_unwritable_directory(self):
         # When the umask causes the new __pycache__ directory to be
         # unwritable, the import still succeeds but no .pyc file is written.
@@ -640,6 +649,7 @@ class PycacheTests(unittest.TestCase):
         self.assertFalse(os.path.exists(os.path.join(
             '__pycache__', '{}.{}.pyc'.format(TESTFN, self.tag))))
 
+    @skip_if_dont_write_bytecode
     def test_missing_source(self):
         # With PEP 3147 cache layout, removing the source but leaving the pyc
         # file does not satisfy the import.
@@ -650,6 +660,7 @@ class PycacheTests(unittest.TestCase):
         forget(TESTFN)
         self.assertRaises(ImportError, __import__, TESTFN)
 
+    @skip_if_dont_write_bytecode
     def test_missing_source_legacy(self):
         # Like test_missing_source() except that for backward compatibility,
         # when the pyc file lives where the py file would have been (and named
@@ -670,6 +681,7 @@ class PycacheTests(unittest.TestCase):
         pyc_file = imp.cache_from_source(TESTFN + '.py')
         self.assertEqual(m.__cached__, os.path.join(os.curdir, pyc_file))
 
+    @skip_if_dont_write_bytecode
     def test___cached___legacy_pyc(self):
         # Like test___cached__() except that for backward compatibility,
         # when the pyc file lives where the py file would have been (and named
@@ -684,6 +696,7 @@ class PycacheTests(unittest.TestCase):
         self.assertEqual(m.__cached__,
                          os.path.join(os.curdir, os.path.relpath(pyc_file)))
 
+    @skip_if_dont_write_bytecode
     def test_package___cached__(self):
         # Like test___cached__ but for packages.
         def cleanup():
index 96d2bebbc44b8f2e971855e4eafa170d6e0aaa0c..6f0a840f3bb9d6dbbe5c945191ace39d1dcf8b03 100644 (file)
@@ -254,11 +254,12 @@ class RunModuleTestCase(unittest.TestCase, CodeExecutionMixin):
             self.check_code_execution(create_ns, expected_ns)
             __import__(mod_name)
             os.remove(mod_fname)
-            make_legacy_pyc(mod_fname)
-            unload(mod_name)  # In case loader caches paths
-            if verbose > 1: print("Running from compiled:", mod_name)
-            self._fix_ns_for_legacy_pyc(expected_ns, alter_sys)
-            self.check_code_execution(create_ns, expected_ns)
+            if not sys.dont_write_bytecode:
+                make_legacy_pyc(mod_fname)
+                unload(mod_name)  # In case loader caches paths
+                if verbose > 1: print("Running from compiled:", mod_name)
+                self._fix_ns_for_legacy_pyc(expected_ns, alter_sys)
+                self.check_code_execution(create_ns, expected_ns)
         finally:
             self._del_pkg(pkg_dir, depth, mod_name)
         if verbose > 1: print("Module executed successfully")
@@ -287,11 +288,12 @@ class RunModuleTestCase(unittest.TestCase, CodeExecutionMixin):
             self.check_code_execution(create_ns, expected_ns)
             __import__(mod_name)
             os.remove(mod_fname)
-            make_legacy_pyc(mod_fname)
-            unload(mod_name)  # In case loader caches paths
-            if verbose > 1: print("Running from compiled:", pkg_name)
-            self._fix_ns_for_legacy_pyc(expected_ns, alter_sys)
-            self.check_code_execution(create_ns, expected_ns)
+            if not sys.dont_write_bytecode:
+                make_legacy_pyc(mod_fname)
+                unload(mod_name)  # In case loader caches paths
+                if verbose > 1: print("Running from compiled:", pkg_name)
+                self._fix_ns_for_legacy_pyc(expected_ns, alter_sys)
+                self.check_code_execution(create_ns, expected_ns)
         finally:
             self._del_pkg(pkg_dir, depth, pkg_name)
         if verbose > 1: print("Package executed successfully")
@@ -345,15 +347,16 @@ from ..uncle.cousin import nephew
             del d1 # Ensure __loader__ entry doesn't keep file open
             __import__(mod_name)
             os.remove(mod_fname)
-            make_legacy_pyc(mod_fname)
-            unload(mod_name)  # In case the loader caches paths
-            if verbose > 1: print("Running from compiled:", mod_name)
-            d2 = run_module(mod_name, run_name=run_name) # Read from bytecode
-            self.assertEqual(d2["__name__"], expected_name)
-            self.assertEqual(d2["__package__"], pkg_name)
-            self.assertIn("sibling", d2)
-            self.assertIn("nephew", d2)
-            del d2 # Ensure __loader__ entry doesn't keep file open
+            if not sys.dont_write_bytecode:
+                make_legacy_pyc(mod_fname)
+                unload(mod_name)  # In case the loader caches paths
+                if verbose > 1: print("Running from compiled:", mod_name)
+                d2 = run_module(mod_name, run_name=run_name) # Read from bytecode
+                self.assertEqual(d2["__name__"], expected_name)
+                self.assertEqual(d2["__package__"], pkg_name)
+                self.assertIn("sibling", d2)
+                self.assertIn("nephew", d2)
+                del d2 # Ensure __loader__ entry doesn't keep file open
         finally:
             self._del_pkg(pkg_dir, depth, mod_name)
         if verbose > 1: print("Module executed successfully")
@@ -472,9 +475,10 @@ class RunPathTestCase(unittest.TestCase, CodeExecutionMixin):
             script_name = self._make_test_script(script_dir, mod_name)
             compiled_name = py_compile.compile(script_name, doraise=True)
             os.remove(script_name)
-            legacy_pyc = make_legacy_pyc(script_name)
-            self._check_script(script_dir, "<run_path>", legacy_pyc,
-                               script_dir)
+            if not sys.dont_write_bytecode:
+                legacy_pyc = make_legacy_pyc(script_name)
+                self._check_script(script_dir, "<run_path>", legacy_pyc,
+                                   script_dir)
 
     def test_directory_error(self):
         with temp_dir() as script_dir:
index d2d399eead347330ef7bea9b530b554a9b9ddb0e..6bde852f075ed1644c4761b4531f9ca8912e9c39 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -964,6 +964,9 @@ Extension Modules
 Tests
 -----
 
+- Issue #11420: make test suite pass with -B/DONTWRITEBYTECODE set.
+  Initial patch by Thomas Wouters.
+
 - Issue #10652: make tcl/tk tests run after __all__ test, patch by
   Zachary Ware.