Skip to content

Commit

Permalink
bpo-45020: Add tests for the -X "frozen_modules" option. (gh-28997)
Browse files Browse the repository at this point in the history
We hadn't explicitly added any tests for this, so here they are.

https://bugs.python.org/issue45020
  • Loading branch information
ericsnowcurrently authored Oct 25, 2021
1 parent 2b8677a commit 6afb285
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 0 deletions.
15 changes: 15 additions & 0 deletions Lib/test/test_cmd_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,21 @@ def run_python(*args):
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
Expand Down
24 changes: 24 additions & 0 deletions Lib/test/test_embed.py
Original file line number Diff line number Diff line change
Expand Up @@ -1466,6 +1466,30 @@ def test_get_argc_argv(self):
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):
Expand Down
39 changes: 39 additions & 0 deletions Programs/_testembed.c
Original file line number Diff line number Diff line change
Expand Up @@ -1726,6 +1726,44 @@ static int test_get_argc_argv(void)
}


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
Expand Down Expand Up @@ -1912,6 +1950,7 @@ static struct TestCase TestCases[] = {
{"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},
Expand Down

0 comments on commit 6afb285

Please sign in to comment.