def parser_roundtrip(self, lcov_string): with TempFile(lcov_string) as fname: file_obj = lcov_rewriter.LcovFile([fname]) out = StringIO() file_obj.print_file(out, lambda s: (s, None), lambda x, pp: x) return out.getvalue()
def test_remap_lcov(self): pp_remap = { "1941,2158": ("dropPreview.js", 6), "2159,2331": ("updater.js", 6), "2584,2674": ("intro.js", 6), "2332,2443": ("undo.js", 6), "864,985": ("cells.js", 6), "2444,2454": ("search.js", 6), "1567,1712": ("drop.js", 6), "2455,2583": ("customize.js", 6), "1713,1940": ("dropTargetShim.js", 6), "1402,1548": ("drag.js", 6), "1549,1566": ("dragDataHelper.js", 6), "453,602": ("page.js", 141), "2675,2678": ("newTab.js", 70), "56,321": ("transformations.js", 6), "603,863": ("grid.js", 6), "322,452": ("page.js", 6), "986,1401": ("sites.js", 6), } fpath = os.path.join(here, "sample_lcov.info") # Read original records lcov_file = lcov_rewriter.LcovFile([fpath]) records = [ lcov_file.parse_record(r) for _, _, r in lcov_file.iterate_records() ] # This summarization changes values due multiple reports per line coming # from the JS engine (bug 1198356). for r in records: r.resummarize() original_line_count = r.line_count original_covered_line_count = r.covered_line_count original_function_count = r.function_count original_covered_function_count = r.covered_function_count self.assertEqual(len(records), 1) # Rewrite preprocessed entries. lcov_file = lcov_rewriter.LcovFile([fpath]) r_num = [] def rewrite_source(s): r_num.append(1) return s, pp_remap out = StringIO() lcov_file.print_file(out, rewrite_source, self.pp_rewriter.rewrite_record) self.assertEqual(len(r_num), 1) # Read rewritten lcov. with TempFile(out.getvalue()) as fname: lcov_file = lcov_rewriter.LcovFile([fname]) records = [ lcov_file.parse_record(r) for _, _, r in lcov_file.iterate_records() ] self.assertEqual(len(records), 17) # Lines/functions are only "moved" between records, not duplicated or omited. self.assertEqual(original_line_count, sum(r.line_count for r in records)) self.assertEqual(original_covered_line_count, sum(r.covered_line_count for r in records)) self.assertEqual(original_function_count, sum(r.function_count for r in records)) self.assertEqual( original_covered_function_count, sum(r.covered_function_count for r in records), )
def get_lcov(self, lcov_string): fh = StringIO(lcov_string) return lcov_rewriter.LcovFile(fh)
def get_lcov_file(self, name): fpath = os.path.join(here, name) with open(fpath) as fh: lcov_file = lcov_rewriter.LcovFile(fh) return lcov_file
def test_remap_lcov(self): pp_remap = { (1941, 2158): ('dropPreview.js', 6), (2159, 2331): ('updater.js', 6), (2584, 2674): ('intro.js', 6), (2332, 2443): ('undo.js', 6), (864, 985): ('cells.js', 6), (2444, 2454): ('search.js', 6), (1567, 1712): ('drop.js', 6), (2455, 2583): ('customize.js', 6), (1713, 1940): ('dropTargetShim.js', 6), (1402, 1548): ('drag.js', 6), (1549, 1566): ('dragDataHelper.js', 6), (453, 602): ('page.js', 141), (2675, 2678): ('newTab.js', 70), (56, 321): ('transformations.js', 6), (603, 863): ('grid.js', 6), (322, 452): ('page.js', 6), (986, 1401): ('sites.js', 6) } self.pp_rewriter.pp_info['lcov_test_newTab.js'] = pp_remap fpath = os.path.join(here, 'sample_lcov.info') # Read original records lcov_file = lcov_rewriter.LcovFile([fpath]) records = [ lcov_file.parse_record(r) for _, _, r in lcov_file.iterate_records() ] # This summarization changes values due multiple reports per line coming # from the JS engine (bug 1198356). for r in records: r.resummarize() original_line_count = r.line_count original_covered_line_count = r.covered_line_count original_function_count = r.function_count original_covered_function_count = r.covered_function_count self.assertEqual(len(records), 1) # Rewrite preprocessed entries. lcov_file = lcov_rewriter.LcovFile([fpath]) r_num = [] def rewrite_source(s): r_num.append(1) return s, self.pp_rewriter.has_pp_info(s) out = StringIO() lcov_file.print_file(out, rewrite_source, self.pp_rewriter.rewrite_record) self.assertEqual(len(r_num), 1) # Read rewritten lcov. with TempFile(out.getvalue()) as fname: lcov_file = lcov_rewriter.LcovFile([fname]) records = [ lcov_file.parse_record(r) for _, _, r in lcov_file.iterate_records() ] self.assertEqual(len(records), 17) # Lines/functions are only "moved" between records, not duplicated or omited. self.assertEqual(original_line_count, sum(r.line_count for r in records)) self.assertEqual(original_covered_line_count, sum(r.covered_line_count for r in records)) self.assertEqual(original_function_count, sum(r.function_count for r in records)) self.assertEqual(original_covered_function_count, sum(r.covered_function_count for r in records))