diff --git a/spec/coverage_reporter/parsers/lcov_parser_spec.cr b/spec/coverage_reporter/parsers/lcov_parser_spec.cr index b8917ad1..8f346b33 100644 --- a/spec/coverage_reporter/parsers/lcov_parser_spec.cr +++ b/spec/coverage_reporter/parsers/lcov_parser_spec.cr @@ -57,5 +57,35 @@ Spectator.describe CoverageReporter::LcovParser do }) end end + + context "when referenced files from the same folder" do + let(filename) { "spec/fixtures/lcov/test-current-folder.lcov" } + + it "parses correctly" do + reports = subject.parse(filename) + + expect(reports.size).to eq 1 + expect(reports[0].to_h).to eq({ + :name => "spec/fixtures/lcov/test.js", + :coverage => coverage, + :source_digest => "6e7aea5aa7198489561a44359dc7e1a4", + }) + end + end + + context "when referenced files from the parent folder" do + let(filename) { "spec/fixtures/lcov/coverage/test.lcov" } + + it "parses correctly" do + reports = subject.parse(filename) + + expect(reports.size).to eq 1 + expect(reports[0].to_h).to eq({ + :name => "spec/fixtures/lcov/test.js", + :coverage => coverage, + :source_digest => "6e7aea5aa7198489561a44359dc7e1a4", + }) + end + end end end diff --git a/spec/fixtures/lcov/coverage/test.lcov b/spec/fixtures/lcov/coverage/test.lcov new file mode 100644 index 00000000..a216367b --- /dev/null +++ b/spec/fixtures/lcov/coverage/test.lcov @@ -0,0 +1,123 @@ +SF:dist/ +FNF:0 +FNH:0 +DA:1,1 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +SF:spec/fixtures/lcov/test.js +DA:1,1 +DA:2,1 +DA:3,1 +DA:5,1 +DA:6,66 +DA:7,66 +DA:10,1 +DA:11,323 +DA:12,63 +DA:13,63 +DA:14,63 +DA:15,60 +DA:17,3 +DA:19,63 +DA:20,32 +DA:22,63 +DA:23,63 +DA:24,63 +DA:25,3 +DA:27,63 +DA:28,60 +DA:30,3 +DA:32,63 +DA:33,27 +DA:34,27 +DA:35,27 +DA:38,323 +DA:41,1 +DA:42,5 +DA:43,5 +DA:45,2 +DA:48,3 +DA:49,3 +DA:50,1 +DA:51,1 +DA:52,1 +DA:53,1 +DA:55,0 +DA:58,2 +DA:59,2 +DA:60,2 +DA:61,0 +DA:63,2 +DA:66,2 +DA:67,2 +DA:72,1 +DA:73,1 +DA:74,1 +DA:75,1 +DA:76,1 +DA:77,1 +DA:79,1 +DA:80,1 +DA:82,1 +DA:83,87 +DA:84,87 +DA:85,6 +DA:86,6 +DA:87,6 +DA:88,6 +DA:89,9 +DA:90,6 +DA:91,6 +DA:93,81 +DA:97,1 +DA:98,1 +DA:101,1 +DA:102,1 +DA:105,1 +DA:107,2 +DA:108,2 +DA:109,2 +DA:110,1 +DA:112,2 +DA:115,1 +DA:116,3 +DA:117,1 +DA:118,1 +DA:121,2 +DA:122,2 +DA:123,2 +DA:125,1 +DA:126,1 +DA:128,2 +DA:132,1 +DA:133,1 +DA:136,1 +DA:137,50 +DA:138,50 +DA:139,50 +DA:140,50 +DA:141,20 +DA:143,50 +DA:144,50 +DA:145,2 +DA:147,50 +DA:148,50 +DA:149,50 +DA:150,31 +DA:152,50 +DA:153,24 +DA:155,50 +DA:210,40 +DA:212,1 +DA:213,8 +DA:214,6 +DA:216,8 +DA:217,186 +DA:218,21 +DA:219,21 +DA:220,21 +DA:222,165 +end_of_record diff --git a/spec/fixtures/lcov/test-current-folder.lcov b/spec/fixtures/lcov/test-current-folder.lcov new file mode 100644 index 00000000..949592ef --- /dev/null +++ b/spec/fixtures/lcov/test-current-folder.lcov @@ -0,0 +1,123 @@ +SF:dist/ +FNF:0 +FNH:0 +DA:1,1 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +SF:test.js +DA:1,1 +DA:2,1 +DA:3,1 +DA:5,1 +DA:6,66 +DA:7,66 +DA:10,1 +DA:11,323 +DA:12,63 +DA:13,63 +DA:14,63 +DA:15,60 +DA:17,3 +DA:19,63 +DA:20,32 +DA:22,63 +DA:23,63 +DA:24,63 +DA:25,3 +DA:27,63 +DA:28,60 +DA:30,3 +DA:32,63 +DA:33,27 +DA:34,27 +DA:35,27 +DA:38,323 +DA:41,1 +DA:42,5 +DA:43,5 +DA:45,2 +DA:48,3 +DA:49,3 +DA:50,1 +DA:51,1 +DA:52,1 +DA:53,1 +DA:55,0 +DA:58,2 +DA:59,2 +DA:60,2 +DA:61,0 +DA:63,2 +DA:66,2 +DA:67,2 +DA:72,1 +DA:73,1 +DA:74,1 +DA:75,1 +DA:76,1 +DA:77,1 +DA:79,1 +DA:80,1 +DA:82,1 +DA:83,87 +DA:84,87 +DA:85,6 +DA:86,6 +DA:87,6 +DA:88,6 +DA:89,9 +DA:90,6 +DA:91,6 +DA:93,81 +DA:97,1 +DA:98,1 +DA:101,1 +DA:102,1 +DA:105,1 +DA:107,2 +DA:108,2 +DA:109,2 +DA:110,1 +DA:112,2 +DA:115,1 +DA:116,3 +DA:117,1 +DA:118,1 +DA:121,2 +DA:122,2 +DA:123,2 +DA:125,1 +DA:126,1 +DA:128,2 +DA:132,1 +DA:133,1 +DA:136,1 +DA:137,50 +DA:138,50 +DA:139,50 +DA:140,50 +DA:141,20 +DA:143,50 +DA:144,50 +DA:145,2 +DA:147,50 +DA:148,50 +DA:149,50 +DA:150,31 +DA:152,50 +DA:153,24 +DA:155,50 +DA:210,40 +DA:212,1 +DA:213,8 +DA:214,6 +DA:216,8 +DA:217,186 +DA:218,21 +DA:219,21 +DA:220,21 +DA:222,165 +end_of_record diff --git a/src/coverage_reporter/parsers/lcov_parser.cr b/src/coverage_reporter/parsers/lcov_parser.cr index c52d7484..ccf087e2 100644 --- a/src/coverage_reporter/parsers/lcov_parser.cr +++ b/src/coverage_reporter/parsers/lcov_parser.cr @@ -27,9 +27,12 @@ module CoverageReporter def parse(filename : String) : Array(FileReport) lcov_info(filename).compact_map do |name, info| - next unless File.exists?(name) + next report(name, info) if File.exists?(name) - report(name, info) + Path[filename].parents.each do |parent| + lcov_related = parent / name + break report(lcov_related.to_s, info) if File.exists?(lcov_related) + end end end