bpo-36301: test_embed separates pre_config by vstinner · Pull Request #12540 · python/cpython
'utf8_mode': 0, 'coerce_c_locale': 0, 'coerce_c_locale_warn': 0,
'pycache_prefix': None, 'program_name': './_testembed', 'argv': [""],
'isolated': 0, 'site_import': 1, 'bytes_warning': 0, 'inspect': 0,
def get_expected_config(self, expected, env): def get_expected_config(self, expected, expected_preconfig, env): expected = dict(self.DEFAULT_CORE_CONFIG, **expected)
code = textwrap.dedent('''
def check_pre_config(self, config, expected): pre_config = dict(config['pre_config']) core_config = dict(config['core_config']) self.assertEqual(pre_config, expected)
def check_core_config(self, config, expected): core_config = dict(config['core_config']) for key in self.UNTESTED_CORE_CONFIG: core_config.pop(key, None) self.assertEqual(core_config, expected)
def check_global_config(self, config): pre_config = config['pre_config'] core_config = config['core_config']
expected = dict(self.DEFAULT_GLOBAL_CONFIG)
self.assertEqual(config['global_config'], expected)
def check_config(self, testname, expected): def check_config(self, testname, expected_config, expected_preconfig): env = dict(os.environ) # Remove PYTHON* environment variables to get deterministic environment for key in list(env):
expected = self.get_expected_config(expected, env) self.check_core_config(config, expected) expected_preconfig = dict(self.DEFAULT_PRE_CONFIG, **expected_preconfig) expected_config = self.get_expected_config(expected_config, expected_preconfig, env)
self.check_core_config(config, expected_config) self.check_pre_config(config, expected_preconfig) self.check_main_config(config) self.check_global_config(config)
def test_init_default_config(self): self.check_config("init_default_config", {}) self.check_config("init_default_config", {}, {})
def test_init_global_config(self): preconfig = { 'utf8_mode': 1, } config = { 'program_name': './globalvar', 'site_import': 0,
'utf8_mode': 1, 'stdio_encoding': 'utf-8', 'stdio_errors': 'surrogateescape', 'filesystem_encoding': 'utf-8', 'filesystem_errors': self.UTF8_MODE_ERRORS, 'user_site_directory': 0, '_frozen': 1, } self.check_config("init_global_config", config) self.check_config("init_global_config", config, preconfig)
def test_init_from_config(self): preconfig = { 'allocator': 'malloc', 'utf8_mode': 1, } config = { 'install_signal_handlers': 0, 'use_hash_seed': 1, 'hash_seed': 123, 'allocator': 'malloc', 'tracemalloc': 2, 'import_time': 1, 'show_ref_count': 1, 'show_alloc_count': 1, 'malloc_stats': 1,
'utf8_mode': 1, 'stdio_encoding': 'iso8859-1', 'stdio_errors': 'replace', 'filesystem_encoding': 'utf-8',
INIT_ENV_PRECONFIG = { 'allocator': 'malloc', 'utf8_mode': 1, } INIT_ENV_CONFIG = { 'use_hash_seed': 1, 'hash_seed': 42, 'allocator': 'malloc', 'tracemalloc': 2, 'import_time': 1, 'malloc_stats': 1, 'utf8_mode': 1, 'filesystem_encoding': 'utf-8', 'filesystem_errors': UTF8_MODE_ERRORS, 'inspect': 1,
def test_init_env(self): self.check_config("init_env", self.INIT_ENV_CONFIG) self.check_config("init_env", self.INIT_ENV_CONFIG, self.INIT_ENV_PRECONFIG)
def test_init_env_dev_mode(self): config = dict(self.INIT_ENV_CONFIG, preconfig = dict(self.INIT_ENV_PRECONFIG, allocator='debug', dev_mode=1) self.check_config("init_env_dev_mode", config)
def test_init_env_dev_mode(self): config = dict(self.INIT_ENV_CONFIG, allocator='malloc', dev_mode=1) self.check_config("init_env_dev_mode_alloc", config) self.check_config("init_env_dev_mode", config, preconfig)
def test_init_env_dev_mode(self): preconfig = dict(self.INIT_ENV_PRECONFIG, allocator='malloc', dev_mode=1) config = dict(self.INIT_ENV_CONFIG) self.check_config("init_env_dev_mode_alloc", config, preconfig)
def test_init_dev_mode(self): config = { preconfig = { 'allocator': 'debug', 'dev_mode': 1, } config = { 'faulthandler': 1, 'allocator': 'debug', } self.check_config("init_dev_mode", config) self.check_config("init_dev_mode", config, preconfig)
def test_init_isolated(self): config = { preconfig = { 'isolated': 1, 'use_environment': 0, } config = { 'user_site_directory': 0, } self.check_config("init_isolated", config) self.check_config("init_isolated", config, preconfig)
if __name__ == "__main__":