From 24918e80502c818868099495691854c5b503fa4a Mon Sep 17 00:00:00 2001 From: Jeanine Soterwood Date: Thu, 2 May 2024 14:43:49 -0700 Subject: [PATCH 01/10] When coverage_format is specified, limit files to those specifically for the parser --- spec/coverage_reporter/parser_spec.cr | 64 ++++++++++++++++++- src/coverage_reporter/parser.cr | 29 ++++----- .../parsers/coveragepy_parser.cr | 24 +++---- 3 files changed, 86 insertions(+), 31 deletions(-) diff --git a/spec/coverage_reporter/parser_spec.cr b/spec/coverage_reporter/parser_spec.cr index b5760156..8a6bbb80 100644 --- a/spec/coverage_reporter/parser_spec.cr +++ b/spec/coverage_reporter/parser_spec.cr @@ -38,6 +38,7 @@ Spectator.describe CoverageReporter::Parser do context "when coverage format forced (lcov)" do let(coverage_format) { "lcov" } + let(coverage_files) { nil } it "returns report only for specified format" do reports = subject.parse @@ -107,10 +108,67 @@ Spectator.describe CoverageReporter::Parser do end context "for all files" do - it "returns reports for all files" do - reports = subject.parse + context "when coveragepy is installed" do + it "returns reports for all files" do + reports = subject.parse + + puts reports.inspect + + expect(reports.size).to be > 2 + end + end + + context "when coveragepy is not installed" do + it "returns reports for all files" do + path = ENV["PATH"] + ENV.delete("PATH") + + reports = subject.parse + + expect(reports.size).to be > 2 + + ENV["PATH"] = path + end + end + end + end + + describe "#files" do + context "when no coverage_format specified" do + it "returns all possible files across all formats" do + files = subject.files + + expect(files).to match_array [ + "spec/fixtures/lcov/coverage/test.lcov", + "spec/fixtures/lcov/test.lcov", + "spec/fixtures/lcov/test-current-folder.lcov", + "spec/fixtures/lcov/empty.lcov", + "spec/fixtures/simplecov/.resultset.json", + "spec/fixtures/clover/clover.xml", + "spec/fixtures/cobertura/cobertura.xml", + "spec/fixtures/python/coverage.xml", + "spec/fixtures/cobertura/cobertura-coverage.xml", + "spec/fixtures/jacoco/jacoco-oneline-report.xml", + "spec/fixtures/jacoco/jacoco-report-multiple-packages.xml", + "spec/fixtures/jacoco/jacoco-report.xml", + "spec/fixtures/gcov/main.c.gcov", + "spec/fixtures/python/.coverage", + "spec/fixtures/coveralls/coveralls.json" + ] + end + end + + context "when coverage_format specified" do + let(coverage_format) { "cobertura" } + + it "only returns possible files for the specified format" do + files = subject.files - expect(reports.size).to be > 2 + expect(files).to match_array [ + "spec/fixtures/cobertura/cobertura.xml", + "spec/fixtures/python/coverage.xml", + "spec/fixtures/cobertura/cobertura-coverage.xml", + ] end end end diff --git a/src/coverage_reporter/parser.cr b/src/coverage_reporter/parser.cr index 6956603c..4aac8351 100644 --- a/src/coverage_reporter/parser.cr +++ b/src/coverage_reporter/parser.cr @@ -49,7 +49,17 @@ module CoverageReporter end def initialize(@coverage_files : Array(String) | Nil, @coverage_format : String?, @base_path : String?) - @parsers = PARSERS.map(&.new(@base_path)).to_a + @parsers = if @coverage_format + Log.info("✏️ Forced coverage format: #{@coverage_format}") + parser_class = PARSERS.find { |klass| klass.name == @coverage_format } + if parser_class + [parser_class.new(base_path)] + else + raise InvalidCoverageFormat.new(coverage_format) + end + else + PARSERS.map(&.new(@base_path)).to_a + end end # Returns coverage report files that can be parsed by utility. @@ -79,22 +89,6 @@ module CoverageReporter end def parse : SourceFiles - if coverage_format - Log.info("✏️ Forced coverage format: #{coverage_format}") - parser_class = PARSERS.find { |klass| klass.name == coverage_format } - if parser_class - parser = parser_class.new(base_path) - source_files = SourceFiles.new - files.each do |filename| - source_files.add(parser.parse(filename), filename) - end - - return source_files - else - raise InvalidCoverageFormat.new(coverage_format) - end - end - source_files = SourceFiles.new files.each do |filename| source_files.add(parse_file(filename), filename) @@ -105,6 +99,7 @@ module CoverageReporter private def parse_file(filename : String) parsers.each do |parser| + # Log.debug("parser: #{parser.class.name}, filename: #{filename}") next unless parser.matches?(filename) Log.debug("☝️ Detected coverage format: #{parser.class.name} - #{filename}") diff --git a/src/coverage_reporter/parsers/coveragepy_parser.cr b/src/coverage_reporter/parsers/coveragepy_parser.cr index fa06d84e..958b4e1d 100644 --- a/src/coverage_reporter/parsers/coveragepy_parser.cr +++ b/src/coverage_reporter/parsers/coveragepy_parser.cr @@ -16,7 +16,6 @@ module CoverageReporter "**/*/.coverage", ] end - def matches?(filename : String) : Bool valid_file_exists = File.open(filename) do |f| f.read_at(0, 15) do |io| @@ -41,17 +40,8 @@ module CoverageReporter parser = CoberturaParser.new(@base_path) parser.parse(tmpfile.path) else - error_message = - %Q|There was an error processing #{filename}: #{error} + error_message = "There was an error processing #{filename}: #{error}\n\n#{missing_coverage_executable_message}" -To use the #{self.class.name} format, do one of the following: -1. Make sure that the coverage executable is available in the - runner environment, or -2. Convert the .coverage file to a coverage.xml file by running - `coverage xml`. Then pass the input option `format: cobertura` - (for Coveralls GitHub Action or orb), or pass `--format=cobertura` - if using the coverage reporter alone. -| raise ParserError.new(error_message) end ensure @@ -73,8 +63,20 @@ To use the #{self.class.name} format, do one of the following: true else Log.debug("⚠️ Detected coverage format: #{self.class.name}, but error with coverage executable: #{error}") + Log.debug(missing_coverage_executable_message) false end end + + private def missing_coverage_executable_message + %Q|To use the #{self.class.name} format, do one of the following: +1. Make sure that the coverage executable is available in the + runner environment, or +2. Convert the .coverage file to a coverage.xml file by running + `coverage xml`. Then pass the input option `format: cobertura` + (for Coveralls GitHub Action or orb), or pass `--format=cobertura` + if using the coverage reporter alone. +| + end end end From b4c939d99eb778e68bebc59057f205bbd8f2e614 Mon Sep 17 00:00:00 2001 From: Jeanine Soterwood Date: Thu, 2 May 2024 15:02:07 -0700 Subject: [PATCH 02/10] Raise error in coveragepy parser matches? method if forcing python but coverage is not installed --- .../parsers/coveragepy_parser_spec.cr | 9 +++++++++ .../parsers/coveragepy_parser.cr | 18 ++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/spec/coverage_reporter/parsers/coveragepy_parser_spec.cr b/spec/coverage_reporter/parsers/coveragepy_parser_spec.cr index 1cd52764..9ebb411f 100644 --- a/spec/coverage_reporter/parsers/coveragepy_parser_spec.cr +++ b/spec/coverage_reporter/parsers/coveragepy_parser_spec.cr @@ -18,6 +18,15 @@ Spectator.describe CoverageReporter::CoveragepyParser do ENV["PATH"] = path end + + it "raises error if format is forced but coverage program is not installed" do + path = ENV["PATH"] + ENV.delete("PATH") + + expect { subject.matches?("spec/fixtures/python/.coverage", true) }.to raise_error(CoverageReporter::CoveragepyParser::ParserError) + + ENV["PATH"] = path + end end describe "#parse" do diff --git a/src/coverage_reporter/parsers/coveragepy_parser.cr b/src/coverage_reporter/parsers/coveragepy_parser.cr index 958b4e1d..a08f8a09 100644 --- a/src/coverage_reporter/parsers/coveragepy_parser.cr +++ b/src/coverage_reporter/parsers/coveragepy_parser.cr @@ -16,14 +16,16 @@ module CoverageReporter "**/*/.coverage", ] end - def matches?(filename : String) : Bool + def matches?(filename : String, forced : Bool = false) : Bool valid_file_exists = File.open(filename) do |f| f.read_at(0, 15) do |io| io.gets.try(&.downcase) == "sqlite format 3" end end - valid_file_exists && check_for_coverage_executable + valid_file_exists && check_for_coverage_executable(forced) + rescue error : ParserError + raise error rescue Exception false end @@ -51,7 +53,7 @@ module CoverageReporter end end - private def check_for_coverage_executable + private def check_for_coverage_executable(forced : Bool = false) error = IO::Memory.new process_status = Process.run( command: "coverage --version", @@ -62,9 +64,13 @@ module CoverageReporter if process_status.success? true else - Log.debug("⚠️ Detected coverage format: #{self.class.name}, but error with coverage executable: #{error}") - Log.debug(missing_coverage_executable_message) - false + if forced + raise ParserError.new(missing_coverage_executable_message) + else + Log.debug("⚠️ Detected coverage format: #{self.class.name}, but error with coverage executable: #{error}") + Log.debug(missing_coverage_executable_message) + false + end end end From e5fcd51ad20a5d1ae1123b639af73dc7d4075a76 Mon Sep 17 00:00:00 2001 From: Jeanine Soterwood Date: Thu, 2 May 2024 15:06:38 -0700 Subject: [PATCH 03/10] minor spec fix --- spec/coverage_reporter/parser_spec.cr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/coverage_reporter/parser_spec.cr b/spec/coverage_reporter/parser_spec.cr index 8a6bbb80..695d3b2b 100644 --- a/spec/coverage_reporter/parser_spec.cr +++ b/spec/coverage_reporter/parser_spec.cr @@ -84,9 +84,9 @@ Spectator.describe CoverageReporter::Parser do context "when a file is specified and coverage is not installed" do let(coverage_files) { ["spec/fixtures/python/.coverage"] } - let(base_path) { "spec/fixtures/lcov" } + let(base_path) { "spec/fixtures/python" } - it "returns report only for specified file" do + it "raises error" do path = ENV["PATH"] ENV.delete("PATH") From a0bc39e2c327bbbb38d6f738522ba4f850254707 Mon Sep 17 00:00:00 2001 From: Jeanine Soterwood Date: Thu, 2 May 2024 15:15:20 -0700 Subject: [PATCH 04/10] Move forced variable to parser base class initializer --- .../parsers/coveragepy_parser_spec.cr | 36 +++++++++++-------- src/coverage_reporter/parser.cr | 2 +- src/coverage_reporter/parsers/base_parser.cr | 2 +- .../parsers/cobertura_parser.cr | 5 --- .../parsers/coveragepy_parser.cr | 8 ++--- .../parsers/coveralls_parser.cr | 3 -- src/coverage_reporter/parsers/lcov_parser.cr | 4 --- 7 files changed, 27 insertions(+), 33 deletions(-) diff --git a/spec/coverage_reporter/parsers/coveragepy_parser_spec.cr b/spec/coverage_reporter/parsers/coveragepy_parser_spec.cr index 9ebb411f..30bc1ca1 100644 --- a/spec/coverage_reporter/parsers/coveragepy_parser_spec.cr +++ b/spec/coverage_reporter/parsers/coveragepy_parser_spec.cr @@ -4,28 +4,34 @@ Spectator.describe CoverageReporter::CoveragepyParser do subject { described_class.new(nil) } describe "#matches?" do - it "matches only SQLite3 db file" do - expect(subject.matches?("spec/fixtures/python/.coverage")).to eq true - expect(subject.matches?("spec/fixtures/python/.coverage-non-existing")).to eq false - expect(subject.matches?("spec/fixtures/golang/coverage.out")).to eq false - end + context "when format is not forced" do + it "matches only SQLite3 db file" do + expect(subject.matches?("spec/fixtures/python/.coverage")).to eq true + expect(subject.matches?("spec/fixtures/python/.coverage-non-existing")).to eq false + expect(subject.matches?("spec/fixtures/golang/coverage.out")).to eq false + end - it "does not match if coverage program is not installed" do - path = ENV["PATH"] - ENV.delete("PATH") + it "does not match if coverage program is not installed" do + path = ENV["PATH"] + ENV.delete("PATH") - expect(subject.matches?("spec/fixtures/python/.coverage")).to be_falsey + expect(subject.matches?("spec/fixtures/python/.coverage")).to be_falsey - ENV["PATH"] = path + ENV["PATH"] = path + end end - it "raises error if format is forced but coverage program is not installed" do - path = ENV["PATH"] - ENV.delete("PATH") + context "when format is forced" do + subject { described_class.new(nil, true) } - expect { subject.matches?("spec/fixtures/python/.coverage", true) }.to raise_error(CoverageReporter::CoveragepyParser::ParserError) + it "raises error if format is forced but coverage program is not installed" do + path = ENV["PATH"] + ENV.delete("PATH") - ENV["PATH"] = path + expect { subject.matches?("spec/fixtures/python/.coverage") }.to raise_error(CoverageReporter::CoveragepyParser::ParserError) + + ENV["PATH"] = path + end end end diff --git a/src/coverage_reporter/parser.cr b/src/coverage_reporter/parser.cr index 4aac8351..37b3928e 100644 --- a/src/coverage_reporter/parser.cr +++ b/src/coverage_reporter/parser.cr @@ -53,7 +53,7 @@ module CoverageReporter Log.info("✏️ Forced coverage format: #{@coverage_format}") parser_class = PARSERS.find { |klass| klass.name == @coverage_format } if parser_class - [parser_class.new(base_path)] + [parser_class.new(base_path, true)] else raise InvalidCoverageFormat.new(coverage_format) end diff --git a/src/coverage_reporter/parsers/base_parser.cr b/src/coverage_reporter/parsers/base_parser.cr index f1c552b7..43399879 100644 --- a/src/coverage_reporter/parsers/base_parser.cr +++ b/src/coverage_reporter/parsers/base_parser.cr @@ -45,7 +45,7 @@ module CoverageReporter # # *base_path* can be used to join with all paths in coverage report in order # to properly reference a file. - def initialize(@base_path : String? = nil) + def initialize(@base_path : String? = nil, @forced : Bool = false) end # Creates a `FileReport` instance. Use this method instead of explicit diff --git a/src/coverage_reporter/parsers/cobertura_parser.cr b/src/coverage_reporter/parsers/cobertura_parser.cr index 537a96a4..999c95f6 100644 --- a/src/coverage_reporter/parsers/cobertura_parser.cr +++ b/src/coverage_reporter/parsers/cobertura_parser.cr @@ -7,11 +7,6 @@ module CoverageReporter coverage : Hash(Line, Hits?), branches : Hash(Line, Array(Hits)) - # NOTE: Provide the base path for the sources. You can check "filename" in - # coverage report and see what part is missing to get a valid source path. - def initialize(@base_path : String?) - end - def globs : Array(String) [ "**/*/cobertura.xml", diff --git a/src/coverage_reporter/parsers/coveragepy_parser.cr b/src/coverage_reporter/parsers/coveragepy_parser.cr index a08f8a09..0881c80e 100644 --- a/src/coverage_reporter/parsers/coveragepy_parser.cr +++ b/src/coverage_reporter/parsers/coveragepy_parser.cr @@ -16,14 +16,14 @@ module CoverageReporter "**/*/.coverage", ] end - def matches?(filename : String, forced : Bool = false) : Bool + def matches?(filename : String ) : Bool valid_file_exists = File.open(filename) do |f| f.read_at(0, 15) do |io| io.gets.try(&.downcase) == "sqlite format 3" end end - valid_file_exists && check_for_coverage_executable(forced) + valid_file_exists && check_for_coverage_executable rescue error : ParserError raise error rescue Exception @@ -53,7 +53,7 @@ module CoverageReporter end end - private def check_for_coverage_executable(forced : Bool = false) + private def check_for_coverage_executable error = IO::Memory.new process_status = Process.run( command: "coverage --version", @@ -64,7 +64,7 @@ module CoverageReporter if process_status.success? true else - if forced + if @forced raise ParserError.new(missing_coverage_executable_message) else Log.debug("⚠️ Detected coverage format: #{self.class.name}, but error with coverage executable: #{error}") diff --git a/src/coverage_reporter/parsers/coveralls_parser.cr b/src/coverage_reporter/parsers/coveralls_parser.cr index 1d9fa4a8..866d885b 100644 --- a/src/coverage_reporter/parsers/coveralls_parser.cr +++ b/src/coverage_reporter/parsers/coveralls_parser.cr @@ -17,9 +17,6 @@ module CoverageReporter property source_files : Array(SourceFiles) end - def initialize(@base_path : String?) - end - def globs : Array(String) [ "coveralls.json", diff --git a/src/coverage_reporter/parsers/lcov_parser.cr b/src/coverage_reporter/parsers/lcov_parser.cr index 2e5d46db..c04aa40f 100644 --- a/src/coverage_reporter/parsers/lcov_parser.cr +++ b/src/coverage_reporter/parsers/lcov_parser.cr @@ -13,10 +13,6 @@ module CoverageReporter BRANCH_COVERAGE_RE = Regex.new("\\ABRDA:(\\d+),(\\d+),(\\d+),(\\d+|-)", Regex::CompileOptions::MATCH_INVALID_UTF) END_RE = Regex.new("\\Aend_of_record", Regex::CompileOptions::MATCH_INVALID_UTF) - # Use *base_path* to join with paths found in reports. - def initialize(@base_path : String?) - end - def globs : Array(String) [ "*.lcov", From 04cf41c22230d5105af806eb7c97205fb4e07fa8 Mon Sep 17 00:00:00 2001 From: Jeanine Soterwood Date: Thu, 2 May 2024 15:25:06 -0700 Subject: [PATCH 05/10] Rename lcov file to valid lcov extension --- spec/coverage_reporter/parser_spec.cr | 2 +- spec/coverage_reporter/parsers/lcov_parser_spec.cr | 2 +- spec/fixtures/lcov/{for-base-path-lcov => for-base-path.lcov} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename spec/fixtures/lcov/{for-base-path-lcov => for-base-path.lcov} (100%) diff --git a/spec/coverage_reporter/parser_spec.cr b/spec/coverage_reporter/parser_spec.cr index 695d3b2b..1712e883 100644 --- a/spec/coverage_reporter/parser_spec.cr +++ b/spec/coverage_reporter/parser_spec.cr @@ -47,7 +47,7 @@ Spectator.describe CoverageReporter::Parser do end context "when a file is specified" do - let(coverage_files) { ["spec/fixtures/lcov/for-base-path-lcov"] } + let(coverage_files) { ["spec/fixtures/lcov/for-base-path.lcov"] } let(base_path) { "spec/fixtures/lcov" } it "returns report only for specified file" do diff --git a/spec/coverage_reporter/parsers/lcov_parser_spec.cr b/spec/coverage_reporter/parsers/lcov_parser_spec.cr index 881b7803..b89b47e3 100644 --- a/spec/coverage_reporter/parsers/lcov_parser_spec.cr +++ b/spec/coverage_reporter/parsers/lcov_parser_spec.cr @@ -61,7 +61,7 @@ Spectator.describe CoverageReporter::LcovParser do end context "with base path" do - let(filename) { "spec/fixtures/lcov/for-base-path-lcov" } + let(filename) { "spec/fixtures/lcov/for-base-path.lcov" } let(base_path) { "spec/fixtures/lcov" } it "parses correctly" do diff --git a/spec/fixtures/lcov/for-base-path-lcov b/spec/fixtures/lcov/for-base-path.lcov similarity index 100% rename from spec/fixtures/lcov/for-base-path-lcov rename to spec/fixtures/lcov/for-base-path.lcov From f77440d60a036330bb4d8b22252f3d18b009d129 Mon Sep 17 00:00:00 2001 From: Jeanine Soterwood Date: Thu, 2 May 2024 15:32:17 -0700 Subject: [PATCH 06/10] Spec fixes --- spec/coverage_reporter/parser_spec.cr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/coverage_reporter/parser_spec.cr b/spec/coverage_reporter/parser_spec.cr index 1712e883..e8cdf65d 100644 --- a/spec/coverage_reporter/parser_spec.cr +++ b/spec/coverage_reporter/parser_spec.cr @@ -38,7 +38,6 @@ Spectator.describe CoverageReporter::Parser do context "when coverage format forced (lcov)" do let(coverage_format) { "lcov" } - let(coverage_files) { nil } it "returns report only for specified format" do reports = subject.parse @@ -143,6 +142,7 @@ Spectator.describe CoverageReporter::Parser do "spec/fixtures/lcov/test.lcov", "spec/fixtures/lcov/test-current-folder.lcov", "spec/fixtures/lcov/empty.lcov", + "spec/fixtures/lcov/for-base-path.lcov", "spec/fixtures/simplecov/.resultset.json", "spec/fixtures/clover/clover.xml", "spec/fixtures/cobertura/cobertura.xml", From b67036a5b7951f8791dea22115fad3c7361df163 Mon Sep 17 00:00:00 2001 From: Jeanine Soterwood Date: Thu, 2 May 2024 15:36:13 -0700 Subject: [PATCH 07/10] cleanup --- spec/coverage_reporter/parser_spec.cr | 4 +--- spec/coverage_reporter/parsers/coveragepy_parser_spec.cr | 2 +- src/coverage_reporter/parser.cr | 1 - src/coverage_reporter/parsers/coveragepy_parser.cr | 5 +++-- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/spec/coverage_reporter/parser_spec.cr b/spec/coverage_reporter/parser_spec.cr index e8cdf65d..d59cd3a1 100644 --- a/spec/coverage_reporter/parser_spec.cr +++ b/spec/coverage_reporter/parser_spec.cr @@ -111,8 +111,6 @@ Spectator.describe CoverageReporter::Parser do it "returns reports for all files" do reports = subject.parse - puts reports.inspect - expect(reports.size).to be > 2 end end @@ -153,7 +151,7 @@ Spectator.describe CoverageReporter::Parser do "spec/fixtures/jacoco/jacoco-report.xml", "spec/fixtures/gcov/main.c.gcov", "spec/fixtures/python/.coverage", - "spec/fixtures/coveralls/coveralls.json" + "spec/fixtures/coveralls/coveralls.json", ] end end diff --git a/spec/coverage_reporter/parsers/coveragepy_parser_spec.cr b/spec/coverage_reporter/parsers/coveragepy_parser_spec.cr index 30bc1ca1..0e4a9474 100644 --- a/spec/coverage_reporter/parsers/coveragepy_parser_spec.cr +++ b/spec/coverage_reporter/parsers/coveragepy_parser_spec.cr @@ -24,7 +24,7 @@ Spectator.describe CoverageReporter::CoveragepyParser do context "when format is forced" do subject { described_class.new(nil, true) } - it "raises error if format is forced but coverage program is not installed" do + it "raises error if coverage program is not installed" do path = ENV["PATH"] ENV.delete("PATH") diff --git a/src/coverage_reporter/parser.cr b/src/coverage_reporter/parser.cr index 37b3928e..c64c7da4 100644 --- a/src/coverage_reporter/parser.cr +++ b/src/coverage_reporter/parser.cr @@ -99,7 +99,6 @@ module CoverageReporter private def parse_file(filename : String) parsers.each do |parser| - # Log.debug("parser: #{parser.class.name}, filename: #{filename}") next unless parser.matches?(filename) Log.debug("☝️ Detected coverage format: #{parser.class.name} - #{filename}") diff --git a/src/coverage_reporter/parsers/coveragepy_parser.cr b/src/coverage_reporter/parsers/coveragepy_parser.cr index 0881c80e..7383a25b 100644 --- a/src/coverage_reporter/parsers/coveragepy_parser.cr +++ b/src/coverage_reporter/parsers/coveragepy_parser.cr @@ -16,7 +16,8 @@ module CoverageReporter "**/*/.coverage", ] end - def matches?(filename : String ) : Bool + + def matches?(filename : String) : Bool valid_file_exists = File.open(filename) do |f| f.read_at(0, 15) do |io| io.gets.try(&.downcase) == "sqlite format 3" @@ -75,7 +76,7 @@ module CoverageReporter end private def missing_coverage_executable_message - %Q|To use the #{self.class.name} format, do one of the following: + %Q|To use the #{self.class.name} format, do one of the following: 1. Make sure that the coverage executable is available in the runner environment, or 2. Convert the .coverage file to a coverage.xml file by running From 3f71968fcafcc6f4c2fe58bea130de0b0ce1657c Mon Sep 17 00:00:00 2001 From: Jeanine Soterwood Date: Thu, 2 May 2024 16:11:41 -0700 Subject: [PATCH 08/10] add note to spec --- spec/coverage_reporter/parser_spec.cr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/coverage_reporter/parser_spec.cr b/spec/coverage_reporter/parser_spec.cr index d59cd3a1..0335cab4 100644 --- a/spec/coverage_reporter/parser_spec.cr +++ b/spec/coverage_reporter/parser_spec.cr @@ -116,7 +116,7 @@ Spectator.describe CoverageReporter::Parser do end context "when coveragepy is not installed" do - it "returns reports for all files" do + it "returns reports for all files (no error is raised)" do path = ENV["PATH"] ENV.delete("PATH") From c12f51d3d82ac8491ae8637f8dc190405d3baad6 Mon Sep 17 00:00:00 2001 From: Jeanine Soterwood Date: Thu, 2 May 2024 16:23:18 -0700 Subject: [PATCH 09/10] Remove python/coverage.xml from file list (not tracked) --- spec/coverage_reporter/parser_spec.cr | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/coverage_reporter/parser_spec.cr b/spec/coverage_reporter/parser_spec.cr index 0335cab4..88a1bcc2 100644 --- a/spec/coverage_reporter/parser_spec.cr +++ b/spec/coverage_reporter/parser_spec.cr @@ -144,7 +144,6 @@ Spectator.describe CoverageReporter::Parser do "spec/fixtures/simplecov/.resultset.json", "spec/fixtures/clover/clover.xml", "spec/fixtures/cobertura/cobertura.xml", - "spec/fixtures/python/coverage.xml", "spec/fixtures/cobertura/cobertura-coverage.xml", "spec/fixtures/jacoco/jacoco-oneline-report.xml", "spec/fixtures/jacoco/jacoco-report-multiple-packages.xml", @@ -164,7 +163,6 @@ Spectator.describe CoverageReporter::Parser do expect(files).to match_array [ "spec/fixtures/cobertura/cobertura.xml", - "spec/fixtures/python/coverage.xml", "spec/fixtures/cobertura/cobertura-coverage.xml", ] end From aacad6c64311328e218d8cbfeb83173760f1ea01 Mon Sep 17 00:00:00 2001 From: Jeanine Soterwood Date: Thu, 2 May 2024 16:28:43 -0700 Subject: [PATCH 10/10] Be consistent with @ in initializer --- src/coverage_reporter/parser.cr | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/coverage_reporter/parser.cr b/src/coverage_reporter/parser.cr index c64c7da4..8d2ea58d 100644 --- a/src/coverage_reporter/parser.cr +++ b/src/coverage_reporter/parser.cr @@ -49,16 +49,16 @@ module CoverageReporter end def initialize(@coverage_files : Array(String) | Nil, @coverage_format : String?, @base_path : String?) - @parsers = if @coverage_format - Log.info("✏️ Forced coverage format: #{@coverage_format}") - parser_class = PARSERS.find { |klass| klass.name == @coverage_format } + @parsers = if coverage_format + Log.info("✏️ Forced coverage format: #{coverage_format}") + parser_class = PARSERS.find { |klass| klass.name == coverage_format } if parser_class [parser_class.new(base_path, true)] else raise InvalidCoverageFormat.new(coverage_format) end else - PARSERS.map(&.new(@base_path)).to_a + PARSERS.map(&.new(base_path)).to_a end end