diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2015-08-20 09:52:07 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2015-08-20 09:52:07 -0400 |
commit | 33d7789e8e6c15aae52cf3e36eecbd48f36e248e (patch) | |
tree | ed0da3866c20392314aea128cd5272a367bc832f /tests/test_data.py | |
parent | b0168bef1eedbe75ffab364a02a0c1ba8466dbd1 (diff) | |
download | python-coveragepy-git-33d7789e8e6c15aae52cf3e36eecbd48f36e248e.tar.gz |
Touching files in an empty CoverageData shouldn't force lines. #399
py.test --cov can write empty data to arcs, and then touch files due to
--source. This would make the file be about lines instead of arcs, and
then combining would fail.
This changed a lot of CoverageData, including some of the methods names.
Diffstat (limited to 'tests/test_data.py')
-rw-r--r-- | tests/test_data.py | 179 |
1 files changed, 108 insertions, 71 deletions
diff --git a/tests/test_data.py b/tests/test_data.py index 9e0a04a6..653a401a 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -112,50 +112,75 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): def test_line_data_is_true(self): covdata = CoverageData() - covdata.set_lines(LINES_1) + covdata.add_lines(LINES_1) self.assertTrue(covdata) def test_arc_data_is_true(self): covdata = CoverageData() - covdata.set_arcs(ARCS_3) + covdata.add_arcs(ARCS_3) self.assertTrue(covdata) + def test_empty_line_data_is_false(self): + covdata = CoverageData() + covdata.add_lines({}) + self.assertFalse(covdata) + + def test_empty_arc_data_is_false(self): + covdata = CoverageData() + covdata.add_arcs({}) + self.assertFalse(covdata) + def test_adding_lines(self): covdata = CoverageData() - covdata.set_lines(LINES_1) + covdata.add_lines(LINES_1) + self.assert_lines1_data(covdata) def test_adding_arcs(self): covdata = CoverageData() - covdata.set_arcs(ARCS_3) + covdata.add_arcs(ARCS_3) self.assert_arcs3_data(covdata) - def test_cant_set_arcs_with_lines(self): + def test_ok_to_add_lines_twice(self): + covdata = CoverageData() + covdata.add_lines(LINES_1) + covdata.add_lines(LINES_2) + self.assert_line_counts(covdata, SUMMARY_1_2) + self.assert_measured_files(covdata, MEASURED_FILES_1_2) + + def test_ok_to_add_arcs_twice(self): covdata = CoverageData() - covdata.set_lines(LINES_1) + covdata.add_arcs(ARCS_3) + covdata.add_arcs(ARCS_4) + self.assert_line_counts(covdata, SUMMARY_3_4) + self.assert_measured_files(covdata, MEASURED_FILES_3_4) + + def test_cant_add_arcs_with_lines(self): + covdata = CoverageData() + covdata.add_lines(LINES_1) with self.assertRaisesRegex(CoverageException, "Can't add arcs to existing line data"): - covdata.set_arcs(ARCS_3) + covdata.add_arcs(ARCS_3) - def test_cant_set_lines_with_arcs(self): + def test_cant_add_lines_with_arcs(self): covdata = CoverageData() - covdata.set_arcs(ARCS_3) + covdata.add_arcs(ARCS_3) with self.assertRaisesRegex(CoverageException, "Can't add lines to existing arc data"): - covdata.set_lines(LINES_1) + covdata.add_lines(LINES_1) def test_touch_file_with_lines(self): covdata = CoverageData() - covdata.set_lines(LINES_1) + covdata.add_lines(LINES_1) covdata.touch_file('zzz.py') self.assert_measured_files(covdata, MEASURED_FILES_1 + ['zzz.py']) def test_touch_file_with_arcs(self): covdata = CoverageData() - covdata.set_arcs(ARCS_3) + covdata.add_arcs(ARCS_3) covdata.touch_file('zzz.py') self.assert_measured_files(covdata, MEASURED_FILES_3 + ['zzz.py']) def test_no_lines_vs_unmeasured_file(self): covdata = CoverageData() - covdata.set_lines(LINES_1) + covdata.add_lines(LINES_1) covdata.touch_file('zzz.py') self.assertEqual(covdata.lines('zzz.py'), []) self.assertIsNone(covdata.lines('no_such_file.py')) @@ -170,7 +195,7 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): def test_no_arcs_vs_unmeasured_file(self): covdata = CoverageData() - covdata.set_arcs(ARCS_3) + covdata.add_arcs(ARCS_3) covdata.touch_file('zzz.py') self.assertEqual(covdata.lines('zzz.py'), []) self.assertIsNone(covdata.lines('no_such_file.py')) @@ -179,12 +204,12 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): def test_file_tracer_name(self): covdata = CoverageData() - covdata.set_lines({ + covdata.add_lines({ "p1.foo": dict.fromkeys([1, 2, 3]), "p2.html": dict.fromkeys([10, 11, 12]), "main.py": dict.fromkeys([20]), }) - covdata.set_file_tracers({"p1.foo": "p1.plugin", "p2.html": "p2.plugin"}) + covdata.add_file_tracers({"p1.foo": "p1.plugin", "p2.html": "p2.plugin"}) self.assertEqual(covdata.file_tracer("p1.foo"), "p1.plugin") self.assertEqual(covdata.file_tracer("main.py"), "") self.assertIsNone(covdata.file_tracer("p3.not_here")) @@ -193,27 +218,27 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): covdata = CoverageData() msg = "Can't add file tracer data for unmeasured file 'p1.foo'" with self.assertRaisesRegex(CoverageException, msg): - covdata.set_file_tracers({"p1.foo": "p1.plugin"}) + covdata.add_file_tracers({"p1.foo": "p1.plugin"}) - covdata.set_lines({"p2.html": dict.fromkeys([10, 11, 12])}) + covdata.add_lines({"p2.html": dict.fromkeys([10, 11, 12])}) with self.assertRaisesRegex(CoverageException, msg): - covdata.set_file_tracers({"p1.foo": "p1.plugin"}) + covdata.add_file_tracers({"p1.foo": "p1.plugin"}) def test_cant_change_file_tracer_name(self): covdata = CoverageData() - covdata.set_lines({"p1.foo": dict.fromkeys([1, 2, 3])}) - covdata.set_file_tracers({"p1.foo": "p1.plugin"}) + covdata.add_lines({"p1.foo": dict.fromkeys([1, 2, 3])}) + covdata.add_file_tracers({"p1.foo": "p1.plugin"}) msg = "Conflicting file tracer name for 'p1.foo': 'p1.plugin' vs 'p1.plugin.foo'" with self.assertRaisesRegex(CoverageException, msg): - covdata.set_file_tracers({"p1.foo": "p1.plugin.foo"}) + covdata.add_file_tracers({"p1.foo": "p1.plugin.foo"}) def test_update_lines(self): covdata1 = CoverageData() - covdata1.set_lines(LINES_1) + covdata1.add_lines(LINES_1) covdata2 = CoverageData() - covdata2.set_lines(LINES_2) + covdata2.add_lines(LINES_2) covdata3 = CoverageData() covdata3.update(covdata1) @@ -225,10 +250,10 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): def test_update_arcs(self): covdata1 = CoverageData() - covdata1.set_arcs(ARCS_3) + covdata1.add_arcs(ARCS_3) covdata2 = CoverageData() - covdata2.set_arcs(ARCS_4) + covdata2.add_arcs(ARCS_4) covdata3 = CoverageData() covdata3.update(covdata1) @@ -240,11 +265,11 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): def test_update_run_info(self): covdata1 = CoverageData() - covdata1.set_arcs(ARCS_3) + covdata1.add_arcs(ARCS_3) covdata1.add_run_info(hello="there", count=17) covdata2 = CoverageData() - covdata2.set_arcs(ARCS_4) + covdata2.add_arcs(ARCS_4) covdata2.add_run_info(hello="goodbye", count=23) covdata3 = CoverageData() @@ -258,10 +283,10 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): def test_update_cant_mix_lines_and_arcs(self): covdata1 = CoverageData() - covdata1.set_lines(LINES_1) + covdata1.add_lines(LINES_1) covdata2 = CoverageData() - covdata2.set_arcs(ARCS_3) + covdata2.add_arcs(ARCS_3) with self.assertRaisesRegex(CoverageException, "Can't combine arc data with line data"): covdata1.update(covdata2) @@ -271,24 +296,24 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): def test_update_file_tracers(self): covdata1 = CoverageData() - covdata1.set_lines({ + covdata1.add_lines({ "p1.html": dict.fromkeys([1, 2, 3, 4]), "p2.html": dict.fromkeys([5, 6, 7]), "main.py": dict.fromkeys([10, 11, 12]), }) - covdata1.set_file_tracers({ + covdata1.add_file_tracers({ "p1.html": "html.plugin", "p2.html": "html.plugin2", }) covdata2 = CoverageData() - covdata2.set_lines({ + covdata2.add_lines({ "p1.html": dict.fromkeys([3, 4, 5, 6]), "p2.html": dict.fromkeys([7, 8, 9]), "p3.foo": dict.fromkeys([1000, 1001]), "main.py": dict.fromkeys([10, 11, 12]), }) - covdata2.set_file_tracers({ + covdata2.add_file_tracers({ "p1.html": "html.plugin", "p2.html": "html.plugin2", "p3.foo": "foo_plugin", @@ -304,12 +329,12 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): def test_update_conflicting_file_tracers(self): covdata1 = CoverageData() - covdata1.set_lines({"p1.html": dict.fromkeys([1, 2, 3])}) - covdata1.set_file_tracers({"p1.html": "html.plugin"}) + covdata1.add_lines({"p1.html": dict.fromkeys([1, 2, 3])}) + covdata1.add_file_tracers({"p1.html": "html.plugin"}) covdata2 = CoverageData() - covdata2.set_lines({"p1.html": dict.fromkeys([1, 2, 3])}) - covdata2.set_file_tracers({"p1.html": "html.other_plugin"}) + covdata2.add_lines({"p1.html": dict.fromkeys([1, 2, 3])}) + covdata2.add_file_tracers({"p1.html": "html.other_plugin"}) msg = "Conflicting file tracer name for 'p1.html': 'html.plugin' vs 'html.other_plugin'" with self.assertRaisesRegex(CoverageException, msg): @@ -321,11 +346,11 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): def test_update_file_tracer_vs_no_file_tracer(self): covdata1 = CoverageData() - covdata1.set_lines({"p1.html": dict.fromkeys([1, 2, 3])}) - covdata1.set_file_tracers({"p1.html": "html.plugin"}) + covdata1.add_lines({"p1.html": dict.fromkeys([1, 2, 3])}) + covdata1.add_file_tracers({"p1.html": "html.plugin"}) covdata2 = CoverageData() - covdata2.set_lines({"p1.html": dict.fromkeys([1, 2, 3])}) + covdata2.add_lines({"p1.html": dict.fromkeys([1, 2, 3])}) msg = "Conflicting file tracer name for 'p1.html': 'html.plugin' vs ''" with self.assertRaisesRegex(CoverageException, msg): @@ -337,7 +362,7 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): def test_add_to_hash_with_lines(self): covdata = CoverageData() - covdata.set_lines(LINES_1) + covdata.add_lines(LINES_1) hasher = mock.Mock() covdata.add_to_hash("a.py", hasher) self.assertEqual(hasher.method_calls, [ @@ -347,8 +372,8 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): def test_add_to_hash_with_arcs(self): covdata = CoverageData() - covdata.set_arcs(ARCS_3) - covdata.set_file_tracers({"y.py": "hologram_plugin"}) + covdata.add_arcs(ARCS_3) + covdata.add_file_tracers({"y.py": "hologram_plugin"}) hasher = mock.Mock() covdata.add_to_hash("y.py", hasher) self.assertEqual(hasher.method_calls, [ @@ -356,13 +381,25 @@ class CoverageDataTest(DataTestHelpers, CoverageTest): mock.call.update("hologram_plugin"), # file_tracer name ]) + def test_empty_lines_are_still_lines(self): + covdata = CoverageData() + covdata.add_lines({}) + covdata.touch_file("abc.py") + self.assertFalse(covdata.has_arcs()) + + def test_empty_arcs_are_still_arcs(self): + covdata = CoverageData() + covdata.add_arcs({}) + covdata.touch_file("abc.py") + self.assertTrue(covdata.has_arcs()) + class CoverageDataTestInTempDir(DataTestHelpers, CoverageTest): """Tests of CoverageData that need a temporary directory to make files.""" def test_read_write_lines(self): covdata1 = CoverageData() - covdata1.set_lines(LINES_1) + covdata1.add_lines(LINES_1) covdata1.write_file("lines.dat") covdata2 = CoverageData() @@ -371,7 +408,7 @@ class CoverageDataTestInTempDir(DataTestHelpers, CoverageTest): def test_read_write_arcs(self): covdata1 = CoverageData() - covdata1.set_arcs(ARCS_3) + covdata1.add_arcs(ARCS_3) covdata1.write_file("arcs.dat") covdata2 = CoverageData() @@ -402,13 +439,13 @@ class CoverageDataTestInTempDir(DataTestHelpers, CoverageTest): def test_debug_main(self): covdata1 = CoverageData() - covdata1.set_lines(LINES_1) + covdata1.add_lines(LINES_1) covdata1.write_file(".coverage") debug_main([]) covdata2 = CoverageData() - covdata2.set_arcs(ARCS_3) - covdata2.set_file_tracers({"y.py": "magic_plugin"}) + covdata2.add_arcs(ARCS_3) + covdata2.add_file_tracers({"y.py": "magic_plugin"}) covdata2.add_run_info(version="v3.14", chunks=["z", "a"]) covdata2.write_file("arcs.dat") @@ -436,7 +473,7 @@ class CoverageDataTestInTempDir(DataTestHelpers, CoverageTest): }, ], }, - "empty.dat": {"lines": {}}, + "empty.dat": {}, } pieces = re.split(r"(?m)-+ ([\w.]+) -+$", self.stdout()) for name, json_out in zip(pieces[1::2], pieces[2::2]): @@ -470,7 +507,7 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): def test_writing_and_reading(self): covdata1 = CoverageData() - covdata1.set_lines(LINES_1) + covdata1.add_lines(LINES_1) self.data_files.write(covdata1) covdata2 = CoverageData() @@ -482,7 +519,7 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): # writing files. debug = DebugControlString(options=["dataio"]) covdata1 = CoverageData(debug=debug) - covdata1.set_lines(LINES_1) + covdata1.add_lines(LINES_1) self.data_files.write(covdata1) covdata2 = CoverageData(debug=debug) @@ -500,7 +537,7 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): # output. debug = DebugControlString(options=[]) covdata1 = CoverageData(debug=debug) - covdata1.set_lines(LINES_1) + covdata1.add_lines(LINES_1) self.data_files.write(covdata1) covdata2 = CoverageData(debug=debug) @@ -512,7 +549,7 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): def test_explicit_suffix(self): self.assert_doesnt_exist(".coverage.SUFFIX") covdata = CoverageData() - covdata.set_lines(LINES_1) + covdata.add_lines(LINES_1) self.data_files.write(covdata, suffix='SUFFIX') self.assert_exists(".coverage.SUFFIX") self.assert_doesnt_exist(".coverage") @@ -522,7 +559,7 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): # suffix=True will make a randomly named data file. covdata1 = CoverageData() - covdata1.set_lines(LINES_1) + covdata1.add_lines(LINES_1) self.data_files.write(covdata1, suffix=True) self.assert_doesnt_exist(".coverage") data_files1 = glob.glob(".coverage.*") @@ -530,7 +567,7 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): # Another suffix=True will choose a different name. covdata2 = CoverageData() - covdata2.set_lines(LINES_1) + covdata2.add_lines(LINES_1) self.data_files.write(covdata2, suffix=True) self.assert_doesnt_exist(".coverage") data_files2 = glob.glob(".coverage.*") @@ -544,13 +581,13 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): self.assert_doesnt_exist(".coverage.2") covdata1 = CoverageData() - covdata1.set_lines(LINES_1) + covdata1.add_lines(LINES_1) self.data_files.write(covdata1, suffix='1') self.assert_exists(".coverage.1") self.assert_doesnt_exist(".coverage.2") covdata2 = CoverageData() - covdata2.set_lines(LINES_2) + covdata2.add_lines(LINES_2) self.data_files.write(covdata2, suffix='2') self.assert_exists(".coverage.2") @@ -563,7 +600,7 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): def test_erasing(self): covdata1 = CoverageData() - covdata1.set_lines(LINES_1) + covdata1.add_lines(LINES_1) self.data_files.write(covdata1) covdata1.erase() @@ -594,7 +631,7 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): def test_file_format(self): # Write with CoverageData, then read the JSON explicitly. covdata = CoverageData() - covdata.set_lines(LINES_1) + covdata.add_lines(LINES_1) self.data_files.write(covdata) data = self.read_json_data_file(".coverage") @@ -611,7 +648,7 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): def test_file_format_with_arcs(self): # Write with CoverageData, then read the JSON explicitly. covdata = CoverageData() - covdata.set_arcs(ARCS_3) + covdata.add_arcs(ARCS_3) self.data_files.write(covdata) data = self.read_json_data_file(".coverage") @@ -627,7 +664,7 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): def test_writing_to_other_file(self): data_files = CoverageDataFiles(".otherfile") covdata = CoverageData() - covdata.set_lines(LINES_1) + covdata.add_lines(LINES_1) data_files.write(covdata) self.assert_doesnt_exist(".coverage") self.assert_exists(".otherfile") @@ -638,18 +675,18 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): def test_combining_with_aliases(self): covdata1 = CoverageData() - covdata1.set_lines({ + covdata1.add_lines({ '/home/ned/proj/src/a.py': {1: None, 2: None}, '/home/ned/proj/src/sub/b.py': {3: None}, '/home/ned/proj/src/template.html': {10: None}, }) - covdata1.set_file_tracers({ + covdata1.add_file_tracers({ '/home/ned/proj/src/template.html': 'html.plugin', }) self.data_files.write(covdata1, suffix='1') covdata2 = CoverageData() - covdata2.set_lines({ + covdata2.add_lines({ r'c:\ned\test\a.py': {4: None, 5: None}, r'c:\ned\test\sub\b.py': {3: None, 6: None}, }) @@ -671,18 +708,18 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): def test_combining_from_different_directories(self): covdata1 = CoverageData() - covdata1.set_lines(LINES_1) + covdata1.add_lines(LINES_1) os.makedirs('cov1') covdata1.write_file('cov1/.coverage.1') covdata2 = CoverageData() - covdata2.set_lines(LINES_2) + covdata2.add_lines(LINES_2) os.makedirs('cov2') covdata2.write_file('cov2/.coverage.2') # This data won't be included. covdata_xxx = CoverageData() - covdata_xxx.set_arcs(ARCS_3) + covdata_xxx.add_arcs(ARCS_3) covdata_xxx.write_file('.coverage.xxx') covdata3 = CoverageData() @@ -696,18 +733,18 @@ class CoverageDataFilesTest(DataTestHelpers, CoverageTest): def test_combining_from_files(self): covdata1 = CoverageData() - covdata1.set_lines(LINES_1) + covdata1.add_lines(LINES_1) os.makedirs('cov1') covdata1.write_file('cov1/.coverage.1') covdata2 = CoverageData() - covdata2.set_lines(LINES_2) + covdata2.add_lines(LINES_2) os.makedirs('cov2') covdata2.write_file('cov2/.coverage.2') # This data won't be included. covdata_xxx = CoverageData() - covdata_xxx.set_arcs(ARCS_3) + covdata_xxx.add_arcs(ARCS_3) covdata_xxx.write_file('.coverage.xxx') covdata_xxx.write_file('cov2/.coverage.xxx') |