[3.7] bpo-34247: Fix Python 3.7 initialization (#8659) · python/cpython@0c90d6f (original) (raw)
`@@ -9,7 +9,7 @@
`
9
9
`import sys
`
10
10
``
11
11
``
12
``
`-
class EmbeddingTests(unittest.TestCase):
`
``
12
`+
class EmbeddingTestsMixin:
`
13
13
`def setUp(self):
`
14
14
`here = os.path.abspath(file)
`
15
15
`basepath = os.path.dirname(os.path.dirname(os.path.dirname(here)))
`
`@@ -110,6 +110,8 @@ def run_repeated_init_and_subinterpreters(self):
`
110
110
`yield current_run
`
111
111
`current_run = []
`
112
112
``
``
113
+
``
114
`+
class EmbeddingTests(EmbeddingTestsMixin, unittest.TestCase):
`
113
115
`def test_subinterps_main(self):
`
114
116
`for run in self.run_repeated_init_and_subinterpreters():
`
115
117
`main = run[0]
`
`@@ -247,5 +249,149 @@ def test_initialize_pymain(self):
`
247
249
`self.assertEqual(err, '')
`
248
250
``
249
251
``
``
252
`+
class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
`
``
253
`+
maxDiff = 4096
`
``
254
`+
DEFAULT_CONFIG = {
`
``
255
`+
'install_signal_handlers': 1,
`
``
256
`+
'Py_IgnoreEnvironmentFlag': 0,
`
``
257
`+
'use_hash_seed': 0,
`
``
258
`+
'hash_seed': 0,
`
``
259
`+
'allocator': '(null)',
`
``
260
`+
'dev_mode': 0,
`
``
261
`+
'faulthandler': 0,
`
``
262
`+
'tracemalloc': 0,
`
``
263
`+
'import_time': 0,
`
``
264
`+
'show_ref_count': 0,
`
``
265
`+
'show_alloc_count': 0,
`
``
266
`+
'dump_refs': 0,
`
``
267
`+
'malloc_stats': 0,
`
``
268
`+
'utf8_mode': 0,
`
``
269
+
``
270
`+
'coerce_c_locale': 0,
`
``
271
`+
'coerce_c_locale_warn': 0,
`
``
272
+
``
273
`+
'program_name': './_testembed',
`
``
274
`+
'argc': 0,
`
``
275
`+
'argv': '[]',
`
``
276
`+
'program': '(null)',
`
``
277
+
``
278
`+
'Py_IsolatedFlag': 0,
`
``
279
`+
'Py_NoSiteFlag': 0,
`
``
280
`+
'Py_BytesWarningFlag': 0,
`
``
281
`+
'Py_InspectFlag': 0,
`
``
282
`+
'Py_InteractiveFlag': 0,
`
``
283
`+
'Py_OptimizeFlag': 0,
`
``
284
`+
'Py_DebugFlag': 0,
`
``
285
`+
'Py_DontWriteBytecodeFlag': 0,
`
``
286
`+
'Py_VerboseFlag': 0,
`
``
287
`+
'Py_QuietFlag': 0,
`
``
288
`+
'Py_NoUserSiteDirectory': 0,
`
``
289
`+
'Py_UnbufferedStdioFlag': 0,
`
``
290
+
``
291
`+
'_disable_importlib': 0,
`
``
292
`+
'Py_FrozenFlag': 0,
`
``
293
`+
}
`
``
294
+
``
295
`+
def check_config(self, testname, expected):
`
``
296
`+
env = dict(os.environ)
`
``
297
`+
for key in list(env):
`
``
298
`+
if key.startswith('PYTHON'):
`
``
299
`+
del env[key]
`
``
300
`+
Disable C locale coercion and UTF-8 mode to not depend
`
``
301
`+
on the current locale
`
``
302
`+
env['PYTHONCOERCECLOCALE'] = '0'
`
``
303
`+
env['PYTHONUTF8'] = '0'
`
``
304
`+
out, err = self.run_embedded_interpreter(testname, env=env)
`
``
305
`+
Ignore err
`
``
306
+
``
307
`+
expected = dict(self.DEFAULT_CONFIG, **expected)
`
``
308
`+
for key, value in expected.items():
`
``
309
`+
expected[key] = str(value)
`
``
310
+
``
311
`+
config = {}
`
``
312
`+
for line in out.splitlines():
`
``
313
`+
key, value = line.split(' = ', 1)
`
``
314
`+
config[key] = value
`
``
315
`+
self.assertEqual(config, expected)
`
``
316
+
``
317
`+
def test_init_default_config(self):
`
``
318
`+
self.check_config("init_default_config", {})
`
``
319
+
``
320
`+
def test_init_global_config(self):
`
``
321
`+
config = {
`
``
322
`+
'program_name': './globalvar',
`
``
323
`+
'Py_NoSiteFlag': 1,
`
``
324
`+
'Py_BytesWarningFlag': 1,
`
``
325
`+
'Py_InspectFlag': 1,
`
``
326
`+
'Py_InteractiveFlag': 1,
`
``
327
`+
'Py_OptimizeFlag': 2,
`
``
328
`+
'Py_DontWriteBytecodeFlag': 1,
`
``
329
`+
'Py_VerboseFlag': 1,
`
``
330
`+
'Py_QuietFlag': 1,
`
``
331
`+
'Py_UnbufferedStdioFlag': 1,
`
``
332
`+
'utf8_mode': 1,
`
``
333
`+
'Py_NoUserSiteDirectory': 1,
`
``
334
`+
'Py_FrozenFlag': 1,
`
``
335
`+
}
`
``
336
`+
self.check_config("init_global_config", config)
`
``
337
+
``
338
`+
def test_init_from_config(self):
`
``
339
`+
config = {
`
``
340
`+
'install_signal_handlers': 0,
`
``
341
`+
'use_hash_seed': 1,
`
``
342
`+
'hash_seed': 123,
`
``
343
`+
'allocator': 'malloc_debug',
`
``
344
`+
'tracemalloc': 2,
`
``
345
`+
'import_time': 1,
`
``
346
`+
'show_ref_count': 1,
`
``
347
`+
'show_alloc_count': 1,
`
``
348
`+
'malloc_stats': 1,
`
``
349
+
``
350
`+
'utf8_mode': 1,
`
``
351
+
``
352
`+
'program_name': './conf_program_name',
`
``
353
`+
'program': 'conf_program',
`
``
354
+
``
355
`+
'faulthandler': 1,
`
``
356
`+
}
`
``
357
`+
self.check_config("init_from_config", config)
`
``
358
+
``
359
`+
def test_init_env(self):
`
``
360
`+
config = {
`
``
361
`+
'use_hash_seed': 1,
`
``
362
`+
'hash_seed': 42,
`
``
363
`+
'allocator': 'malloc_debug',
`
``
364
`+
'tracemalloc': 2,
`
``
365
`+
'import_time': 1,
`
``
366
`+
'malloc_stats': 1,
`
``
367
`+
'utf8_mode': 1,
`
``
368
`+
'Py_InspectFlag': 1,
`
``
369
`+
'Py_OptimizeFlag': 2,
`
``
370
`+
'Py_DontWriteBytecodeFlag': 1,
`
``
371
`+
'Py_VerboseFlag': 1,
`
``
372
`+
'Py_UnbufferedStdioFlag': 1,
`
``
373
`+
'Py_NoUserSiteDirectory': 1,
`
``
374
`+
'faulthandler': 1,
`
``
375
`+
'dev_mode': 1,
`
``
376
`+
}
`
``
377
`+
self.check_config("init_env", config)
`
``
378
+
``
379
`+
def test_init_dev_mode(self):
`
``
380
`+
config = {
`
``
381
`+
'dev_mode': 1,
`
``
382
`+
'faulthandler': 1,
`
``
383
`+
'allocator': 'debug',
`
``
384
`+
}
`
``
385
`+
self.check_config("init_dev_mode", config)
`
``
386
+
``
387
`+
def test_init_isolated(self):
`
``
388
`+
config = {
`
``
389
`+
'Py_IsolatedFlag': 1,
`
``
390
`+
'Py_IgnoreEnvironmentFlag': 1,
`
``
391
`+
'Py_NoUserSiteDirectory': 1,
`
``
392
`+
}
`
``
393
`+
self.check_config("init_isolated", config)
`
``
394
+
``
395
+
250
396
`if name == "main":
`
251
397
`unittest.main()
`