|
23 | 23 | from coverage.misc import import_local_file
|
24 | 24 |
|
25 | 25 | from tests.coveragetest import CoverageTest, TESTS_DIR, UsingModulesMixin
|
26 |
| -from tests.helpers import assert_count_equal, assert_coverage_warnings |
| 26 | +from tests.goldtest import contains, doesnt_contain |
| 27 | +from tests.helpers import arcz_to_arcs, assert_count_equal, assert_coverage_warnings |
27 | 28 | from tests.helpers import change_dir, nice_file, os_sep
|
28 | 29 |
|
29 | 30 | BAD_SQLITE_REGEX = r"file( is encrypted or)? is not a database"
|
@@ -1456,3 +1457,145 @@ def test_combine_parallel_data_keep(self):
|
1456 | 1457 | # After combining, the .coverage file & the original combined file should still be there.
|
1457 | 1458 | self.assert_exists(".coverage")
|
1458 | 1459 | self.assert_file_count(".coverage.*", 2)
|
| 1460 | + |
| 1461 | + |
| 1462 | +class ReportMapsPathsTest(CoverageTest): |
| 1463 | + """Check that reporting implicitly maps paths.""" |
| 1464 | + |
| 1465 | + def make_files(self, data, settings=False): |
| 1466 | + """Create the test files we need for line coverage.""" |
| 1467 | + src = """\ |
| 1468 | + if VER == 1: |
| 1469 | + print("line 2") |
| 1470 | + if VER == 2: |
| 1471 | + print("line 4") |
| 1472 | + if VER == 3: |
| 1473 | + print("line 6") |
| 1474 | + """ |
| 1475 | + self.make_file("src/program.py", src) |
| 1476 | + self.make_file("ver1/program.py", src) |
| 1477 | + self.make_file("ver2/program.py", src) |
| 1478 | + |
| 1479 | + if data == "line": |
| 1480 | + self.make_data_file( |
| 1481 | + lines={ |
| 1482 | + abs_file("ver1/program.py"): [1, 2, 3, 5], |
| 1483 | + abs_file("ver2/program.py"): [1, 3, 4, 5], |
| 1484 | + } |
| 1485 | + ) |
| 1486 | + else: |
| 1487 | + self.make_data_file( |
| 1488 | + arcs={ |
| 1489 | + abs_file("ver1/program.py"): arcz_to_arcs(".1 12 23 35 5."), |
| 1490 | + abs_file("ver2/program.py"): arcz_to_arcs(".1 13 34 45 5."), |
| 1491 | + } |
| 1492 | + ) |
| 1493 | + |
| 1494 | + if settings: |
| 1495 | + self.make_file(".coveragerc", """\ |
| 1496 | + [paths] |
| 1497 | + source = |
| 1498 | + src |
| 1499 | + ver1 |
| 1500 | + ver2 |
| 1501 | + """) |
| 1502 | + |
| 1503 | + def test_map_paths_during_line_report_without_setting(self): |
| 1504 | + self.make_files(data="line") |
| 1505 | + cov = coverage.Coverage() |
| 1506 | + cov.load() |
| 1507 | + cov.report(show_missing=True) |
| 1508 | + expected = textwrap.dedent(os_sep("""\ |
| 1509 | + Name Stmts Miss Cover Missing |
| 1510 | + ----------------------------------------------- |
| 1511 | + ver1/program.py 6 2 67% 4, 6 |
| 1512 | + ver2/program.py 6 2 67% 2, 6 |
| 1513 | + ----------------------------------------------- |
| 1514 | + TOTAL 12 4 67% |
| 1515 | + """)) |
| 1516 | + assert expected == self.stdout() |
| 1517 | + |
| 1518 | + def test_map_paths_during_line_report(self): |
| 1519 | + self.make_files(data="line", settings=True) |
| 1520 | + cov = coverage.Coverage() |
| 1521 | + cov.load() |
| 1522 | + cov.report(show_missing=True) |
| 1523 | + expected = textwrap.dedent(os_sep("""\ |
| 1524 | + Name Stmts Miss Cover Missing |
| 1525 | + ---------------------------------------------- |
| 1526 | + src/program.py 6 1 83% 6 |
| 1527 | + ---------------------------------------------- |
| 1528 | + TOTAL 6 1 83% |
| 1529 | + """)) |
| 1530 | + assert expected == self.stdout() |
| 1531 | + |
| 1532 | + def test_map_paths_during_branch_report_without_setting(self): |
| 1533 | + self.make_files(data="arcs") |
| 1534 | + cov = coverage.Coverage(branch=True) |
| 1535 | + cov.load() |
| 1536 | + cov.report(show_missing=True) |
| 1537 | + expected = textwrap.dedent(os_sep("""\ |
| 1538 | + Name Stmts Miss Branch BrPart Cover Missing |
| 1539 | + ------------------------------------------------------------- |
| 1540 | + ver1/program.py 6 2 6 3 58% 1->3, 4, 6 |
| 1541 | + ver2/program.py 6 2 6 3 58% 2, 3->5, 6 |
| 1542 | + ------------------------------------------------------------- |
| 1543 | + TOTAL 12 4 12 6 58% |
| 1544 | + """)) |
| 1545 | + assert expected == self.stdout() |
| 1546 | + |
| 1547 | + def test_map_paths_during_branch_report(self): |
| 1548 | + self.make_files(data="arcs", settings=True) |
| 1549 | + cov = coverage.Coverage(branch=True) |
| 1550 | + cov.load() |
| 1551 | + cov.report(show_missing=True) |
| 1552 | + expected = textwrap.dedent(os_sep("""\ |
| 1553 | + Name Stmts Miss Branch BrPart Cover Missing |
| 1554 | + ------------------------------------------------------------ |
| 1555 | + src/program.py 6 1 6 1 83% 6 |
| 1556 | + ------------------------------------------------------------ |
| 1557 | + TOTAL 6 1 6 1 83% |
| 1558 | + """)) |
| 1559 | + assert expected == self.stdout() |
| 1560 | + |
| 1561 | + def test_map_paths_during_annotate(self): |
| 1562 | + self.make_files(data="line", settings=True) |
| 1563 | + cov = coverage.Coverage() |
| 1564 | + cov.load() |
| 1565 | + cov.annotate() |
| 1566 | + self.assert_exists(os_sep("src/program.py,cover")) |
| 1567 | + self.assert_doesnt_exist(os_sep("ver1/program.py,cover")) |
| 1568 | + self.assert_doesnt_exist(os_sep("ver2/program.py,cover")) |
| 1569 | + |
| 1570 | + def test_map_paths_during_html_report(self): |
| 1571 | + self.make_files(data="line", settings=True) |
| 1572 | + cov = coverage.Coverage() |
| 1573 | + cov.load() |
| 1574 | + cov.html_report() |
| 1575 | + contains("htmlcov/index.html", os_sep("src/program.py")) |
| 1576 | + doesnt_contain("htmlcov/index.html", os_sep("ver1/program.py"), os_sep("ver2/program.py")) |
| 1577 | + |
| 1578 | + def test_map_paths_during_xml_report(self): |
| 1579 | + self.make_files(data="line", settings=True) |
| 1580 | + cov = coverage.Coverage() |
| 1581 | + cov.load() |
| 1582 | + cov.xml_report() |
| 1583 | + print(open("coverage.xml").read()) |
| 1584 | + contains("coverage.xml", os_sep("src/program.py")) |
| 1585 | + doesnt_contain("coverage.xml", os_sep("ver1/program.py"), os_sep("ver2/program.py")) |
| 1586 | + |
| 1587 | + def test_map_paths_during_json_report(self): |
| 1588 | + self.make_files(data="line", settings=True) |
| 1589 | + cov = coverage.Coverage() |
| 1590 | + cov.load() |
| 1591 | + cov.json_report() |
| 1592 | + contains("coverage.json", os_sep("src/program.py")) |
| 1593 | + doesnt_contain("coverage.json", os_sep("ver1/program.py"), os_sep("ver2/program.py")) |
| 1594 | + |
| 1595 | + def test_map_paths_during_lcov_report(self): |
| 1596 | + self.make_files(data="line", settings=True) |
| 1597 | + cov = coverage.Coverage() |
| 1598 | + cov.load() |
| 1599 | + cov.lcov_report() |
| 1600 | + contains("coverage.lcov", os_sep("src/program.py")) |
| 1601 | + doesnt_contain("coverage.lcov", os_sep("ver1/program.py"), os_sep("ver2/program.py")) |
0 commit comments