basic test of the frozen module source is in pythonfrozen c the pythonfrozen c source code contains a marshalled python module and therefore depends on the marshal format as well as the bytecode format if those formats have been changed then frozen c needs to be updated the testimportlib also tests this module but because those tests are much more complicated it might be unclear why they are failing invalid marshalled data in frozen c could case the interpreter to crash when hello is imported import importlib machinery import sys import unittest from test support import capturedstdout importhelper class testfrozenunittest testcase def testfrozenself name hello if name in sys modules del sys modulesname with importhelper frozenmodules import hello with capturedstdout as out hello main self assertequalout getvalue hello world n def testfrozensubmoduleinunfrozenpackageself with importhelper cleanimport phello phello spam with importhelper frozenmodulesenabledfalse import phello with importhelper frozenmodulesenabledtrue import phello spam as spam self assertisspam phello spam self assertisnotphello spec loader importlib machinery frozenimporter self assertisspam spec loader importlib machinery frozenimporter def testunfrozensubmoduleinfrozenpackageself with importhelper cleanimport phello phello spam with importhelper frozenmodulesenabledtrue import phello with importhelper frozenmodulesenabledfalse import phello spam as spam self assertisspam phello spam self assertisphello spec loader importlib machinery frozenimporter self assertisnotspam spec loader importlib machinery frozenimporter if name main unittest main the python frozen c source code contains a marshalled python module and therefore depends on the marshal format as well as the bytecode format if those formats have been changed then frozen c needs to be updated the test_importlib also tests this module but because those tests are much more complicated it might be unclear why they are failing invalid marshalled data in frozen c could case the interpreter to crash when __hello__ is imported
import importlib.machinery
import sys
import unittest
from test.support import captured_stdout, import_helper


class TestFrozen(unittest.TestCase):
    def test_frozen(self):
        name = '__hello__'
        if name in sys.modules:
            del sys.modules[name]
        with import_helper.frozen_modules():
            import __hello__
        with captured_stdout() as out:
            __hello__.main()
        self.assertEqual(out.getvalue(), 'Hello world!\n')

    def test_frozen_submodule_in_unfrozen_package(self):
        with import_helper.CleanImport('__phello__', '__phello__.spam'):
            with import_helper.frozen_modules(enabled=False):
                import __phello__
            with import_helper.frozen_modules(enabled=True):
                import __phello__.spam as spam
        self.assertIs(spam, __phello__.spam)
        self.assertIsNot(__phello__.__spec__.loader,
                         importlib.machinery.FrozenImporter)
        self.assertIs(spam.__spec__.loader,
                      importlib.machinery.FrozenImporter)

    def test_unfrozen_submodule_in_frozen_package(self):
        with import_helper.CleanImport('__phello__', '__phello__.spam'):
            with import_helper.frozen_modules(enabled=True):
                import __phello__
            with import_helper.frozen_modules(enabled=False):
                import __phello__.spam as spam
        self.assertIs(spam, __phello__.spam)
        self.assertIs(__phello__.__spec__.loader,
                      importlib.machinery.FrozenImporter)
        self.assertIsNot(spam.__spec__.loader,
                         importlib.machinery.FrozenImporter)


if __name__ == '__main__':
    unittest.main()