| import imp |
| import sys |
| |
| import unittest |
| |
| # Note: |
| # In Python 3.x, this test case is in Lib/test/test_importlib/test_util.py |
| |
| class MagicNumberTests(unittest.TestCase): |
| """ |
| Test release compatibility issues relating to precompiled bytecode |
| """ |
| @unittest.skipUnless( |
| sys.version_info.releaselevel in ('candidate', 'final'), |
| 'only applies to candidate or final python release levels' |
| ) |
| def test_magic_number(self): |
| """ |
| Each python minor release should generally have a MAGIC_NUMBER |
| that does not change once the release reaches candidate status. |
| |
| Once a release reaches candidate status, the value of the constant |
| EXPECTED_MAGIC_NUMBER in this test should be changed. |
| This test will then check that the actual MAGIC_NUMBER matches |
| the expected value for the release. |
| |
| In exceptional cases, it may be required to change the MAGIC_NUMBER |
| for a maintenance release. In this case the change should be |
| discussed in python-dev. If a change is required, community |
| stakeholders such as OS package maintainers must be notified |
| in advance. Such exceptional releases will then require an |
| adjustment to this test case. |
| """ |
| EXPECTED_MAGIC_NUMBER = 62211 |
| raw_magic = imp.get_magic() |
| actual = (ord(raw_magic[1]) << 8) + ord(raw_magic[0]) |
| |
| msg = ( |
| "To avoid breaking backwards compatibility with cached bytecode " |
| "files that can't be automatically regenerated by the current " |
| "user, candidate and final releases require the current " |
| "importlib.util.MAGIC_NUMBER to match the expected " |
| "magic number in this test. Set the expected " |
| "magic number in this test to the current MAGIC_NUMBER to " |
| "continue with the release.\n\n" |
| "Changing the MAGIC_NUMBER for a maintenance release " |
| "requires discussion in python-dev and notification of " |
| "community stakeholders." |
| ) |
| self.assertEqual(EXPECTED_MAGIC_NUMBER, actual)#, msg) |
| |
| |
| def test_main(): |
| from test.support import run_unittest |
| run_unittest(MagicNumberTests) |
| |
| if __name__ == '__main__': |
| test_main() |