|  | 
| 26 | 26 | import coverage | 
| 27 | 27 | from coverage import env | 
| 28 | 28 | from coverage.data import line_counts | 
| 29 |  | -from coverage.exceptions import ConfigError | 
| 30 | 29 | from coverage.files import abs_file, python_reported_file | 
| 31 | 30 | 
 | 
| 32 | 31 | from tests import testenv | 
| 33 | 32 | from tests.coveragetest import CoverageTest, TESTS_DIR | 
| 34 |  | -from tests.helpers import change_dir, re_line, re_lines, re_lines_text | 
|  | 33 | +from tests.helpers import change_dir, re_lines, re_lines_text | 
| 35 | 34 | 
 | 
| 36 | 35 | 
 | 
| 37 | 36 | class ProcessTest(CoverageTest): | 
| @@ -1316,141 +1315,6 @@ def test_report_99p9_is_not_ok(self) -> None: | 
| 1316 | 1315 |         assert expected == self.last_line_squeezed(out) | 
| 1317 | 1316 | 
 | 
| 1318 | 1317 | 
 | 
| 1319 |  | -class CoverageCoreTest(CoverageTest): | 
| 1320 |  | -    """Test that cores are chosen correctly.""" | 
| 1321 |  | - | 
| 1322 |  | -    # This doesn't test failure modes, only successful requests. | 
| 1323 |  | -    try: | 
| 1324 |  | -        from coverage.tracer import CTracer | 
| 1325 |  | - | 
| 1326 |  | -        has_ctracer = True | 
| 1327 |  | -    except ImportError: | 
| 1328 |  | -        has_ctracer = False | 
| 1329 |  | - | 
| 1330 |  | -    def setUp(self) -> None: | 
| 1331 |  | -        super().setUp() | 
| 1332 |  | -        # Clean out the environment variable the test suite uses to control the | 
| 1333 |  | -        # core it cares about. | 
| 1334 |  | -        self.del_environ("COVERAGE_CORE") | 
| 1335 |  | -        self.make_file("numbers.py", "print(123, 456)") | 
| 1336 |  | - | 
| 1337 |  | -    def test_core_default(self) -> None: | 
| 1338 |  | -        out = self.run_command("coverage run --debug=sys numbers.py") | 
| 1339 |  | -        assert out.endswith("123 456\n") | 
| 1340 |  | -        core = re_line(r" core:", out).strip() | 
| 1341 |  | -        warns = re_lines(r"\(no-ctracer\)", out) | 
| 1342 |  | -        if env.SYSMON_DEFAULT: | 
| 1343 |  | -            assert core == "core: SysMonitor" | 
| 1344 |  | -            assert not warns | 
| 1345 |  | -        elif self.has_ctracer: | 
| 1346 |  | -            assert core == "core: CTracer" | 
| 1347 |  | -            assert not warns | 
| 1348 |  | -        else: | 
| 1349 |  | -            assert core == "core: PyTracer" | 
| 1350 |  | -            assert bool(warns) == env.CPYTHON | 
| 1351 |  | - | 
| 1352 |  | -    @pytest.mark.skipif(not has_ctracer, reason="No CTracer to request") | 
| 1353 |  | -    def test_core_request_ctrace(self) -> None: | 
| 1354 |  | -        self.set_environ("COVERAGE_CORE", "ctrace") | 
| 1355 |  | -        out = self.run_command("coverage run --debug=sys numbers.py") | 
| 1356 |  | -        assert out.endswith("123 456\n") | 
| 1357 |  | -        core = re_line(r" core:", out).strip() | 
| 1358 |  | -        assert core == "core: CTracer" | 
| 1359 |  | - | 
| 1360 |  | -    @pytest.mark.skipif(has_ctracer, reason="CTracer needs to be missing") | 
| 1361 |  | -    def test_core_request_ctrace_but_missing(self) -> None: | 
| 1362 |  | -        self.make_file(".coveragerc", "[run]\ncore = ctrace\n") | 
| 1363 |  | -        out = self.run_command("coverage run --debug=sys,pybehave numbers.py") | 
| 1364 |  | -        assert out.endswith("123 456\n") | 
| 1365 |  | -        core = re_line(r" core:", out).strip() | 
| 1366 |  | -        assert core == "core: PyTracer" | 
| 1367 |  | -        warns = re_lines(r"\(no-ctracer\)", out) | 
| 1368 |  | -        assert bool(warns) == env.SHIPPING_WHEELS | 
| 1369 |  | - | 
| 1370 |  | -    def test_core_request_pytrace(self) -> None: | 
| 1371 |  | -        self.set_environ("COVERAGE_CORE", "pytrace") | 
| 1372 |  | -        out = self.run_command("coverage run --debug=sys numbers.py") | 
| 1373 |  | -        assert out.endswith("123 456\n") | 
| 1374 |  | -        core = re_line(r" core:", out).strip() | 
| 1375 |  | -        assert core == "core: PyTracer" | 
| 1376 |  | - | 
| 1377 |  | -    def test_core_request_sysmon(self) -> None: | 
| 1378 |  | -        self.set_environ("COVERAGE_CORE", "sysmon") | 
| 1379 |  | -        out = self.run_command("coverage run --debug=sys numbers.py") | 
| 1380 |  | -        assert out.endswith("123 456\n") | 
| 1381 |  | -        core = re_line(r" core:", out).strip() | 
| 1382 |  | -        warns = re_lines(r"\(no-sysmon\)", out) | 
| 1383 |  | -        if env.PYBEHAVIOR.pep669: | 
| 1384 |  | -            assert core == "core: SysMonitor" | 
| 1385 |  | -            assert not warns | 
| 1386 |  | -        else: | 
| 1387 |  | -            assert core in ["core: CTracer", "core: PyTracer"] | 
| 1388 |  | -            assert warns | 
| 1389 |  | - | 
| 1390 |  | -    def test_core_request_sysmon_no_dyncontext(self) -> None: | 
| 1391 |  | -        # Use config core= for this test just to be different. | 
| 1392 |  | -        self.make_file( | 
| 1393 |  | -            ".coveragerc", | 
| 1394 |  | -            """\ | 
| 1395 |  | -            [run] | 
| 1396 |  | -            core = sysmon | 
| 1397 |  | -            dynamic_context = test_function | 
| 1398 |  | -            """, | 
| 1399 |  | -        ) | 
| 1400 |  | -        out = self.run_command("coverage run --debug=sys numbers.py") | 
| 1401 |  | -        assert out.endswith("123 456\n") | 
| 1402 |  | -        core = re_line(r" core:", out).strip() | 
| 1403 |  | -        assert core in ["core: CTracer", "core: PyTracer"] | 
| 1404 |  | -        warns = re_lines(r"\(no-sysmon\)", out) | 
| 1405 |  | -        assert len(warns) == 1 | 
| 1406 |  | -        if env.PYBEHAVIOR.pep669: | 
| 1407 |  | -            assert ( | 
| 1408 |  | -                "sys.monitoring doesn't yet support dynamic contexts, using default core" | 
| 1409 |  | -                in warns[0] | 
| 1410 |  | -            ) | 
| 1411 |  | -        else: | 
| 1412 |  | -            assert "sys.monitoring isn't available in this version, using default core" in warns[0] | 
| 1413 |  | - | 
| 1414 |  | -    def test_core_request_sysmon_no_branches(self) -> None: | 
| 1415 |  | -        # Use config core= for this test just to be different. | 
| 1416 |  | -        self.make_file( | 
| 1417 |  | -            ".coveragerc", | 
| 1418 |  | -            """\ | 
| 1419 |  | -            [run] | 
| 1420 |  | -            core = sysmon | 
| 1421 |  | -            branch = True | 
| 1422 |  | -            """, | 
| 1423 |  | -        ) | 
| 1424 |  | -        out = self.run_command("coverage run --debug=sys numbers.py") | 
| 1425 |  | -        assert out.endswith("123 456\n") | 
| 1426 |  | -        core = re_line(r" core:", out).strip() | 
| 1427 |  | -        warns = re_lines(r"\(no-sysmon\)", out) | 
| 1428 |  | -        if env.PYBEHAVIOR.branch_right_left: | 
| 1429 |  | -            assert core == "core: SysMonitor" | 
| 1430 |  | -            assert not warns | 
| 1431 |  | -        else: | 
| 1432 |  | -            assert core in ["core: CTracer", "core: PyTracer"] | 
| 1433 |  | -            assert len(warns) == 1 | 
| 1434 |  | -            if env.PYBEHAVIOR.pep669: | 
| 1435 |  | -                assert ( | 
| 1436 |  | -                    "sys.monitoring can't measure branches in this version, using default core" | 
| 1437 |  | -                    in warns[0] | 
| 1438 |  | -                ) | 
| 1439 |  | -            else: | 
| 1440 |  | -                assert ( | 
| 1441 |  | -                    "sys.monitoring isn't available in this version, using default core" in warns[0] | 
| 1442 |  | -                ) | 
| 1443 |  | - | 
| 1444 |  | -    def test_core_request_nosuchcore(self) -> None: | 
| 1445 |  | -        # Test the coverage misconfigurations in-process with pytest. Running a | 
| 1446 |  | -        # subprocess doesn't capture the metacov in the subprocess because | 
| 1447 |  | -        # coverage is misconfigured. | 
| 1448 |  | -        self.set_environ("COVERAGE_CORE", "nosuchcore") | 
| 1449 |  | -        cov = coverage.Coverage() | 
| 1450 |  | -        with pytest.raises(ConfigError, match=r"Unknown core value: 'nosuchcore'"): | 
| 1451 |  | -            self.start_import_stop(cov, "numbers") | 
| 1452 |  | - | 
| 1453 |  | - | 
| 1454 | 1318 | class FailUnderNoFilesTest(CoverageTest): | 
| 1455 | 1319 |     """Test that nothing to report results in an error exit status.""" | 
| 1456 | 1320 | 
 | 
|  | 
0 commit comments