diff --git a/lcov_cobertura/lcov_cobertura.py b/lcov_cobertura/lcov_cobertura.py index 172d4ae..990c2ac 100755 --- a/lcov_cobertura/lcov_cobertura.py +++ b/lcov_cobertura/lcov_cobertura.py @@ -204,7 +204,13 @@ def parse(self, **kwargs): file_branches_covered = int(line_parts[1]) elif input_type == 'FN': # FN:5,(anonymous_1) - function_line, function_name = line_parts[-1].strip().split(',', 1) + tokens = line_parts[-1].strip().split(',') + # support functions with commas + fname = ','.join(ch for ch in tokens if not ch.isdigit()) + if (len(tokens) == 3): + function_line, function_line_ends, function_name = tokens[:2] + [fname] + else: + function_line, function_name = tokens[:1] + [fname] file_methods[function_name] = [function_line, '0'] elif input_type == 'FNDA': # FNDA:0,(anonymous_1) diff --git a/test/test_lcov_cobertura.py b/test/test_lcov_cobertura.py index 1523dae..f8f295b 100755 --- a/test/test_lcov_cobertura.py +++ b/test/test_lcov_cobertura.py @@ -32,12 +32,13 @@ def test_parse(self): def test_parse_with_functions(self): converter = LcovCobertura( - 'TN:\nSF:foo/file.ext\nDA:1,1\nDA:2,0\nFN:1,(anonymous_1)\nFN:2,namedFn\nFNDA:1,(anonymous_1)\nend_of_record\n') + 'TN:\nSF:foo/file.ext\nDA:1,1\nDA:2,0\nFN:1,(anonymous_1)\nFN:1,2,(anonymous_2)\nFN:2,namedFn\nFNDA:1,(anonymous_1)\nend_of_record\n') result = converter.parse() self.assertEqual(result['packages']['foo']['line-rate'], '0.5') self.assertEqual(result['packages']['foo']['lines-covered'], 1) self.assertEqual(result['packages']['foo']['lines-total'], 2) self.assertEqual(result['packages']['foo']['classes']['foo/file.ext']['methods']['(anonymous_1)'], ['1', '1']) + self.assertEqual(result['packages']['foo']['classes']['foo/file.ext']['methods']['(anonymous_2)'], ['1', '0']) self.assertEqual(result['packages']['foo']['classes']['foo/file.ext']['methods']['namedFn'], ['2', '0']) def test_parse_with_checksum(self): @@ -138,7 +139,7 @@ def test_treat_non_integer_line_execution_count_as_zero(self): def test_support_function_names_with_commas(self): converter = LcovCobertura( - 'TN:\nSF:foo/file.ext\nDA:1,1\nDA:2,0\nFN:1,(anonymous_1)\nFN:2,namedFn\nFNDA:1,(anonymous_1)\nend_of_record\n') + 'TN:\nSF:foo/file.ext\nDA:1,1\nDA:2,0\nFN:1,2,(anonymous_1)\nFN:2,namedFn\nFNDA:1,(anonymous_1)\nend_of_record\n') result = converter.parse() self.assertEqual(result['packages']['foo']['classes']['foo/file.ext']['methods']['(anonymous_1)'], ['1', '1']) self.assertEqual(result['packages']['foo']['classes']['foo/file.ext']['methods']['namedFn'], ['2', '0'])