diff --git a/README.md b/README.md index 6f608d5..fa6c135 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ jacoco.minimum_class_coverage_map = { # optional (default is empty) jacoco.minimum_class_coverage_percentage = 75 # default 0 jacoco.files_extension = [".java"] # default [".kt", ".java"] jacoco.report("path/to/jacoco.xml", "http://jacoco-html-reports/") +jacoco.prioritize_line_class_coverage = true # default false ``` to your `Dangerfile` diff --git a/lib/jacoco/plugin.rb b/lib/jacoco/plugin.rb index 122545a..c00543f 100644 --- a/lib/jacoco/plugin.rb +++ b/lib/jacoco/plugin.rb @@ -26,6 +26,7 @@ class DangerJacoco < Plugin # rubocop:disable Metrics/ClassLength attr_accessor :minimum_package_coverage_map attr_accessor :minimum_class_coverage_map attr_accessor :fail_no_coverage_data_found + attr_accessor :prioritize_line_class_coverage # Initialize the plugin with configured parameters or defaults def setup @@ -34,6 +35,7 @@ def setup @minimum_package_coverage_map = {} unless minimum_package_coverage_map @minimum_class_coverage_map = {} unless minimum_class_coverage_map @files_extension = ['.kt', '.java'] unless files_extension + @prioritize_line_class_coverage = false unless prioritize_line_class_coverage end # Parses the xml output of jacoco to Ruby model classes @@ -161,7 +163,11 @@ def coverage_counter(jacoco_class) counters = jacoco_class.counters branch_counter = counters.detect { |e| e.type.eql? 'BRANCH' } line_counter = counters.detect { |e| e.type.eql? 'LINE' } - counter = branch_counter.nil? ? line_counter : branch_counter + counter = if @prioritize_line_class_coverage + line_counter + else + branch_counter.nil? ? line_counter : branch_counter + end if counter.nil? no_coverage_data_found_message = "No coverage data found for #{jacoco_class.name}" diff --git a/spec/jacoco_spec.rb b/spec/jacoco_spec.rb index b2b7afd..81abc9a 100644 --- a/spec/jacoco_spec.rb +++ b/spec/jacoco_spec.rb @@ -158,6 +158,17 @@ module Danger expect { @my_plugin.report path_a, fail_no_coverage_data_found: false }.to_not raise_error(RuntimeError) end + + it 'test with prioritize line class coverage' do + path_a = "#{File.dirname(__FILE__)}/fixtures/output_a.xml" + + @my_plugin.minimum_class_coverage_map = { 'com/example/CachedRepository' => 80 } + @my_plugin.prioritize_line_class_coverage = true + + @my_plugin.report path_a + + expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 100% | 80% | :white_check_mark: |') + end end end end