summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/coveragetest.py28
-rw-r--r--tests/modules/plugins/a_plugin.py2
-rw-r--r--tests/modules/plugins/another.py2
-rw-r--r--tests/plugin1.py9
-rw-r--r--tests/plugin2.py6
-rw-r--r--tests/test_filereporter.py12
-rw-r--r--tests/test_files.py6
-rw-r--r--tests/test_parser.py20
-rw-r--r--tests/test_plugins.py2
-rw-r--r--tests/test_summary.py14
10 files changed, 53 insertions, 48 deletions
diff --git a/tests/coveragetest.py b/tests/coveragetest.py
index 9e0bb26e..fdb27e6e 100644
--- a/tests/coveragetest.py
+++ b/tests/coveragetest.py
@@ -108,9 +108,9 @@ class CoverageTest(
# Map chars to numbers for arcz_to_arcs
_arcz_map = {'.': -1}
- _arcz_map.update(dict((c, ord(c)-ord('0')) for c in '123456789'))
+ _arcz_map.update(dict((c, ord(c) - ord('0')) for c in '123456789'))
_arcz_map.update(dict(
- (c, 10+ord(c)-ord('A')) for c in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+ (c, 10 + ord(c) - ord('A')) for c in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
))
def arcz_to_arcs(self, arcz):
@@ -141,7 +141,7 @@ class CoverageTest(
assert pair[1] == '-'
a, _, b = pair
bsgn = -1
- arcs.append((asgn*self._arcz_map[a], bsgn*self._arcz_map[b]))
+ arcs.append((asgn * self._arcz_map[a], bsgn * self._arcz_map[b]))
return sorted(arcs)
def assert_equal_args(self, a1, a2, msg=None):
@@ -178,7 +178,7 @@ class CoverageTest(
# Coverage.py wants to deal with things as modules with file names.
modname = self.get_module_name()
- self.make_file(modname+".py", text)
+ self.make_file(modname + ".py", text)
if arcs is None and arcz is not None:
arcs = self.arcz_to_arcs(arcz)
@@ -186,9 +186,10 @@ class CoverageTest(
arcs_missing = self.arcz_to_arcs(arcz_missing)
if arcs_unpredicted is None and arcz_unpredicted is not None:
arcs_unpredicted = self.arcz_to_arcs(arcz_unpredicted)
+ branch = any(x is not None for x in [arcs, arcs_missing, arcs_unpredicted])
# Start up coverage.py.
- cov = coverage.Coverage(branch=(arcs_missing is not None))
+ cov = coverage.Coverage(branch=branch)
cov.erase()
for exc in excludes or []:
cov.exclude(exc)
@@ -215,9 +216,7 @@ class CoverageTest(
if statements == line_list:
break
else:
- self.fail(
- "None of the lines choices matched %r" % statements
- )
+ self.fail("None of the lines choices matched %r" % statements)
missing_formatted = analysis.missing_formatted()
if isinstance(missing, string_class):
@@ -227,27 +226,22 @@ class CoverageTest(
if missing_formatted == missing_list:
break
else:
- self.fail(
- "None of the missing choices matched %r" %
- missing_formatted
- )
+ self.fail("None of the missing choices matched %r" % missing_formatted)
if arcs is not None:
- self.assert_equal_args(
- analysis.arc_possibilities(), arcs, "Possible arcs differ"
- )
+ self.assert_equal_args(analysis.arc_possibilities(), arcs, "Possible arcs differ")
if arcs_missing is not None:
self.assert_equal_args(
analysis.arcs_missing(), arcs_missing,
"Missing arcs differ"
- )
+ )
if arcs_unpredicted is not None:
self.assert_equal_args(
analysis.arcs_unpredicted(), arcs_unpredicted,
"Unpredicted arcs differ"
- )
+ )
if report:
frep = StringIO()
diff --git a/tests/modules/plugins/a_plugin.py b/tests/modules/plugins/a_plugin.py
index 2a9910d0..0cc96e5a 100644
--- a/tests/modules/plugins/a_plugin.py
+++ b/tests/modules/plugins/a_plugin.py
@@ -2,8 +2,10 @@
from coverage import CoveragePlugin
+
class Plugin(CoveragePlugin):
pass
+
def coverage_init(reg, options):
reg.add_file_tracer(Plugin())
diff --git a/tests/modules/plugins/another.py b/tests/modules/plugins/another.py
index 096d3b9d..80902d34 100644
--- a/tests/modules/plugins/another.py
+++ b/tests/modules/plugins/another.py
@@ -5,8 +5,10 @@
from coverage import CoveragePlugin
+
class Plugin(CoveragePlugin):
pass
+
def coverage_init(reg, options):
reg.add_file_tracer(Plugin())
diff --git a/tests/plugin1.py b/tests/plugin1.py
index c28b886f..af4dfc52 100644
--- a/tests/plugin1.py
+++ b/tests/plugin1.py
@@ -20,7 +20,7 @@ class Plugin(coverage.CoveragePlugin):
return FileReporter(filename)
-class FileTracer(coverage.plugin.FileTracer):
+class FileTracer(coverage.FileTracer):
"""A FileTracer emulating a simple static plugin."""
def __init__(self, filename):
@@ -40,14 +40,11 @@ class FileTracer(coverage.plugin.FileTracer):
return lineno*100+5, lineno*100+7
-class FileReporter(coverage.plugin.FileReporter):
+class FileReporter(coverage.FileReporter):
"""Dead-simple FileReporter."""
- def statements(self):
+ def lines(self):
return set([105, 106, 107, 205, 206, 207])
- def excluded_statements(self):
- return set([])
-
def coverage_init(reg, options): # pylint: disable=unused-argument
"""Called by coverage to initialize the plugins here."""
diff --git a/tests/plugin2.py b/tests/plugin2.py
index cbd2fc11..3bdfbdfd 100644
--- a/tests/plugin2.py
+++ b/tests/plugin2.py
@@ -18,7 +18,7 @@ class Plugin(coverage.CoveragePlugin):
return FileReporter(filename)
-class RenderFileTracer(coverage.plugin.FileTracer):
+class RenderFileTracer(coverage.FileTracer):
"""A FileTracer using information from the caller."""
def has_dynamic_source_filename(self):
@@ -35,9 +35,9 @@ class RenderFileTracer(coverage.plugin.FileTracer):
return lineno, lineno+1
-class FileReporter(coverage.plugin.FileReporter):
+class FileReporter(coverage.FileReporter):
"""A goofy file reporter."""
- def statements(self):
+ def lines(self):
# Goofy test arrangement: claim that the file has as many lines as the
# number in its name.
num = os.path.basename(self.filename).split(".")[0].split("_")[1]
diff --git a/tests/test_filereporter.py b/tests/test_filereporter.py
index 380d92d3..a348a844 100644
--- a/tests/test_filereporter.py
+++ b/tests/test_filereporter.py
@@ -38,9 +38,6 @@ class FileReporterTest(CoverageTest):
self.assertEqual(acu.relative_filename(), "aa/afile.py")
self.assertEqual(bcu.relative_filename(), "aa/bb/bfile.py")
self.assertEqual(ccu.relative_filename(), "aa/bb/cc/cfile.py")
- self.assertEqual(acu.flat_rootname(), "aa_afile_py")
- self.assertEqual(bcu.flat_rootname(), "aa_bb_bfile_py")
- self.assertEqual(ccu.flat_rootname(), "aa_bb_cc_cfile_py")
self.assertEqual(acu.source(), "# afile.py\n")
self.assertEqual(bcu.source(), "# bfile.py\n")
self.assertEqual(ccu.source(), "# cfile.py\n")
@@ -52,9 +49,6 @@ class FileReporterTest(CoverageTest):
self.assertEqual(acu.relative_filename(), "aa/afile.odd.py")
self.assertEqual(bcu.relative_filename(), "aa/bb/bfile.odd.py")
self.assertEqual(b2cu.relative_filename(), "aa/bb.odd/bfile.py")
- self.assertEqual(acu.flat_rootname(), "aa_afile_odd_py")
- self.assertEqual(bcu.flat_rootname(), "aa_bb_bfile_odd_py")
- self.assertEqual(b2cu.flat_rootname(), "aa_bb_odd_bfile_py")
self.assertEqual(acu.source(), "# afile.odd.py\n")
self.assertEqual(bcu.source(), "# bfile.odd.py\n")
self.assertEqual(b2cu.source(), "# bfile.py\n")
@@ -70,9 +64,6 @@ class FileReporterTest(CoverageTest):
self.assertEqual(acu.relative_filename(), native("aa.py"))
self.assertEqual(bcu.relative_filename(), native("aa/bb.py"))
self.assertEqual(ccu.relative_filename(), native("aa/bb/cc.py"))
- self.assertEqual(acu.flat_rootname(), "aa_py")
- self.assertEqual(bcu.flat_rootname(), "aa_bb_py")
- self.assertEqual(ccu.flat_rootname(), "aa_bb_cc_py")
self.assertEqual(acu.source(), "# aa\n")
self.assertEqual(bcu.source(), "# bb\n")
self.assertEqual(ccu.source(), "") # yes, empty
@@ -88,9 +79,6 @@ class FileReporterTest(CoverageTest):
self.assertEqual(acu.relative_filename(), native("aa/afile.py"))
self.assertEqual(bcu.relative_filename(), native("aa/bb/bfile.py"))
self.assertEqual(ccu.relative_filename(), native("aa/bb/cc/cfile.py"))
- self.assertEqual(acu.flat_rootname(), "aa_afile_py")
- self.assertEqual(bcu.flat_rootname(), "aa_bb_bfile_py")
- self.assertEqual(ccu.flat_rootname(), "aa_bb_cc_cfile_py")
self.assertEqual(acu.source(), "# afile.py\n")
self.assertEqual(bcu.source(), "# bfile.py\n")
self.assertEqual(ccu.source(), "# cfile.py\n")
diff --git a/tests/test_files.py b/tests/test_files.py
index b658853a..813f8612 100644
--- a/tests/test_files.py
+++ b/tests/test_files.py
@@ -9,7 +9,7 @@ import os.path
from coverage import files
from coverage.files import (
TreeMatcher, FnmatchMatcher, ModuleMatcher, PathAliases,
- find_python_files, abs_file, actual_path
+ find_python_files, abs_file, actual_path, flat_rootname,
)
from coverage.misc import CoverageException
from coverage import env
@@ -54,6 +54,10 @@ class FilesTest(CoverageTest):
rel = os.path.join('sub', trick, 'file1.py')
self.assertEqual(files.relative_filename(abs_file(rel)), rel)
+ def test_flat_rootname(self):
+ self.assertEqual(flat_rootname("a/b/c.py"), "a_b_c_py")
+ self.assertEqual(flat_rootname(r"c:\foo\bar.html"), "c__foo_bar_html")
+
class MatcherTest(CoverageTest):
"""Tests of file matchers."""
diff --git a/tests/test_parser.py b/tests/test_parser.py
index 18621d15..84b9a214 100644
--- a/tests/test_parser.py
+++ b/tests/test_parser.py
@@ -8,6 +8,7 @@ import textwrap
from tests.coveragetest import CoverageTest
from coverage import env
+from coverage.misc import NotPython
from coverage.parser import PythonParser
@@ -116,6 +117,25 @@ class PythonParserTest(CoverageTest):
""")
self.assertEqual(parser.exit_counts(), { 1:1, 2:1, 3:1, 6:1 })
+ def test_indentation_error(self):
+ msg = (
+ "Couldn't parse '<code>' as Python source: "
+ "'unindent does not match any outer indentation level' at line 3"
+ )
+ with self.assertRaisesRegex(NotPython, msg):
+ _ = self.parse_source("""\
+ 0 spaces
+ 2
+ 1
+ """)
+
+ def test_token_error(self):
+ msg = "Couldn't parse '<code>' as Python source: 'EOF in multi-line string' at line 1"
+ with self.assertRaisesRegex(NotPython, msg):
+ _ = self.parse_source("""\
+ '''
+ """)
+
class ParserFileTest(CoverageTest):
"""Tests for coverage.py's code parsing from files."""
diff --git a/tests/test_plugins.py b/tests/test_plugins.py
index 5218f6c9..686dcf99 100644
--- a/tests/test_plugins.py
+++ b/tests/test_plugins.py
@@ -459,7 +459,7 @@ class GoodPluginTest(FileTracerTest):
for snip in [
'filename="bar_4.html" line-rate="0.5" name="bar_4.html"',
'filename="foo_7.html" line-rate="0.2857" name="foo_7.html"',
- ]:
+ ]:
self.assertIn(snip, xml)
def test_defer_to_python(self):
diff --git a/tests/test_summary.py b/tests/test_summary.py
index 850f4dfd..fda44ee7 100644
--- a/tests/test_summary.py
+++ b/tests/test_summary.py
@@ -142,8 +142,7 @@ class SummaryTest(CoverageTest):
self.assertEqual(self.line_count(report), 3)
self.assertIn("mybranch.py ", report)
- self.assertEqual(self.last_line_squeezed(report),
- "mybranch.py 5 0 2 1 86%")
+ self.assertEqual(self.last_line_squeezed(report), "mybranch.py 5 0 2 1 86%")
def test_report_show_missing(self):
self.make_file("mymissing.py", """\
@@ -342,7 +341,7 @@ class SummaryTest(CoverageTest):
# pylint: disable=line-too-long
# Name Stmts Miss Cover
# ----------------------------
- # mycode NotPython: Couldn't parse '/tmp/test_cover/63354509363/mycode.py' as Python source: 'invalid syntax' at line 1
+ # mycode NotPython: Couldn't parse '...' as Python source: 'invalid syntax' at line 1
# No data to report.
last = self.squeezed_lines(report)[-2]
@@ -350,11 +349,10 @@ class SummaryTest(CoverageTest):
last = re.sub(r"parse '.*mycode.py", "parse 'mycode.py", last)
# The actual error message varies version to version
last = re.sub(r": '.*' at", ": 'error' at", last)
- self.assertEqual(last,
- "mycode.py NotPython: "
- "Couldn't parse 'mycode.py' as Python source: "
- "'error' at line 1"
- )
+ self.assertEqual(
+ last,
+ "mycode.py NotPython: Couldn't parse 'mycode.py' as Python source: 'error' at line 1"
+ )
def test_dotpy_not_python_ignored(self):
# We run a .py file, and when reporting, we can't parse it as Python,