blob: b048fd180bd7fa6a13a1d31f1c64a3d5e35fa6c1 [file] [log] [blame]
"""Tests for coverage.data"""
from coverage.backward import pickle
from coverage.data import CoverageData
from coverage.files import PathAliases
from tests.coveragetest import CoverageTest
DATA_1 = { 'a.py': {1:None, 2:None}, 'b.py': {3:None} }
SUMMARY_1 = { 'a.py':2, 'b.py':1 }
MEASURED_FILES_1 = [ 'a.py', 'b.py' ]
A_PY_LINES_1 = [1,2]
B_PY_LINES_1 = [3]
DATA_2 = { 'a.py': {1:None, 5:None}, 'c.py': {17:None} }
SUMMARY_1_2 = { 'a.py':3, 'b.py':1, 'c.py':1 }
MEASURED_FILES_1_2 = [ 'a.py', 'b.py', 'c.py' ]
ARC_DATA_3 = { 'x.py': {(1,2):None, (2,3):None}, 'y.py': {(17,23):None} }
X_PY_ARCS_3 = [(1,2), (2,3)]
Y_PY_ARCS_3 = [(17,23)]
class DataTest(CoverageTest):
"""Test cases for coverage.data."""
run_in_temp_dir = False
def assert_summary(self, covdata, summary, fullpath=False):
"""Check that the summary of `covdata` is `summary`."""
self.assertEqual(covdata.summary(fullpath), summary)
def assert_measured_files(self, covdata, measured):
"""Check that `covdata`'s measured files are `measured`."""
self.assertCountEqual(covdata.measured_files(), measured)
def test_reading_empty(self):
covdata = CoverageData()
covdata.read()
self.assert_summary(covdata, {})
def test_adding_data(self):
covdata = CoverageData()
covdata.add_line_data(DATA_1)
self.assert_summary(covdata, SUMMARY_1)
self.assert_measured_files(covdata, MEASURED_FILES_1)
def test_touch_file(self):
covdata = CoverageData()
covdata.add_line_data(DATA_1)
covdata.touch_file('x.py')
self.assert_measured_files(covdata, MEASURED_FILES_1 + ['x.py'])
def test_writing_and_reading(self):
covdata1 = CoverageData()
covdata1.add_line_data(DATA_1)
covdata1.write()
covdata2 = CoverageData()
covdata2.read()
self.assert_summary(covdata2, SUMMARY_1)
def test_combining(self):
covdata1 = CoverageData()
covdata1.add_line_data(DATA_1)
covdata1.write(suffix='1')
covdata2 = CoverageData()
covdata2.add_line_data(DATA_2)
covdata2.write(suffix='2')
covdata3 = CoverageData()
covdata3.combine_parallel_data()
self.assert_summary(covdata3, SUMMARY_1_2)
self.assert_measured_files(covdata3, MEASURED_FILES_1_2)
def test_erasing(self):
covdata1 = CoverageData()
covdata1.add_line_data(DATA_1)
covdata1.write()
covdata1.erase()
self.assert_summary(covdata1, {})
covdata2 = CoverageData()
covdata2.read()
self.assert_summary(covdata2, {})
def test_file_format(self):
# Write with CoverageData, then read the pickle explicitly.
covdata = CoverageData()
covdata.add_line_data(DATA_1)
covdata.write()
with open(".coverage", 'rb') as fdata:
data = pickle.load(fdata)
lines = data['lines']
self.assertCountEqual(lines.keys(), MEASURED_FILES_1)
self.assertCountEqual(lines['a.py'], A_PY_LINES_1)
self.assertCountEqual(lines['b.py'], B_PY_LINES_1)
# If not measuring branches, there's no arcs entry.
self.assertEqual(data.get('arcs', 'not there'), 'not there')
def test_file_format_with_arcs(self):
# Write with CoverageData, then read the pickle explicitly.
covdata = CoverageData()
covdata.add_arc_data(ARC_DATA_3)
covdata.write()
with open(".coverage", 'rb') as fdata:
data = pickle.load(fdata)
self.assertCountEqual(data['lines'].keys(), [])
arcs = data['arcs']
self.assertCountEqual(arcs['x.py'], X_PY_ARCS_3)
self.assertCountEqual(arcs['y.py'], Y_PY_ARCS_3)
def test_combining_with_aliases(self):
covdata1 = CoverageData()
covdata1.add_line_data({
'/home/ned/proj/src/a.py': {1:None, 2:None},
'/home/ned/proj/src/sub/b.py': {3:None},
})
covdata1.write(suffix='1')
covdata2 = CoverageData()
covdata2.add_line_data({
r'c:\ned\test\a.py': {4:None, 5:None},
r'c:\ned\test\sub\b.py': {6:None},
})
covdata2.write(suffix='2')
covdata3 = CoverageData()
aliases = PathAliases()
aliases.add("/home/ned/proj/src/", "./")
aliases.add(r"c:\ned\test", "./")
covdata3.combine_parallel_data(aliases=aliases)
self.assert_summary(
covdata3, { './a.py':4, './sub/b.py':2 }, fullpath=True
)
self.assert_measured_files(covdata3, [ './a.py', './sub/b.py' ])