We hadn't explicitly added any tests for this, so here they are.
https://bugs.python.org/issue45020
else:
self.assertEqual(err, b'')
+ def test_xoption_frozen_modules(self):
+ tests = {
+ ('=on', 'FrozenImporter'),
+ ('=off', 'SourceFileLoader'),
+ ('=', 'FrozenImporter'),
+ ('', 'FrozenImporter'),
+ }
+ for raw, expected in tests:
+ cmd = ['-X', f'frozen_modules{raw}',
+ #'-c', 'import os; print(os.__spec__.loader.__name__, end="")']
+ '-c', 'import os; print(os.__spec__.loader, end="")']
+ with self.subTest(raw):
+ res = assert_python_ok(*cmd)
+ self.assertRegex(res.out.decode('utf-8'), expected)
+
def test_run_module(self):
# Test expected operation of the '-m' switch
# Switch needs an argument
self.run_embedded_interpreter("test_get_argc_argv")
# ignore output
+ def test_init_use_frozen_modules(self):
+ tests = {
+ ('=on', 1),
+ ('=off', 0),
+ ('=', 1),
+ ('', 1),
+ }
+ for raw, expected in tests:
+ optval = f'frozen_modules{raw}'
+ config = {
+ 'parse_argv': 2,
+ 'argv': ['-c'],
+ 'orig_argv': ['./argv0', '-X', optval, '-c', 'pass'],
+ 'program_name': './argv0',
+ 'run_command': 'pass\n',
+ 'use_environment': 1,
+ 'xoptions': [optval],
+ 'use_frozen_modules': expected,
+ }
+ env = {'TESTFROZEN': raw[1:]} if raw else None
+ with self.subTest(repr(raw)):
+ self.check_all_configs("test_init_use_frozen_modules", config,
+ api=API_PYTHON, env=env)
+
class SetConfigTests(unittest.TestCase):
def test_set_config(self):
}
+static int check_use_frozen_modules(const char *rawval)
+{
+ wchar_t optval[100];
+ if (rawval == NULL) {
+ wcscpy(optval, L"frozen_modules");
+ }
+ else if (swprintf(optval, 100, L"frozen_modules=%s", rawval) < 0) {
+ error("rawval is too long");
+ return -1;
+ }
+
+ PyConfig config;
+ PyConfig_InitPythonConfig(&config);
+
+ config.parse_argv = 1;
+
+ wchar_t* argv[] = {
+ L"./argv0",
+ L"-X",
+ optval,
+ L"-c",
+ L"pass",
+ };
+ config_set_argv(&config, Py_ARRAY_LENGTH(argv), argv);
+ init_from_config_clear(&config);
+
+ dump_config();
+ Py_Finalize();
+ return 0;
+}
+
+static int test_init_use_frozen_modules(void)
+{
+ const char *envvar = getenv("TESTFROZEN");
+ return check_use_frozen_modules(envvar);
+}
+
+
static int test_unicode_id_init(void)
{
// bpo-42882: Test that _PyUnicode_FromId() works
{"test_run_main", test_run_main},
{"test_run_main_loop", test_run_main_loop},
{"test_get_argc_argv", test_get_argc_argv},
+ {"test_init_use_frozen_modules", test_init_use_frozen_modules},
// Audit
{"test_open_code_hook", test_open_code_hook},