diff options
Diffstat (limited to 'test/test_api.py')
-rw-r--r-- | test/test_api.py | 192 |
1 files changed, 143 insertions, 49 deletions
diff --git a/test/test_api.py b/test/test_api.py index 1a1f5412..aaae89cb 100644 --- a/test/test_api.py +++ b/test/test_api.py @@ -8,6 +8,9 @@ from coverage.backward import StringIO sys.path.insert(0, os.path.split(__file__)[0]) # Force relative import for Py3k from coveragetest import CoverageTest +# This file uses the singleton module interface. Prevent it from writing +# .coverage files at exit. +coverage.use_cache(0) class ApiTest(CoverageTest): """Api-oriented tests for Coverage.""" @@ -22,17 +25,17 @@ class ApiTest(CoverageTest): c = 4 d = 5 """) - + # Import the python file, executing it. coverage.start() - self.import_module("mycode") - coverage.stop() - + self.import_module("mycode") # pragma: recursive coverage + coverage.stop() # pragma: recursive coverage + _, statements, missing, missingtext = coverage.analysis("mycode.py") self.assertEqual(statements, [1,2,3,4,5]) self.assertEqual(missing, [4]) self.assertEqual(missingtext, "4") - + def doReportWork(self, modname): """Create a module named `modname`, then measure it.""" coverage.erase() @@ -46,21 +49,21 @@ class ApiTest(CoverageTest): e = 6 f = 7 """) - + # Import the python file, executing it. coverage.start() - self.import_module(modname) - coverage.stop() - + self.import_module(modname) # pragma: recursive coverage + coverage.stop() # pragma: recursive coverage + def testReport(self): self.doReportWork("mycode2") coverage.report(["mycode2.py"]) self.assertEqual(self.stdout(), textwrap.dedent("""\ - Name Stmts Exec Cover Missing + Name Stmts Miss Cover Missing --------------------------------------- - mycode2 7 4 57% 4-6 + mycode2 7 3 57% 4-6 """)) - + def testReportFile(self): # The file= argument of coverage.report makes the report go there. self.doReportWork("mycode3") @@ -68,9 +71,9 @@ class ApiTest(CoverageTest): coverage.report(["mycode3.py"], file=fout) self.assertEqual(self.stdout(), "") self.assertEqual(fout.getvalue(), textwrap.dedent("""\ - Name Stmts Exec Cover Missing + Name Stmts Miss Cover Missing --------------------------------------- - mycode3 7 4 57% 4-6 + mycode3 7 3 57% 4-6 """)) def testReportDefault(self): @@ -78,7 +81,7 @@ class ApiTest(CoverageTest): self.doReportWork("mycode4") coverage.report() rpt = re.sub(r"\s+", " ", self.stdout()) - self.assert_("mycode4 7 4 57% 4-6" in rpt) + self.assertTrue("mycode4 7 3 57% 4-6" in rpt) def testUnexecutedFile(self): cov = coverage.coverage() @@ -90,16 +93,16 @@ class ApiTest(CoverageTest): c = 4 d = 5 """) - + self.make_file("not_run.py", """\ fooey = 17 """) - + # Import the python file, executing it. cov.start() - self.import_module("mycode") - cov.stop() - + self.import_module("mycode") # pragma: recursive coverage + cov.stop() # pragma: recursive coverage + _, statements, missing, _ = cov.analysis("not_run.py") self.assertEqual(statements, [1]) self.assertEqual(missing, [1]) @@ -110,22 +113,22 @@ class ApiTest(CoverageTest): import mymod a = 1 """) - + self.make_file("mymod.py", """\ fooey = 17 """) - + # Import the python file, executing it. cov = coverage.coverage() cov.start() - self.import_module("mymain") - cov.stop() - + self.import_module("mymain") # pragma: recursive coverage + cov.stop() # pragma: recursive coverage + filename, _, _, _ = cov.analysis("mymain.py") self.assertEqual(os.path.basename(filename), "mymain.py") filename, _, _, _ = cov.analysis("mymod.py") self.assertEqual(os.path.basename(filename), "mymod.py") - + filename, _, _, _ = cov.analysis(sys.modules["mymain"]) self.assertEqual(os.path.basename(filename), "mymain.py") filename, _, _, _ = cov.analysis(sys.modules["mymod"]) @@ -135,14 +138,14 @@ class ApiTest(CoverageTest): # already. cov = coverage.coverage() cov.start() - self.import_module("mymain") - cov.stop() - + self.import_module("mymain") # pragma: recursive coverage + cov.stop() # pragma: recursive coverage + filename, _, _, _ = cov.analysis("mymain.py") self.assertEqual(os.path.basename(filename), "mymain.py") filename, _, _, _ = cov.analysis("mymod.py") self.assertEqual(os.path.basename(filename), "mymod.py") - + filename, _, _, _ = cov.analysis(sys.modules["mymain"]) self.assertEqual(os.path.basename(filename), "mymain.py") filename, _, _, _ = cov.analysis(sys.modules["mymod"]) @@ -154,17 +157,17 @@ class ApiTest(CoverageTest): a = 1 hls = colorsys.rgb_to_hls(1.0, 0.5, 0.0) """) - + self.make_file("mymod.py", """\ fooey = 17 """) # Measure without the stdlib. cov1 = coverage.coverage() - self.assertEqual(cov1.cover_pylib, False) + self.assertEqual(cov1.config.cover_pylib, False) cov1.start() - self.import_module("mymain") - cov1.stop() + self.import_module("mymain") # pragma: recursive coverage + cov1.stop() # pragma: recursive coverage # some statements were marked executed in mymain.py _, statements, missing, _ = cov1.analysis("mymain.py") @@ -176,8 +179,8 @@ class ApiTest(CoverageTest): # Measure with the stdlib. cov2 = coverage.coverage(cover_pylib=True) cov2.start() - self.import_module("mymain") - cov2.stop() + self.import_module("mymain") # pragma: recursive coverage + cov2.stop() # pragma: recursive coverage # some statements were marked executed in mymain.py _, statements, missing, _ = cov2.analysis("mymain.py") @@ -204,13 +207,13 @@ class ApiTest(CoverageTest): fooey = 17 """) - self.assert_equal_sets(os.listdir("."), ["datatest1.py"]) + self.assertSameElements(os.listdir("."), ["datatest1.py"]) cov = coverage.coverage() cov.start() - self.import_module("datatest1") - cov.stop() + self.import_module("datatest1") # pragma: recursive coverage + cov.stop() # pragma: recursive coverage cov.save() - self.assert_equal_sets(os.listdir("."), + self.assertSameElements(os.listdir("."), ["datatest1.py", "datatest1.pyc", ".coverage"]) def testDatafileSpecified(self): @@ -219,13 +222,13 @@ class ApiTest(CoverageTest): fooey = 17 """) - self.assert_equal_sets(os.listdir("."), ["datatest2.py"]) + self.assertSameElements(os.listdir("."), ["datatest2.py"]) cov = coverage.coverage(data_file="cov.data") cov.start() - self.import_module("datatest2") - cov.stop() + self.import_module("datatest2") # pragma: recursive coverage + cov.stop() # pragma: recursive coverage cov.save() - self.assert_equal_sets(os.listdir("."), + self.assertSameElements(os.listdir("."), ["datatest2.py", "datatest2.pyc", "cov.data"]) def testDatafileAndSuffixSpecified(self): @@ -234,17 +237,108 @@ class ApiTest(CoverageTest): fooey = 17 """) - self.assert_equal_sets(os.listdir("."), ["datatest3.py"]) - cov = coverage.coverage(data_file="cov.data", data_suffix=".14") + self.assertSameElements(os.listdir("."), ["datatest3.py"]) + cov = coverage.coverage(data_file="cov.data", data_suffix="14") cov.start() - self.import_module("datatest3") - cov.stop() + self.import_module("datatest3") # pragma: recursive coverage + cov.stop() # pragma: recursive coverage cov.save() - self.assert_equal_sets(os.listdir("."), + self.assertSameElements(os.listdir("."), ["datatest3.py", "datatest3.pyc", "cov.data.14"]) + def testDatafileFromRcFile(self): + # You can specify the data file name in the .coveragerc file + self.make_file("datatest4.py", """\ + fooey = 17 + """) + self.make_file(".coveragerc", """\ + [run] + data_file = mydata.dat + """) + + self.assertSameElements(os.listdir("."), + ["datatest4.py", ".coveragerc"]) + cov = coverage.coverage() + cov.start() + self.import_module("datatest4") # pragma: recursive coverage + cov.stop() # pragma: recursive coverage + cov.save() + self.assertSameElements(os.listdir("."), + ["datatest4.py", "datatest4.pyc", ".coveragerc", "mydata.dat"]) + def testEmptyReporting(self): # Used to be you'd get an exception reporting on nothing... cov = coverage.coverage() cov.erase() cov.report() + +class OmitIncludeTest(CoverageTest): + """Test using omit_prefixes and include_prefixes when measuring code.""" + + def test_nothing_specified(self): + self.make_file("a.py", """\ + a = 1 + """) + self.make_file("b.py", """\ + import a + b = 1 + """) + + cov = coverage.coverage() + cov.start() + self.import_module("b") + cov.stop() + lines = cov.data.summary() + self.assertEqual(lines['a.py'], 1) + self.assertEqual(lines['b.py'], 2) + + def test_include(self): + self.make_file("a.py", """\ + a = 1 + """) + self.make_file("b.py", """\ + import a + b = 1 + """) + + cov = coverage.coverage(include_prefixes=["a"]) + cov.start() + self.import_module("b") + cov.stop() + lines = cov.data.summary() + self.assertEqual(lines['a.py'], 1) + self.assert_('b.py' not in lines) + + def test_omit(self): + self.make_file("a.py", """\ + a = 1 + """) + self.make_file("b.py", """\ + import a + b = 1 + """) + + cov = coverage.coverage(omit_prefixes=["a"]) + cov.start() + self.import_module("b") + cov.stop() + lines = cov.data.summary() + self.assert_('a.py' not in lines) + self.assertEqual(lines['b.py'], 2) + + def test_omit_and_include(self): + self.make_file("aa.py", """\ + a = 1 + """) + self.make_file("ab.py", """\ + import aa + b = 1 + """) + + cov = coverage.coverage(include_prefixes=["a"], omit_prefixes=["aa"]) + cov.start() + self.import_module("ab") + cov.stop() + lines = cov.data.summary() + self.assert_('aa.py' not in lines) + self.assertEqual(lines['ab.py'], 2) |