testreports.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. """Test cases for reports generated by mypy."""
  2. from __future__ import annotations
  3. import textwrap
  4. from mypy.report import CoberturaPackage, get_line_rate
  5. from mypy.test.helpers import Suite, assert_equal
  6. try:
  7. import lxml # type: ignore[import]
  8. except ImportError:
  9. lxml = None
  10. import pytest
  11. class CoberturaReportSuite(Suite):
  12. @pytest.mark.skipif(lxml is None, reason="Cannot import lxml. Is it installed?")
  13. def test_get_line_rate(self) -> None:
  14. assert_equal("1.0", get_line_rate(0, 0))
  15. assert_equal("0.3333", get_line_rate(1, 3))
  16. @pytest.mark.skipif(lxml is None, reason="Cannot import lxml. Is it installed?")
  17. def test_as_xml(self) -> None:
  18. import lxml.etree as etree # type: ignore[import]
  19. cobertura_package = CoberturaPackage("foobar")
  20. cobertura_package.covered_lines = 21
  21. cobertura_package.total_lines = 42
  22. child_package = CoberturaPackage("raz")
  23. child_package.covered_lines = 10
  24. child_package.total_lines = 10
  25. child_package.classes["class"] = etree.Element("class")
  26. cobertura_package.packages["raz"] = child_package
  27. expected_output = textwrap.dedent(
  28. """\
  29. <package complexity="1.0" name="foobar" branch-rate="0" line-rate="0.5000">
  30. <classes/>
  31. <packages>
  32. <package complexity="1.0" name="raz" branch-rate="0" line-rate="1.0000">
  33. <classes>
  34. <class/>
  35. </classes>
  36. </package>
  37. </packages>
  38. </package>
  39. """
  40. ).encode("ascii")
  41. assert_equal(
  42. expected_output, etree.tostring(cobertura_package.as_xml(), pretty_print=True)
  43. )