diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/coveragetest.py | 28 | ||||
-rw-r--r-- | tests/modules/plugins/a_plugin.py | 2 | ||||
-rw-r--r-- | tests/modules/plugins/another.py | 2 | ||||
-rw-r--r-- | tests/plugin1.py | 9 | ||||
-rw-r--r-- | tests/plugin2.py | 6 | ||||
-rw-r--r-- | tests/test_filereporter.py | 12 | ||||
-rw-r--r-- | tests/test_files.py | 6 | ||||
-rw-r--r-- | tests/test_parser.py | 20 | ||||
-rw-r--r-- | tests/test_plugins.py | 2 | ||||
-rw-r--r-- | tests/test_summary.py | 14 |
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, |