@@ -1326,9 +1326,14 @@ class CoverageCoreTest(CoverageTest):
13261326 except ImportError :
13271327 has_ctracer = False
13281328
1329- def test_core_default (self ) -> None :
1329+ def setUp (self ) -> None :
1330+ super ().setUp ()
1331+ # Clean out the environment variable the test suite uses to control the
1332+ # core it cares about.
13301333 self .del_environ ("COVERAGE_CORE" )
13311334 self .make_file ("numbers.py" , "print(123, 456)" )
1335+
1336+ def test_core_default (self ) -> None :
13321337 out = self .run_command ("coverage run --debug=sys numbers.py" )
13331338 assert out .endswith ("123 456\n " )
13341339 core = re_line (r" core:" , out ).strip ()
@@ -1346,17 +1351,14 @@ def test_core_default(self) -> None:
13461351 @pytest .mark .skipif (not has_ctracer , reason = "No CTracer to request" )
13471352 def test_core_request_ctrace (self ) -> None :
13481353 self .set_environ ("COVERAGE_CORE" , "ctrace" )
1349- self .make_file ("numbers.py" , "print(123, 456)" )
13501354 out = self .run_command ("coverage run --debug=sys numbers.py" )
13511355 assert out .endswith ("123 456\n " )
13521356 core = re_line (r" core:" , out ).strip ()
13531357 assert core == "core: CTracer"
13541358
13551359 @pytest .mark .skipif (has_ctracer , reason = "CTracer needs to be missing" )
13561360 def test_core_request_ctrace_but_missing (self ) -> None :
1357- self .del_environ ("COVERAGE_CORE" )
13581361 self .make_file (".coveragerc" , "[run]\n core = ctrace\n " )
1359- self .make_file ("numbers.py" , "print(123, 456)" )
13601362 out = self .run_command ("coverage run --debug=sys,pybehave numbers.py" )
13611363 assert out .endswith ("123 456\n " )
13621364 core = re_line (r" core:" , out ).strip ()
@@ -1366,15 +1368,13 @@ def test_core_request_ctrace_but_missing(self) -> None:
13661368
13671369 def test_core_request_pytrace (self ) -> None :
13681370 self .set_environ ("COVERAGE_CORE" , "pytrace" )
1369- self .make_file ("numbers.py" , "print(123, 456)" )
13701371 out = self .run_command ("coverage run --debug=sys numbers.py" )
13711372 assert out .endswith ("123 456\n " )
13721373 core = re_line (r" core:" , out ).strip ()
13731374 assert core == "core: PyTracer"
13741375
13751376 def test_core_request_sysmon (self ) -> None :
13761377 self .set_environ ("COVERAGE_CORE" , "sysmon" )
1377- self .make_file ("numbers.py" , "print(123, 456)" )
13781378 out = self .run_command ("coverage run --debug=sys numbers.py" )
13791379 assert out .endswith ("123 456\n " )
13801380 core = re_line (r" core:" , out ).strip ()
@@ -1386,9 +1386,62 @@ def test_core_request_sysmon(self) -> None:
13861386 assert core in ["core: CTracer" , "core: PyTracer" ]
13871387 assert warns
13881388
1389+ def test_core_request_sysmon_no_dyncontext (self ) -> None :
1390+ # Use config core= for this test just to be different.
1391+ self .make_file (
1392+ ".coveragerc" ,
1393+ """\
1394+ [run]
1395+ core = sysmon
1396+ dynamic_context = test_function
1397+ """ ,
1398+ )
1399+ out = self .run_command ("coverage run --debug=sys numbers.py" )
1400+ assert out .endswith ("123 456\n " )
1401+ core = re_line (r" core:" , out ).strip ()
1402+ assert core in ["core: CTracer" , "core: PyTracer" ]
1403+ warns = re_lines (r"\(no-sysmon\)" , out )
1404+ assert len (warns ) == 1
1405+ if env .PYBEHAVIOR .pep669 :
1406+ assert (
1407+ "sys.monitoring doesn't yet support dynamic contexts, using default core"
1408+ in warns [0 ]
1409+ )
1410+ else :
1411+ assert "sys.monitoring isn't available in this version, using default core" in warns [0 ]
1412+
1413+ def test_core_request_sysmon_no_branches (self ) -> None :
1414+ # Use config core= for this test just to be different.
1415+ self .make_file (
1416+ ".coveragerc" ,
1417+ """\
1418+ [run]
1419+ core = sysmon
1420+ branch = True
1421+ """ ,
1422+ )
1423+ out = self .run_command ("coverage run --debug=sys numbers.py" )
1424+ assert out .endswith ("123 456\n " )
1425+ core = re_line (r" core:" , out ).strip ()
1426+ warns = re_lines (r"\(no-sysmon\)" , out )
1427+ if env .PYBEHAVIOR .branch_right_left :
1428+ assert core == "core: SysMonitor"
1429+ assert not warns
1430+ else :
1431+ assert core in ["core: CTracer" , "core: PyTracer" ]
1432+ assert len (warns ) == 1
1433+ if env .PYBEHAVIOR .pep669 :
1434+ assert (
1435+ "sys.monitoring can't measure branches in this version, using default core"
1436+ in warns [0 ]
1437+ )
1438+ else :
1439+ assert (
1440+ "sys.monitoring isn't available in this version, using default core" in warns [0 ]
1441+ )
1442+
13891443 def test_core_request_nosuchcore (self ) -> None :
13901444 self .set_environ ("COVERAGE_CORE" , "nosuchcore" )
1391- self .make_file ("numbers.py" , "print(123, 456)" )
13921445 out = self .run_command ("coverage run numbers.py" , status = 1 )
13931446 assert "Unknown core value: 'nosuchcore'\n " in out
13941447 assert "123 456" not in out
0 commit comments