From f35fd9cbfc82488a5f421622eac081c270bfcf12 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sun, 13 Dec 2009 13:25:09 -0500 Subject: I never liked the assert_ method anyway. Use assertTrue and assertFalse instead. --- test/test_coverage.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'test/test_coverage.py') diff --git a/test/test_coverage.py b/test/test_coverage.py index c1a7248..9303c06 100644 --- a/test/test_coverage.py +++ b/test/test_coverage.py @@ -1594,9 +1594,9 @@ class ProcessTest(CoverageTest): w = "world" """) - self.assert_(not os.path.exists(".coverage")) + self.assertFalse(os.path.exists(".coverage")) self.run_command("coverage -x mycode.py") - self.assert_(os.path.exists(".coverage")) + self.assertTrue(os.path.exists(".coverage")) def testEnvironment(self): # Checks that we can import modules from the test directory at all! @@ -1607,9 +1607,9 @@ class ProcessTest(CoverageTest): print ('done') """) - self.assert_(not os.path.exists(".coverage")) + self.assertFalse(os.path.exists(".coverage")) out = self.run_command("coverage -x mycode.py") - self.assert_(os.path.exists(".coverage")) + self.assertTrue(os.path.exists(".coverage")) self.assertEqual(out, 'done\n') def testCombineParallelData(self): @@ -1626,11 +1626,11 @@ class ProcessTest(CoverageTest): out = self.run_command("coverage -x -p b_or_c.py b") self.assertEqual(out, 'done\n') - self.assert_(not os.path.exists(".coverage")) + self.assertFalse(os.path.exists(".coverage")) out = self.run_command("coverage -x -p b_or_c.py c") self.assertEqual(out, 'done\n') - self.assert_(not os.path.exists(".coverage")) + self.assertFalse(os.path.exists(".coverage")) # After two -p runs, there should be two .coverage.machine.123 files. self.assertEqual( @@ -1639,7 +1639,7 @@ class ProcessTest(CoverageTest): # Combine the parallel coverage data files into .coverage . self.run_command("coverage -c") - self.assert_(os.path.exists(".coverage")) + self.assertTrue(os.path.exists(".coverage")) # Read the coverage file and see that b_or_c.py has all 7 lines # executed. @@ -1657,7 +1657,7 @@ class ProcessTest(CoverageTest): os.remove("fleeting.py") out = self.run_command("coverage html -d htmlcov") self.assertRegexpMatches(out, "No source for code: '.*fleeting.py'") - self.assert_("Traceback" not in out) + self.assertFalse("Traceback" in out) # It happens that the code paths are different for *.py and other # files, so try again with no extension. @@ -1669,12 +1669,12 @@ class ProcessTest(CoverageTest): os.remove("fleeting") out = self.run_command("coverage html -d htmlcov") self.assertRegexpMatches(out, "No source for code: '.*fleeting'") - self.assert_("Traceback" not in out) + self.assertFalse("Traceback" in out) def test_running_missing_file(self): out = self.run_command("coverage run xyzzy.py") self.assertRegexpMatches(out, "No file to run: .*xyzzy.py") - self.assert_("Traceback" not in out) + self.assertFalse("Traceback" in out) def test_no_data_to_report_on_annotate(self): # Reporting with no data produces a nice message and no output dir. -- cgit v1.2.1 From 9fad1bddd3d162013f1248d3ba1fa93bacea5a7b Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sun, 13 Dec 2009 17:21:58 -0500 Subject: version_info is a nicer way to check Python versions than hexversion is. --- test/test_coverage.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'test/test_coverage.py') diff --git a/test/test_coverage.py b/test/test_coverage.py index 9303c06..693b9b3 100644 --- a/test/test_coverage.py +++ b/test/test_coverage.py @@ -212,7 +212,7 @@ class SimpleStatementTest(CoverageTest): """, [1,2,3,6,9], "") - if sys.hexversion < 0x03000000: # Print statement is gone in Py3k. + if sys.version_info < (3, 0): # Print statement is gone in Py3k. def testPrint(self): self.check_coverage("""\ print "hello, world!" @@ -403,7 +403,7 @@ class SimpleStatementTest(CoverageTest): """, [1,2,3,4,5], "") - if sys.hexversion < 0x03000000: + if sys.version_info < (3, 0): # In Python 2.x, exec is a statement. def testExec(self): self.check_coverage("""\ @@ -1393,7 +1393,7 @@ class ExcludeTest(CoverageTest): [8,9], "", ['#pragma: NO COVER']) -if sys.hexversion >= 0x020400f0: +if sys.version_info >= (2, 4): class Py24Test(CoverageTest): """Tests of new syntax in Python 2.4.""" @@ -1464,7 +1464,7 @@ if sys.hexversion >= 0x020400f0: [1,2,3,4,5,7,8,9,10,11,12,14, 17,19,21, 24,26]), "") -if sys.hexversion >= 0x020500f0: +if sys.version_info >= (2, 5): class Py25Test(CoverageTest): """Tests of new syntax in Python 2.5.""" -- cgit v1.2.1 From f5eb520fce7f4826252727ca77d634d5702e2c29 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sat, 26 Dec 2009 15:27:49 -0500 Subject: Mark some lines as uncoverable, add some tests for some test methods. --- test/test_coverage.py | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) (limited to 'test/test_coverage.py') diff --git a/test/test_coverage.py b/test/test_coverage.py index 693b9b3..c3a88d7 100644 --- a/test/test_coverage.py +++ b/test/test_coverage.py @@ -13,6 +13,86 @@ sys.path.insert(0, os.path.split(__file__)[0]) # Force relative import for Py3k from coveragetest import CoverageTest +class TestCoverageTest(CoverageTest): + """Make sure our complex self.check_coverage method works.""" + + def test_successful_coverage(self): + # The simplest run possible. + self.check_coverage("""\ + a = 1 + b = 2 + """, + [1,2] + ) + # You can provide a list of possible statement matches. + self.check_coverage("""\ + a = 1 + b = 2 + """, + ([100], [1,2], [1723,47]), + ) + # You can specify missing lines. + self.check_coverage("""\ + a = 1 + if a == 2: + a = 3 + """, + [1,2,3], + missing="3", + ) + # You can specify a list of possible missing lines. + self.check_coverage("""\ + a = 1 + if a == 2: + a = 3 + """, + [1,2,3], + missing=("47-49", "3", "100,102") + ) + + def test_failed_coverage(self): + # If the lines are wrong, the message shows right and wrong. + self.assertRaisesRegexp(AssertionError, + r"\[1, 2] != \[1]", + self.check_coverage, """\ + a = 1 + b = 2 + """, + [1] + ) + # If the list of lines possibilities is wrong, the msg shows right. + self.assertRaisesRegexp(AssertionError, + r"None of the lines choices matched \[1, 2]", + self.check_coverage, """\ + a = 1 + b = 2 + """, + ([1], [2]) + ) + # If the missing lines are wrong, the message shows right and wrong. + self.assertRaisesRegexp(AssertionError, + r"'3' != '37'", + self.check_coverage, """\ + a = 1 + if a == 2: + a = 3 + """, + [1,2,3], + missing="37", + ) + # If the missing lines possibilities are wrong, the msg shows right. + self.assertRaisesRegexp(AssertionError, + r"None of the missing choices matched '3'", + self.check_coverage, """\ + a = 1 + if a == 2: + a = 3 + """, + [1,2,3], + missing=("37", "4-10"), + ) + + class BasicCoverageTest(CoverageTest): """The simplest tests, for quick smoke testing of fundamental changes.""" -- cgit v1.2.1 From e57103ef537b5923b357e8ac6dccc954bee7031d Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sun, 27 Dec 2009 10:39:49 -0500 Subject: Simplify and test the default pragma exclusion. --- test/test_coverage.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'test/test_coverage.py') diff --git a/test/test_coverage.py b/test/test_coverage.py index c3a88d7..7b4a41c 100644 --- a/test/test_coverage.py +++ b/test/test_coverage.py @@ -1118,6 +1118,18 @@ class CompoundStatementTest(CoverageTest): class ExcludeTest(CoverageTest): """Tests of the exclusion feature to mark lines as not covered.""" + def testDefault(self): + # A number of forms of pragma comment are accepted. + self.check_coverage("""\ + a = 1 + b = 2 # pragma: no cover + c = 3 + d = 4 #pragma NOCOVER + e = 5 + """, + [1,3,5] + ) + def testSimple(self): self.check_coverage("""\ a = 1; b = 2 -- cgit v1.2.1 From a5c206aa3a47dc37ea5b1e301d5bfcded85e0e4a Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Tue, 29 Dec 2009 22:24:33 -0500 Subject: Delete files combined during 'coverage combine'. Fixes issue #40. --- test/test_coverage.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'test/test_coverage.py') diff --git a/test/test_coverage.py b/test/test_coverage.py index 7b4a41c..772075e 100644 --- a/test/test_coverage.py +++ b/test/test_coverage.py @@ -1726,13 +1726,18 @@ class ProcessTest(CoverageTest): # After two -p runs, there should be two .coverage.machine.123 files. self.assertEqual( - len([f for f in os.listdir('.') if f.startswith('.coverage.')]), + len([f for f in os.listdir('.') if f.startswith('.coverage')]), 2) # Combine the parallel coverage data files into .coverage . self.run_command("coverage -c") self.assertTrue(os.path.exists(".coverage")) + # After combining, there should be only the .coverage file. + self.assertEqual( + len([f for f in os.listdir('.') if f.startswith('.coverage')]), + 1) + # Read the coverage file and see that b_or_c.py has all 7 lines # executed. data = coverage.CoverageData() -- cgit v1.2.1 From a5bc551f78df166a0d0e272fae7a7b5205b416f7 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sun, 3 Jan 2010 10:23:06 -0500 Subject: Parallel mode can be set from the .coveragerc file. --- test/test_coverage.py | 58 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 52 insertions(+), 6 deletions(-) (limited to 'test/test_coverage.py') diff --git a/test/test_coverage.py b/test/test_coverage.py index 772075e..f899140 100644 --- a/test/test_coverage.py +++ b/test/test_coverage.py @@ -1680,6 +1680,14 @@ class ModuleTest(CoverageTest): class ProcessTest(CoverageTest): """Tests of the per-process behavior of coverage.py.""" + def number_of_data_files(self): + """Return the number of coverage data files in this directory.""" + num = 0 + for f in os.listdir('.'): + if f.startswith('.coverage.') or f == '.coverage': + num += 1 + return num + def testSaveOnExit(self): self.make_file("mycode.py", """\ h = "Hello" @@ -1725,18 +1733,56 @@ class ProcessTest(CoverageTest): self.assertFalse(os.path.exists(".coverage")) # After two -p runs, there should be two .coverage.machine.123 files. - self.assertEqual( - len([f for f in os.listdir('.') if f.startswith('.coverage')]), - 2) + self.assertEqual(self.number_of_data_files(), 2) # Combine the parallel coverage data files into .coverage . self.run_command("coverage -c") self.assertTrue(os.path.exists(".coverage")) # After combining, there should be only the .coverage file. - self.assertEqual( - len([f for f in os.listdir('.') if f.startswith('.coverage')]), - 1) + self.assertEqual(self.number_of_data_files(), 1) + + # Read the coverage file and see that b_or_c.py has all 7 lines + # executed. + data = coverage.CoverageData() + data.read_file(".coverage") + self.assertEqual(data.summary()['b_or_c.py'], 7) + + def test_combine_with_rc(self): + self.make_file("b_or_c.py", """\ + import sys + a = 1 + if sys.argv[1] == 'b': + b = 1 + else: + c = 1 + d = 1 + print ('done') + """) + + self.make_file(".coveragerc", """\ + [run] + parallel = true + """) + + out = self.run_command("coverage run b_or_c.py b") + self.assertEqual(out, 'done\n') + self.assertFalse(os.path.exists(".coverage")) + + out = self.run_command("coverage run b_or_c.py c") + self.assertEqual(out, 'done\n') + self.assertFalse(os.path.exists(".coverage")) + + # After two runs, there should be two .coverage.machine.123 files. + self.assertEqual(self.number_of_data_files(), 2) + + # Combine the parallel coverage data files into .coverage . + self.run_command("coverage combine") + self.assertTrue(os.path.exists(".coverage")) + self.assertTrue(os.path.exists(".coveragerc")) + + # After combining, there should be only the .coverage file. + self.assertEqual(self.number_of_data_files(), 1) # Read the coverage file and see that b_or_c.py has all 7 lines # executed. -- cgit v1.2.1 From 09d5d68234d5782deee61dea97cfb101f99f983e Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sun, 10 Jan 2010 09:25:55 -0500 Subject: Update a few copyrights to 2010. --- test/test_coverage.py | 1 - 1 file changed, 1 deletion(-) (limited to 'test/test_coverage.py') diff --git a/test/test_coverage.py b/test/test_coverage.py index f899140..8145cb2 100644 --- a/test/test_coverage.py +++ b/test/test_coverage.py @@ -1,5 +1,4 @@ """Tests for Coverage.""" -# Copyright 2004-2009, Ned Batchelder # http://nedbatchelder.com/code/coverage import os, sys, unittest -- cgit v1.2.1 From f6249ab14f935d1575bdf93a507dbd0889edc516 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Sun, 10 Jan 2010 09:34:16 -0500 Subject: Split out the tests that really run a subprocess. --- test/test_coverage.py | 143 +------------------------------------------------- 1 file changed, 2 insertions(+), 141 deletions(-) (limited to 'test/test_coverage.py') diff --git a/test/test_coverage.py b/test/test_coverage.py index 8145cb2..e0afd31 100644 --- a/test/test_coverage.py +++ b/test/test_coverage.py @@ -1676,147 +1676,8 @@ class ModuleTest(CoverageTest): coverage.coverage() -class ProcessTest(CoverageTest): - """Tests of the per-process behavior of coverage.py.""" - - def number_of_data_files(self): - """Return the number of coverage data files in this directory.""" - num = 0 - for f in os.listdir('.'): - if f.startswith('.coverage.') or f == '.coverage': - num += 1 - return num - - def testSaveOnExit(self): - self.make_file("mycode.py", """\ - h = "Hello" - w = "world" - """) - - self.assertFalse(os.path.exists(".coverage")) - self.run_command("coverage -x mycode.py") - self.assertTrue(os.path.exists(".coverage")) - - def testEnvironment(self): - # Checks that we can import modules from the test directory at all! - self.make_file("mycode.py", """\ - import covmod1 - import covmodzip1 - a = 1 - print ('done') - """) - - self.assertFalse(os.path.exists(".coverage")) - out = self.run_command("coverage -x mycode.py") - self.assertTrue(os.path.exists(".coverage")) - self.assertEqual(out, 'done\n') - - def testCombineParallelData(self): - self.make_file("b_or_c.py", """\ - import sys - a = 1 - if sys.argv[1] == 'b': - b = 1 - else: - c = 1 - d = 1 - print ('done') - """) - - out = self.run_command("coverage -x -p b_or_c.py b") - self.assertEqual(out, 'done\n') - self.assertFalse(os.path.exists(".coverage")) - - out = self.run_command("coverage -x -p b_or_c.py c") - self.assertEqual(out, 'done\n') - self.assertFalse(os.path.exists(".coverage")) - - # After two -p runs, there should be two .coverage.machine.123 files. - self.assertEqual(self.number_of_data_files(), 2) - - # Combine the parallel coverage data files into .coverage . - self.run_command("coverage -c") - self.assertTrue(os.path.exists(".coverage")) - - # After combining, there should be only the .coverage file. - self.assertEqual(self.number_of_data_files(), 1) - - # Read the coverage file and see that b_or_c.py has all 7 lines - # executed. - data = coverage.CoverageData() - data.read_file(".coverage") - self.assertEqual(data.summary()['b_or_c.py'], 7) - - def test_combine_with_rc(self): - self.make_file("b_or_c.py", """\ - import sys - a = 1 - if sys.argv[1] == 'b': - b = 1 - else: - c = 1 - d = 1 - print ('done') - """) - - self.make_file(".coveragerc", """\ - [run] - parallel = true - """) - - out = self.run_command("coverage run b_or_c.py b") - self.assertEqual(out, 'done\n') - self.assertFalse(os.path.exists(".coverage")) - - out = self.run_command("coverage run b_or_c.py c") - self.assertEqual(out, 'done\n') - self.assertFalse(os.path.exists(".coverage")) - - # After two runs, there should be two .coverage.machine.123 files. - self.assertEqual(self.number_of_data_files(), 2) - - # Combine the parallel coverage data files into .coverage . - self.run_command("coverage combine") - self.assertTrue(os.path.exists(".coverage")) - self.assertTrue(os.path.exists(".coveragerc")) - - # After combining, there should be only the .coverage file. - self.assertEqual(self.number_of_data_files(), 1) - - # Read the coverage file and see that b_or_c.py has all 7 lines - # executed. - data = coverage.CoverageData() - data.read_file(".coverage") - self.assertEqual(data.summary()['b_or_c.py'], 7) - - def test_missing_source_file(self): - # Check what happens if the source is missing when reporting happens. - self.make_file("fleeting.py", """\ - s = 'goodbye, cruel world!' - """) - - self.run_command("coverage run fleeting.py") - os.remove("fleeting.py") - out = self.run_command("coverage html -d htmlcov") - self.assertRegexpMatches(out, "No source for code: '.*fleeting.py'") - self.assertFalse("Traceback" in out) - - # It happens that the code paths are different for *.py and other - # files, so try again with no extension. - self.make_file("fleeting", """\ - s = 'goodbye, cruel world!' - """) - - self.run_command("coverage run fleeting") - os.remove("fleeting") - out = self.run_command("coverage html -d htmlcov") - self.assertRegexpMatches(out, "No source for code: '.*fleeting'") - self.assertFalse("Traceback" in out) - - def test_running_missing_file(self): - out = self.run_command("coverage run xyzzy.py") - self.assertRegexpMatches(out, "No file to run: .*xyzzy.py") - self.assertFalse("Traceback" in out) +class ReportingTest(CoverageTest): + """Tests of some reporting behavior.""" def test_no_data_to_report_on_annotate(self): # Reporting with no data produces a nice message and no output dir. -- cgit v1.2.1