diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2021-11-20 18:46:18 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2021-11-20 19:36:58 -0500 |
commit | 7345085c3983f5f7d05f64da1af8e43da3dc5639 (patch) | |
tree | 1bd9d3338bf0a3df09da86b5b874c1d9c5997f2d | |
parent | e2c8f9c7bcf42b9210adbdb28b073fdda14be0d3 (diff) | |
download | python-coveragepy-git-7345085c3983f5f7d05f64da1af8e43da3dc5639.tar.gz |
refactor(test): move unicode handling tests to individual test files
Eight fewer sub-processes
-rw-r--r-- | tests/test_html.py | 27 | ||||
-rw-r--r-- | tests/test_process.py | 85 | ||||
-rw-r--r-- | tests/test_summary.py | 17 | ||||
-rw-r--r-- | tests/test_xml.py | 43 |
4 files changed, 87 insertions, 85 deletions
diff --git a/tests/test_html.py b/tests/test_html.py index 622f2d2f..cb222270 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -1031,6 +1031,33 @@ assert len(math) == 18 '<span class="str">"db40,dd00: x󠄀"</span>', ) + def test_accented_dot_py(self): + # Make a file with a non-ascii character in the filename. + self.make_file("h\xe2t.py", "print('accented')") + self.make_data_file(lines={abs_file("h\xe2t.py"): [1]}) + cov = coverage.Coverage() + cov.load() + cov.html_report() + self.assert_exists("htmlcov/h\xe2t_py.html") + with open("htmlcov/index.html") as indexf: + index = indexf.read() + assert '<a href="hât_py.html">hât.py</a>' in index + + def test_accented_directory(self): + # Make a file with a non-ascii character in the directory name. + self.make_file("\xe2/accented.py", "print('accented')") + self.make_data_file(lines={abs_file("\xe2/accented.py"): [1]}) + + # The HTML report uses ascii-encoded HTML entities. + cov = coverage.Coverage() + cov.load() + cov.html_report() + self.assert_exists("htmlcov/d_5786906b6f0ffeb4_accented_py.html") + with open("htmlcov/index.html") as indexf: + index = indexf.read() + expected = '<a href="d_5786906b6f0ffeb4_accented_py.html">â%saccented.py</a>' + assert expected % os.sep in index + class HtmlWithContextsTest(HtmlTestHelpers, CoverageTest): """Tests of the HTML reports with shown contexts.""" diff --git a/tests/test_process.py b/tests/test_process.py index c2339c0a..0cbce427 100644 --- a/tests/test_process.py +++ b/tests/test_process.py @@ -12,7 +12,6 @@ import sys import sysconfig import textwrap import time -from xml.etree import ElementTree import pytest @@ -22,7 +21,7 @@ from coverage.data import line_counts from coverage.files import abs_file, python_reported_file from tests.coveragetest import CoverageTest, TESTS_DIR -from tests.helpers import os_sep, re_lines_text +from tests.helpers import re_lines_text class ProcessTest(CoverageTest): @@ -1306,88 +1305,6 @@ class FailUnderEmptyFilesTest(CoverageTest): assert st == 2 -@pytest.mark.skipif(env.JYTHON, reason="Jython doesn't like accented file names") -class UnicodeFilePathsTest(CoverageTest): - """Tests of using non-ascii characters in the names of files.""" - - def test_accented_dot_py(self): - # Make a file with a non-ascii character in the filename. - self.make_file("h\xe2t.py", "print('accented')") - out = self.run_command("coverage run --source=. h\xe2t.py") - assert out == "accented\n" - - # The HTML report uses ascii-encoded HTML entities. - out = self.run_command("coverage html") - assert re.fullmatch(r"Wrote HTML report to htmlcov[/\\]index.html\n", out) - self.assert_exists("htmlcov/h\xe2t_py.html") - with open("htmlcov/index.html") as indexf: - index = indexf.read() - assert '<a href="hât_py.html">hât.py</a>' in index - - # The XML report is always UTF8-encoded. - out = self.run_command("coverage xml") - assert out == "Wrote XML report to coverage.xml\n" - with open("coverage.xml", "rb") as xmlf: - xml = xmlf.read() - assert ' filename="h\xe2t.py"'.encode() in xml - assert ' name="h\xe2t.py"'.encode() in xml - - report_expected = ( - "Name Stmts Miss Cover\n" + - "----------------------------\n" + - "h\xe2t.py 1 0 100%\n" + - "----------------------------\n" + - "TOTAL 1 0 100%\n" - ) - - out = self.run_command("coverage report") - assert out == report_expected - - def test_accented_directory(self): - # Make a file with a non-ascii character in the directory name. - self.make_file("\xe2/accented.py", "print('accented')") - out = self.run_command("coverage run --source=. \xe2/accented.py") - assert out == "accented\n" - - # The HTML report uses ascii-encoded HTML entities. - out = self.run_command("coverage html") - assert re.fullmatch(r"Wrote HTML report to htmlcov[/\\]index.html\n", out) - self.assert_exists("htmlcov/d_5786906b6f0ffeb4_accented_py.html") - with open("htmlcov/index.html") as indexf: - index = indexf.read() - expected = '<a href="d_5786906b6f0ffeb4_accented_py.html">â%saccented.py</a>' - assert expected % os.sep in index - - # The XML report is always UTF8-encoded. - out = self.run_command("coverage xml -q") - assert out == "" - with open("coverage.xml", "rb") as xmlf: - xml = xmlf.read() - assert b' filename="\xc3\xa2/accented.py"' in xml - assert b' name="accented.py"' in xml - - dom = ElementTree.parse("coverage.xml") - elts = dom.findall(".//package[@name='â']") - assert len(elts) == 1 - assert elts[0].attrib == { - "branch-rate": "0", - "complexity": "0", - "line-rate": "1", - "name": "â", - } - - report_expected = ( - "Name Stmts Miss Cover\n" + - "-----------------------------------\n" + - os_sep("\xe2/accented.py 1 0 100%\n") + - "-----------------------------------\n" + - "TOTAL 1 0 100%\n" - ) - - out = self.run_command("coverage report") - assert out == report_expected - - @pytest.mark.skipif(env.WINDOWS, reason="Windows can't delete the directory in use.") class YankedDirectoryTest(CoverageTest): """Tests of what happens when the current directory is deleted.""" diff --git a/tests/test_summary.py b/tests/test_summary.py index ae1153b9..dcf244a1 100644 --- a/tests/test_summary.py +++ b/tests/test_summary.py @@ -552,6 +552,23 @@ class SummaryTest(UsingModulesMixin, CoverageTest): with pytest.raises(NotPython, match=msg): self.get_report(cov, morfs=["mycode.py"]) + def test_accented_directory(self): + # Make a file with a non-ascii character in the directory name. + self.make_file("\xe2/accented.py", "print('accented')") + self.make_data_file(lines={abs_file("\xe2/accented.py"): [1]}) + report_expected = ( + "Name Stmts Miss Cover\n" + + "-----------------------------------\n" + + "\xe2/accented.py 1 0 100%\n" + + "-----------------------------------\n" + + "TOTAL 1 0 100%\n" + ) + + cov = coverage.Coverage() + cov.load() + output = self.get_report(cov, squeeze=False) + assert output == report_expected + @pytest.mark.skipif(env.JYTHON, reason="Jython doesn't like accented file names") def test_accenteddotpy_not_python(self): # We run a .py file with a non-ascii name, and when reporting, we can't diff --git a/tests/test_xml.py b/tests/test_xml.py index a2c1138d..2f332bd3 100644 --- a/tests/test_xml.py +++ b/tests/test_xml.py @@ -109,10 +109,14 @@ class XmlReportTest(XmlTestHelpers, CoverageTest): self.make_mycode_data() self.run_xml_report() self.assert_exists("coverage.xml") + assert self.stdout() == "" def test_argument_affects_xml_placement(self): self.make_mycode_data() - self.run_xml_report(outfile="put_it_there.xml") + cov = coverage.Coverage(messages=True) + cov.load() + cov.xml_report(outfile="put_it_there.xml") + assert self.stdout() == "Wrote XML report to put_it_there.xml\n" self.assert_doesnt_exist("coverage.xml") self.assert_exists("put_it_there.xml") @@ -267,6 +271,43 @@ class XmlReportTest(XmlTestHelpers, CoverageTest): self.start_import_stop(cov, "program") cov.xml_report() + def test_accented_dot_py(self): + # Make a file with a non-ascii character in the filename. + self.make_file("h\xe2t.py", "print('accented')") + self.make_data_file(lines={abs_file("h\xe2t.py"): [1]}) + cov = coverage.Coverage() + cov.load() + cov.xml_report() + # The XML report is always UTF8-encoded. + with open("coverage.xml", "rb") as xmlf: + xml = xmlf.read() + assert ' filename="h\xe2t.py"'.encode() in xml + assert ' name="h\xe2t.py"'.encode() in xml + + def test_accented_directory(self): + # Make a file with a non-ascii character in the directory name. + self.make_file("\xe2/accented.py", "print('accented')") + self.make_data_file(lines={abs_file("\xe2/accented.py"): [1]}) + + # The XML report is always UTF8-encoded. + cov = coverage.Coverage() + cov.load() + cov.xml_report() + with open("coverage.xml", "rb") as xmlf: + xml = xmlf.read() + assert b' filename="\xc3\xa2/accented.py"' in xml + assert b' name="accented.py"' in xml + + dom = ElementTree.parse("coverage.xml") + elts = dom.findall(".//package[@name='â']") + assert len(elts) == 1 + assert elts[0].attrib == { + "branch-rate": "0", + "complexity": "0", + "line-rate": "1", + "name": "â", + } + def unbackslash(v): """Find strings in `v`, and replace backslashes with slashes throughout.""" |