@@ -508,14 +508,18 @@ def test_sys_flags_set(self):
508508 with self .subTest (envar_value = value ):
509509 assert_python_ok ('-c' , code , ** env_vars )
510510
511- def run_xdev (self , * args , check_exitcode = True ):
511+ def run_xdev (self , * args , check_exitcode = True , xdev = True ):
512512 env = dict (os .environ )
513513 env .pop ('PYTHONWARNINGS' , None )
514+ env .pop ('PYTHONDEVMODE' , None )
514515 # Force malloc() to disable the debug hooks which are enabled
515516 # by default for Python compiled in debug mode
516517 env ['PYTHONMALLOC' ] = 'malloc'
517518
518- args = (sys .executable , '-X' , 'dev' , * args )
519+ if xdev :
520+ args = (sys .executable , '-X' , 'dev' , * args )
521+ else :
522+ args = (sys .executable , * args )
519523 proc = subprocess .run (args ,
520524 stdout = subprocess .PIPE ,
521525 stderr = subprocess .STDOUT ,
@@ -526,6 +530,14 @@ def run_xdev(self, *args, check_exitcode=True):
526530 return proc .stdout .rstrip ()
527531
528532 def test_xdev (self ):
533+ # sys.flags.dev_mode
534+ code = "import sys; print(sys.flags.dev_mode)"
535+ out = self .run_xdev ("-c" , code , xdev = False )
536+ self .assertEqual (out , "False" )
537+ out = self .run_xdev ("-c" , code )
538+ self .assertEqual (out , "True" )
539+
540+ # Warnings
529541 code = ("import sys, warnings; "
530542 "print(' '.join('%s::%s' % (f[0], f[2].__name__) "
531543 "for f in warnings.filters))" )
@@ -555,6 +567,7 @@ def test_xdev(self):
555567 "default::ResourceWarning "
556568 "default::Warning" )
557569
570+ # Memory allocator debug hooks
558571 try :
559572 import _testcapi
560573 except ImportError :
@@ -569,6 +582,7 @@ def test_xdev(self):
569582 alloc_name = "malloc_debug"
570583 self .assertEqual (out , alloc_name )
571584
585+ # Faulthandler
572586 try :
573587 import faulthandler
574588 except ImportError :
@@ -581,6 +595,7 @@ def test_xdev(self):
581595 def check_pythonmalloc (self , env_var , name ):
582596 code = 'import _testcapi; print(_testcapi.pymem_getallocatorsname())'
583597 env = dict (os .environ )
598+ env .pop ('PYTHONDEVMODE' , None )
584599 if env_var is not None :
585600 env ['PYTHONMALLOC' ] = env_var
586601 else :
@@ -621,6 +636,24 @@ def test_pythonmalloc(self):
621636 with self .subTest (env_var = env_var , name = name ):
622637 self .check_pythonmalloc (env_var , name )
623638
639+ def test_pythondevmode_env (self ):
640+ # Test the PYTHONDEVMODE environment variable
641+ code = "import sys; print(sys.flags.dev_mode)"
642+ env = dict (os .environ )
643+ env .pop ('PYTHONDEVMODE' , None )
644+ args = (sys .executable , '-c' , code )
645+
646+ proc = subprocess .run (args , stdout = subprocess .PIPE ,
647+ universal_newlines = True , env = env )
648+ self .assertEqual (proc .stdout .rstrip (), 'False' )
649+ self .assertEqual (proc .returncode , 0 , proc )
650+
651+ env ['PYTHONDEVMODE' ] = '1'
652+ proc = subprocess .run (args , stdout = subprocess .PIPE ,
653+ universal_newlines = True , env = env )
654+ self .assertEqual (proc .stdout .rstrip (), 'True' )
655+ self .assertEqual (proc .returncode , 0 , proc )
656+
624657
625658class IgnoreEnvironmentTest (unittest .TestCase ):
626659
0 commit comments