@@ -268,13 +268,19 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
268
268
)
269
269
# Mark config which should be get by get_default_config()
270
270
GET_DEFAULT_CONFIG = object ()
271
+ DEFAULT_PRE_CONFIG = {
272
+ 'allocator' : None ,
273
+ 'coerce_c_locale' : 0 ,
274
+ 'coerce_c_locale_warn' : 0 ,
275
+ 'dev_mode' : 0 ,
276
+ 'isolated' : 0 ,
277
+ 'use_environment' : 1 ,
278
+ 'utf8_mode' : 0 ,
279
+ }
271
280
DEFAULT_CORE_CONFIG = {
272
281
'install_signal_handlers' : 1 ,
273
- 'use_environment' : 1 ,
274
282
'use_hash_seed' : 0 ,
275
283
'hash_seed' : 0 ,
276
- 'allocator' : None ,
277
- 'dev_mode' : 0 ,
278
284
'faulthandler' : 0 ,
279
285
'tracemalloc' : 0 ,
280
286
'import_time' : 0 ,
@@ -286,10 +292,6 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
286
292
'filesystem_encoding' : GET_DEFAULT_CONFIG ,
287
293
'filesystem_errors' : GET_DEFAULT_CONFIG ,
288
294
289
- 'utf8_mode' : 0 ,
290
- 'coerce_c_locale' : 0 ,
291
- 'coerce_c_locale_warn' : 0 ,
292
-
293
295
'pycache_prefix' : None ,
294
296
'program_name' : './_testembed' ,
295
297
'argv' : ["" ],
@@ -306,7 +308,6 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
306
308
'exec_prefix' : GET_DEFAULT_CONFIG ,
307
309
'base_exec_prefix' : GET_DEFAULT_CONFIG ,
308
310
309
- 'isolated' : 0 ,
310
311
'site_import' : 1 ,
311
312
'bytes_warning' : 0 ,
312
313
'inspect' : 0 ,
@@ -332,8 +333,10 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
332
333
'_frozen' : 0 ,
333
334
}
334
335
if MS_WINDOWS :
335
- DEFAULT_CORE_CONFIG .update ({
336
+ DEFAULT_PRE_CONFIG .update ({
336
337
'legacy_windows_fs_encoding' : 0 ,
338
+ })
339
+ DEFAULT_CORE_CONFIG .update ({
337
340
'legacy_windows_stdio' : 0 ,
338
341
})
339
342
@@ -359,6 +362,11 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
359
362
'Py_HashRandomizationFlag' : 1 ,
360
363
'_Py_HasFileSystemDefaultEncodeErrors' : 0 ,
361
364
}
365
+ COPY_GLOBAL_PRE_CONFIG = [
366
+ ('Py_IgnoreEnvironmentFlag' , 'use_environment' , True ),
367
+ ('Py_IsolatedFlag' , 'isolated' ),
368
+ ('Py_UTF8Mode' , 'utf8_mode' ),
369
+ ]
362
370
COPY_GLOBAL_CONFIG = [
363
371
# Copy core config to global config for expected values
364
372
# True means that the core config value is inverted (0 => 1 and 1 => 0)
@@ -368,21 +376,20 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
368
376
('Py_FileSystemDefaultEncodeErrors' , 'filesystem_errors' ),
369
377
('Py_FileSystemDefaultEncoding' , 'filesystem_encoding' ),
370
378
('Py_FrozenFlag' , '_frozen' ),
371
- ('Py_IgnoreEnvironmentFlag' , 'use_environment' , True ),
372
379
('Py_InspectFlag' , 'inspect' ),
373
380
('Py_InteractiveFlag' , 'interactive' ),
374
- ('Py_IsolatedFlag' , 'isolated' ),
375
381
('Py_NoSiteFlag' , 'site_import' , True ),
376
382
('Py_NoUserSiteDirectory' , 'user_site_directory' , True ),
377
383
('Py_OptimizeFlag' , 'optimization_level' ),
378
384
('Py_QuietFlag' , 'quiet' ),
379
- ('Py_UTF8Mode' , 'utf8_mode' ),
380
385
('Py_UnbufferedStdioFlag' , 'buffered_stdio' , True ),
381
386
('Py_VerboseFlag' , 'verbose' ),
382
387
]
383
388
if MS_WINDOWS :
384
- COPY_GLOBAL_CONFIG .extend ((
389
+ COPY_GLOBAL_PRE_CONFIG .extend ((
385
390
('Py_LegacyWindowsFSEncodingFlag' , 'legacy_windows_fs_encoding' ),
391
+ ))
392
+ COPY_GLOBAL_CONFIG .extend ((
386
393
('Py_LegacyWindowsStdioFlag' , 'legacy_windows_stdio' ),
387
394
))
388
395
@@ -408,7 +415,7 @@ def check_main_config(self, config):
408
415
expected ['xoptions' ] = self .main_xoptions (core_config ['xoptions' ])
409
416
self .assertEqual (main_config , expected )
410
417
411
- def get_expected_config (self , expected , env ):
418
+ def get_expected_config (self , expected , expected_preconfig , env ):
412
419
expected = dict (self .DEFAULT_CORE_CONFIG , ** expected )
413
420
414
421
code = textwrap .dedent ('''
@@ -436,7 +443,7 @@ def get_expected_config(self, expected, env):
436
443
# when test_embed is run from a venv (bpo-35313)
437
444
args = (sys .executable , '-S' , '-c' , code )
438
445
env = dict (env )
439
- if not expected ['isolated' ]:
446
+ if not expected_preconfig ['isolated' ]:
440
447
env ['PYTHONCOERCECLOCALE' ] = '0'
441
448
env ['PYTHONUTF8' ] = '0'
442
449
proc = subprocess .run (args , env = env ,
@@ -453,13 +460,19 @@ def get_expected_config(self, expected, env):
453
460
expected [key ] = config [key ]
454
461
return expected
455
462
463
+ def check_pre_config (self , config , expected ):
464
+ pre_config = dict (config ['pre_config' ])
465
+ core_config = dict (config ['core_config' ])
466
+ self .assertEqual (pre_config , expected )
467
+
456
468
def check_core_config (self , config , expected ):
457
469
core_config = dict (config ['core_config' ])
458
470
for key in self .UNTESTED_CORE_CONFIG :
459
471
core_config .pop (key , None )
460
472
self .assertEqual (core_config , expected )
461
473
462
474
def check_global_config (self , config ):
475
+ pre_config = config ['pre_config' ]
463
476
core_config = config ['core_config' ]
464
477
465
478
expected = dict (self .DEFAULT_GLOBAL_CONFIG )
@@ -470,10 +483,17 @@ def check_global_config(self, config):
470
483
else :
471
484
global_key , core_key = item
472
485
expected [global_key ] = core_config [core_key ]
486
+ for item in self .COPY_GLOBAL_PRE_CONFIG :
487
+ if len (item ) == 3 :
488
+ global_key , core_key , opposite = item
489
+ expected [global_key ] = 0 if pre_config [core_key ] else 1
490
+ else :
491
+ global_key , core_key = item
492
+ expected [global_key ] = pre_config [core_key ]
473
493
474
494
self .assertEqual (config ['global_config' ], expected )
475
495
476
- def check_config (self , testname , expected ):
496
+ def check_config (self , testname , expected_config , expected_preconfig ):
477
497
env = dict (os .environ )
478
498
# Remove PYTHON* environment variables to get deterministic environment
479
499
for key in list (env ):
@@ -488,15 +508,21 @@ def check_config(self, testname, expected):
488
508
# Ignore err
489
509
config = json .loads (out )
490
510
491
- expected = self .get_expected_config (expected , env )
492
- self .check_core_config (config , expected )
511
+ expected_preconfig = dict (self .DEFAULT_PRE_CONFIG , ** expected_preconfig )
512
+ expected_config = self .get_expected_config (expected_config , expected_preconfig , env )
513
+
514
+ self .check_core_config (config , expected_config )
515
+ self .check_pre_config (config , expected_preconfig )
493
516
self .check_main_config (config )
494
517
self .check_global_config (config )
495
518
496
519
def test_init_default_config (self ):
497
- self .check_config ("init_default_config" , {})
520
+ self .check_config ("init_default_config" , {}, {} )
498
521
499
522
def test_init_global_config (self ):
523
+ preconfig = {
524
+ 'utf8_mode' : 1 ,
525
+ }
500
526
config = {
501
527
'program_name' : './globalvar' ,
502
528
'site_import' : 0 ,
@@ -509,29 +535,30 @@ def test_init_global_config(self):
509
535
'quiet' : 1 ,
510
536
'buffered_stdio' : 0 ,
511
537
512
- 'utf8_mode' : 1 ,
513
538
'stdio_encoding' : 'utf-8' ,
514
539
'stdio_errors' : 'surrogateescape' ,
515
540
'filesystem_encoding' : 'utf-8' ,
516
541
'filesystem_errors' : self .UTF8_MODE_ERRORS ,
517
542
'user_site_directory' : 0 ,
518
543
'_frozen' : 1 ,
519
544
}
520
- self .check_config ("init_global_config" , config )
545
+ self .check_config ("init_global_config" , config , preconfig )
521
546
522
547
def test_init_from_config (self ):
548
+ preconfig = {
549
+ 'allocator' : 'malloc' ,
550
+ 'utf8_mode' : 1 ,
551
+ }
523
552
config = {
524
553
'install_signal_handlers' : 0 ,
525
554
'use_hash_seed' : 1 ,
526
555
'hash_seed' : 123 ,
527
- 'allocator' : 'malloc' ,
528
556
'tracemalloc' : 2 ,
529
557
'import_time' : 1 ,
530
558
'show_ref_count' : 1 ,
531
559
'show_alloc_count' : 1 ,
532
560
'malloc_stats' : 1 ,
533
561
534
- 'utf8_mode' : 1 ,
535
562
'stdio_encoding' : 'iso8859-1' ,
536
563
'stdio_errors' : 'replace' ,
537
564
'filesystem_encoding' : 'utf-8' ,
@@ -559,16 +586,18 @@ def test_init_from_config(self):
559
586
'_check_hash_pycs_mode' : 'always' ,
560
587
'_frozen' : 1 ,
561
588
}
562
- self .check_config ("init_from_config" , config )
589
+ self .check_config ("init_from_config" , config , preconfig )
563
590
591
+ INIT_ENV_PRECONFIG = {
592
+ 'allocator' : 'malloc' ,
593
+ 'utf8_mode' : 1 ,
594
+ }
564
595
INIT_ENV_CONFIG = {
565
596
'use_hash_seed' : 1 ,
566
597
'hash_seed' : 42 ,
567
- 'allocator' : 'malloc' ,
568
598
'tracemalloc' : 2 ,
569
599
'import_time' : 1 ,
570
600
'malloc_stats' : 1 ,
571
- 'utf8_mode' : 1 ,
572
601
'filesystem_encoding' : 'utf-8' ,
573
602
'filesystem_errors' : UTF8_MODE_ERRORS ,
574
603
'inspect' : 1 ,
@@ -584,35 +613,42 @@ def test_init_from_config(self):
584
613
}
585
614
586
615
def test_init_env (self ):
587
- self .check_config ("init_env" , self .INIT_ENV_CONFIG )
616
+ self .check_config ("init_env" , self .INIT_ENV_CONFIG , self . INIT_ENV_PRECONFIG )
588
617
589
618
def test_init_env_dev_mode (self ):
590
- config = dict (self .INIT_ENV_CONFIG ,
619
+ preconfig = dict (self .INIT_ENV_PRECONFIG ,
591
620
allocator = 'debug' ,
592
621
dev_mode = 1 )
593
- self .check_config ("init_env_dev_mode" , config )
594
-
595
- def test_init_env_dev_mode (self ):
596
622
config = dict (self .INIT_ENV_CONFIG ,
597
- allocator = 'malloc' ,
598
623
dev_mode = 1 )
599
- self .check_config ("init_env_dev_mode_alloc" , config )
624
+ self .check_config ("init_env_dev_mode" , config , preconfig )
625
+
626
+ def test_init_env_dev_mode (self ):
627
+ preconfig = dict (self .INIT_ENV_PRECONFIG ,
628
+ allocator = 'malloc' ,
629
+ dev_mode = 1 )
630
+ config = dict (self .INIT_ENV_CONFIG )
631
+ self .check_config ("init_env_dev_mode_alloc" , config , preconfig )
600
632
601
633
def test_init_dev_mode (self ):
602
- config = {
634
+ preconfig = {
635
+ 'allocator' : 'debug' ,
603
636
'dev_mode' : 1 ,
637
+ }
638
+ config = {
604
639
'faulthandler' : 1 ,
605
- 'allocator' : 'debug' ,
606
640
}
607
- self .check_config ("init_dev_mode" , config )
641
+ self .check_config ("init_dev_mode" , config , preconfig )
608
642
609
643
def test_init_isolated (self ):
610
- config = {
644
+ preconfig = {
611
645
'isolated' : 1 ,
612
646
'use_environment' : 0 ,
647
+ }
648
+ config = {
613
649
'user_site_directory' : 0 ,
614
650
}
615
- self .check_config ("init_isolated" , config )
651
+ self .check_config ("init_isolated" , config , preconfig )
616
652
617
653
618
654
if __name__ == "__main__" :
0 commit comments