summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_compileall.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_compileall.py')
-rw-r--r--Lib/test/test_compileall.py50
1 files changed, 44 insertions, 6 deletions
diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py
index 38d7b99..bf2a2c4 100644
--- a/Lib/test/test_compileall.py
+++ b/Lib/test/test_compileall.py
@@ -22,7 +22,11 @@ except ImportError:
from test import support
from test.support import script_helper
-class CompileallTests(unittest.TestCase):
+from .test_py_compile import without_source_date_epoch
+from .test_py_compile import SourceDateEpochTestMeta
+
+
+class CompileallTestsBase:
def setUp(self):
self.directory = tempfile.mkdtemp()
@@ -46,7 +50,7 @@ class CompileallTests(unittest.TestCase):
with open(self.bad_source_path, 'w') as file:
file.write('x (\n')
- def data(self):
+ def timestamp_metadata(self):
with open(self.bc_path, 'rb') as file:
data = file.read(12)
mtime = int(os.stat(self.source_path).st_mtime)
@@ -57,16 +61,18 @@ class CompileallTests(unittest.TestCase):
def recreation_check(self, metadata):
"""Check that compileall recreates bytecode when the new metadata is
used."""
+ if os.environ.get('SOURCE_DATE_EPOCH'):
+ raise unittest.SkipTest('SOURCE_DATE_EPOCH is set')
py_compile.compile(self.source_path)
- self.assertEqual(*self.data())
+ self.assertEqual(*self.timestamp_metadata())
with open(self.bc_path, 'rb') as file:
bc = file.read()[len(metadata):]
with open(self.bc_path, 'wb') as file:
file.write(metadata)
file.write(bc)
- self.assertNotEqual(*self.data())
+ self.assertNotEqual(*self.timestamp_metadata())
compileall.compile_dir(self.directory, force=False, quiet=True)
- self.assertTrue(*self.data())
+ self.assertTrue(*self.timestamp_metadata())
def test_mtime(self):
# Test a change in mtime leads to a new .pyc.
@@ -189,6 +195,21 @@ class CompileallTests(unittest.TestCase):
compileall.compile_dir(self.directory, quiet=True, workers=5)
self.assertTrue(compile_file_mock.called)
+
+class CompileallTestsWithSourceEpoch(CompileallTestsBase,
+ unittest.TestCase,
+ metaclass=SourceDateEpochTestMeta,
+ source_date_epoch=True):
+ pass
+
+
+class CompileallTestsWithoutSourceEpoch(CompileallTestsBase,
+ unittest.TestCase,
+ metaclass=SourceDateEpochTestMeta,
+ source_date_epoch=False):
+ pass
+
+
class EncodingTest(unittest.TestCase):
"""Issue 6716: compileall should escape source code when printing errors
to stdout."""
@@ -212,7 +233,7 @@ class EncodingTest(unittest.TestCase):
sys.stdout = orig_stdout
-class CommandLineTests(unittest.TestCase):
+class CommandLineTestsBase:
"""Test compileall's CLI."""
@classmethod
@@ -285,6 +306,7 @@ class CommandLineTests(unittest.TestCase):
self.assertNotCompiled(self.initfn)
self.assertNotCompiled(self.barfn)
+ @without_source_date_epoch # timestamp invalidation test
def test_no_args_respects_force_flag(self):
self._skip_if_sys_path_not_writable()
bazfn = script_helper.make_script(self.directory, 'baz', '')
@@ -353,6 +375,7 @@ class CommandLineTests(unittest.TestCase):
self.assertTrue(os.path.exists(self.pkgdir_cachedir))
self.assertFalse(os.path.exists(cachecachedir))
+ @without_source_date_epoch # timestamp invalidation test
def test_force(self):
self.assertRunOK('-q', self.pkgdir)
pycpath = importlib.util.cache_from_source(self.barfn)
@@ -556,5 +579,20 @@ class CommandLineTests(unittest.TestCase):
self.assertEqual(compile_dir.call_args[-1]['workers'], None)
+class CommmandLineTestsWithSourceEpoch(CommandLineTestsBase,
+ unittest.TestCase,
+ metaclass=SourceDateEpochTestMeta,
+ source_date_epoch=True):
+ pass
+
+
+class CommmandLineTestsNoSourceEpoch(CommandLineTestsBase,
+ unittest.TestCase,
+ metaclass=SourceDateEpochTestMeta,
+ source_date_epoch=False):
+ pass
+
+
+
if __name__ == "__main__":
unittest.main()