aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@redhat.com>2019-05-15 02:12:48 +0200
committerGitHub <noreply@github.com>2019-05-15 02:12:48 +0200
commit5eb8b07f87c66a9ca54fcb90737753ce76a3054d (patch)
tree3bbd691fc50c62d26b388c6ea6306b1e178bbf60
parentbpo-36801: Temporarily fix regression in writer.drain() (#13330) (diff)
downloadcpython-5eb8b07f87c66a9ca54fcb90737753ce76a3054d.tar.gz
cpython-5eb8b07f87c66a9ca54fcb90737753ce76a3054d.tar.bz2
cpython-5eb8b07f87c66a9ca54fcb90737753ce76a3054d.zip
bpo-36763: InitConfigTests tests all core config (GH-13331)
Remove UNTESTED_CORE_CONFIG from test_embed.InitConfigTests: all core config fields are now tested! Changes: * Test also dll_path on Windows * Add run_main_config unit test: test config using _Py_RunMain().
-rw-r--r--Lib/test/test_embed.py45
-rw-r--r--Programs/_testembed.c22
2 files changed, 48 insertions, 19 deletions
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index ca06f3c3dbc..8f40e9fdb18 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -269,12 +269,6 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
maxDiff = 4096
UTF8_MODE_ERRORS = ('surrogatepass' if MS_WINDOWS else 'surrogateescape')
- # core config
- UNTESTED_CORE_CONFIG = (
- # FIXME: untested core configuration variables
- 'dll_path',
- 'module_search_paths',
- )
# Mark config which should be get by get_default_config()
GET_DEFAULT_CONFIG = object()
DEFAULT_PRE_CONFIG = {
@@ -324,6 +318,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'base_prefix': GET_DEFAULT_CONFIG,
'exec_prefix': GET_DEFAULT_CONFIG,
'base_exec_prefix': GET_DEFAULT_CONFIG,
+ 'module_search_paths': GET_DEFAULT_CONFIG,
'site_import': 1,
'bytes_warning': 0,
@@ -354,6 +349,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'legacy_windows_fs_encoding': 0,
})
DEFAULT_CORE_CONFIG.update({
+ 'dll_path': GET_DEFAULT_CONFIG,
'legacy_windows_stdio': 0,
})
@@ -410,7 +406,10 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
code = textwrap.dedent('''
import json
import sys
+ import _testinternalcapi
+ configs = _testinternalcapi.get_configs()
+ core_config = configs['core_config']
data = {
'stdio_encoding': sys.stdout.encoding,
'stdio_errors': sys.stdout.errors,
@@ -420,8 +419,10 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'base_exec_prefix': sys.base_exec_prefix,
'filesystem_encoding': sys.getfilesystemencoding(),
'filesystem_errors': sys.getfilesystemencodeerrors(),
- 'module_search_paths': sys.path,
+ 'module_search_paths': core_config['module_search_paths'],
}
+ if sys.platform == 'win32':
+ data['dll_path'] = core_config['dll_path']
data = json.dumps(data)
data = data.encode('utf-8')
@@ -431,7 +432,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
# Use -S to not import the site module: get the proper configuration
# when test_embed is run from a venv (bpo-35313)
- args = (sys.executable, '-S', '-c', code)
+ args = [sys.executable, '-S', '-c', code]
env = dict(env)
if not expected['isolated']:
env['PYTHONCOERCECLOCALE'] = '0'
@@ -462,7 +463,9 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
for key, value in expected.items():
if value is self.GET_DEFAULT_CONFIG:
expected[key] = config[key]
- expected['module_search_paths'] = config['module_search_paths']
+
+ if add_path is not None:
+ expected['module_search_paths'].append(add_path)
return expected
def check_pre_config(self, config, expected):
@@ -470,16 +473,8 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
core_config = dict(config['core_config'])
self.assertEqual(pre_config, expected)
- def check_core_config(self, config, expected, add_path=None):
+ def check_core_config(self, config, expected):
core_config = dict(config['core_config'])
- if add_path is not None:
- paths = [*expected['module_search_paths'], add_path]
- if not paths[0]:
- del paths[0]
- self.assertEqual(core_config['module_search_paths'], paths)
- for key in self.UNTESTED_CORE_CONFIG:
- core_config.pop(key, None)
- expected.pop(key, None)
self.assertEqual(core_config, expected)
def check_global_config(self, config):
@@ -529,7 +524,7 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
expected_preconfig[key] = expected_config[key]
self.check_pre_config(config, expected_preconfig)
- self.check_core_config(config, expected_config, add_path)
+ self.check_core_config(config, expected_config)
self.check_global_config(config)
def test_init_default_config(self):
@@ -693,6 +688,18 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
self.check_config("init_read_set", core_config, preconfig,
add_path="init_read_set_path")
+ def test_run_main_config(self):
+ preconfig = {}
+ code = ('import _testinternalcapi, json; '
+ 'print(json.dumps(_testinternalcapi.get_configs()))')
+ core_config = {
+ 'argv': ['-c', 'arg2'],
+ 'program': 'python3',
+ 'program_name': './python3',
+ 'run_command': code + '\n',
+ }
+ self.check_config("run_main_config", core_config, preconfig)
+
if __name__ == "__main__":
unittest.main()
diff --git a/Programs/_testembed.c b/Programs/_testembed.c
index 73b37c5f1f3..2560bfc62bb 100644
--- a/Programs/_testembed.c
+++ b/Programs/_testembed.c
@@ -747,6 +747,27 @@ static int test_run_main(void)
}
+static int test_run_main_config(void)
+{
+ _PyCoreConfig config = _PyCoreConfig_INIT;
+
+ wchar_t *argv[] = {L"python3", L"-c",
+ (L"import _testinternalcapi, json; "
+ L"print(json.dumps(_testinternalcapi.get_configs()))"),
+ L"arg2"};
+ config.argv.length = Py_ARRAY_LENGTH(argv);
+ config.argv.items = argv;
+ config.program_name = L"./python3";
+
+ _PyInitError err = _Py_InitializeFromConfig(&config);
+ if (_Py_INIT_FAILED(err)) {
+ _Py_ExitInitError(err);
+ }
+
+ return _Py_RunMain();
+}
+
+
/* *********************************************************
* List of test cases and the function that implements it.
*
@@ -785,6 +806,7 @@ static struct TestCase TestCases[] = {
{ "preinit_isolated2", test_preinit_isolated2 },
{ "init_read_set", test_init_read_set },
{ "run_main", test_run_main },
+ { "run_main_config", test_run_main_config },
{ NULL, NULL }
};