danger-jacoco-instacart 0.1.11 → 0.1.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e9fec5fb323f06e8bdffbfdc200b32801b1a74aaf596c374618afca9248326f1
4
- data.tar.gz: 60d06a3074b5aa763632d8bd5661ebc82908cb514346e172b5d383d053d061ae
3
+ metadata.gz: 1abc0461e9b260a95c412ad877e45259ee557f26b9ed4de55eaa982cc84a0dad
4
+ data.tar.gz: be45bc45af39819be0735aa3d9a5456118a317c597890da3145fb00cbabe6b2b
5
5
  SHA512:
6
- metadata.gz: 2d29d01cf0b2971a5fda3d26e7d82085b42853b852388d1ac84c284bc9856de86628d98d4f44b29e8bb68ccb9628c73a028271153cd8248551bb3e572f1be1ad
7
- data.tar.gz: 02da2696139039613c08b30e576a2b2e512d8ce5770780e6e186af6fefff990c6030388b749d242932143da338c20b61bb12c1230cd13b0b91f6686650c4c2c4
6
+ metadata.gz: d2f3260792e92abff7de9d85f6cf67c6c93233b6b492937049167cf37a72f3e2dfc90dba09f8ba14da85e9a5991c8602c54439275c7c3b601026cbcd00b0afe3
7
+ data.tar.gz: 84bbc4e0f01417de4dac8a1d2b2da1c07e65e69769828154fa1bda935ffc8639145e79132ea0bc12734ac01e3c72fbac78717dc18f55a232b5d9d63e8019a409
data/.yardoc/checksums CHANGED
@@ -1,6 +1,6 @@
1
1
  /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/danger_jacoco.rb 38229d934b3315bb2a5a4eec18eb65f3c54d304f
2
- /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/gem_version.rb ed9d8db86045983fb4286a8695d1d67276512c90
3
- /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/plugin.rb 4d411eb29a16b42105f2775fd15d9ca0dc8e3093
2
+ /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/gem_version.rb fcee9a884aa0707169357197da0ee6d6298be6fa
3
+ /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/plugin.rb f1cb8c9c21dde323e5f7dd51b3f4387094361fcc
4
4
  /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/sax_parser.rb 370e2799f8dbdf7d642c820214e6ea84c30c9cb0
5
5
  /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/counter.rb 368f4a9811617b7a174ddf837a8fac49a4bc32a6
6
6
  /Users/alexanderbezverhni/workspace/junk/danger-jacoco/lib/jacoco/model/report.rb 7cf45ee71ff347a130320f6190ddb25525c7095d
data/.yardoc/object_types CHANGED
Binary file
Binary file
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Jacoco
4
- VERSION = '0.1.11'
4
+ VERSION = '0.1.12'
5
5
  end
data/lib/jacoco/plugin.rb CHANGED
@@ -20,9 +20,10 @@ module Danger
20
20
  # @tags jacoco, coverage, java, android, kotlin
21
21
  #
22
22
  class DangerJacoco < Plugin # rubocop:disable Metrics/ClassLength
23
- attr_accessor :minimum_project_coverage_percentage, :minimum_class_coverage_percentage, :only_check_new_files,
24
- :files_extension, :minimum_package_coverage_map, :minimum_class_coverage_map,
25
- :fail_no_coverage_data_found, :title, :class_column_title, :subtitle_success, :subtitle_failure
23
+ attr_accessor :minimum_project_coverage_percentage, :minimum_class_coverage_percentage,
24
+ :minimum_composable_class_coverage_percentage, :only_check_new_files, :files_extension,
25
+ :minimum_package_coverage_map, :minimum_class_coverage_map, :fail_no_coverage_data_found,
26
+ :title, :class_column_title, :subtitle_success, :subtitle_failure
26
27
 
27
28
  # Initialize the plugin with configured parameters or defaults
28
29
  def setup
@@ -44,6 +45,7 @@ module Danger
44
45
  def setup_minimum_coverages
45
46
  @minimum_project_coverage_percentage = 0 unless minimum_project_coverage_percentage
46
47
  @minimum_class_coverage_percentage = 0 unless minimum_class_coverage_percentage
48
+ @minimum_composable_class_coverage_percentage = 0 unless minimum_composable_class_coverage_percentage
47
49
  @minimum_package_coverage_map = {} unless minimum_package_coverage_map
48
50
  @minimum_class_coverage_map = {} unless minimum_class_coverage_map
49
51
  end
@@ -79,9 +81,10 @@ module Danger
79
81
  @fail_no_coverage_data_found = fail_no_coverage_data_found
80
82
 
81
83
  setup
82
- classes = classes(delimiter)
84
+ class_to_file_path_hash = classes(delimiter)
85
+ classnames = class_to_file_path_hash.keys
83
86
 
84
- parser = Jacoco::SAXParser.new(classes)
87
+ parser = Jacoco::SAXParser.new(classnames)
85
88
  Nokogiri::XML::SAX::Parser.new(parser).parse(File.open(path))
86
89
 
87
90
  total_covered = total_coverage(path)
@@ -90,7 +93,7 @@ module Danger
90
93
  report_markdown = header
91
94
  report_markdown += "| #{class_column_title} | Covered | Required | Status |\n"
92
95
  report_markdown += "|:---|:---:|:---:|:---:|\n"
93
- class_coverage_above_minimum = markdown_class(parser, report_markdown, report_url)
96
+ class_coverage_above_minimum = markdown_class(parser, report_markdown, report_url, class_to_file_path_hash)
94
97
  subtitle = class_coverage_above_minimum ? subtitle_success : subtitle_failure
95
98
  report_markdown.insert(header.length, "#### #{subtitle}\n")
96
99
  markdown(report_markdown)
@@ -104,12 +107,17 @@ module Danger
104
107
  def classes(delimiter)
105
108
  git = @dangerfile.git
106
109
  affected_files = only_check_new_files ? git.added_files : git.added_files + git.modified_files
110
+ class_to_file_path_hash = {}
107
111
  affected_files.select { |file| files_extension.reduce(false) { |state, el| state || file.end_with?(el) } }
108
- .map { |file| file.split('.').first.split(delimiter)[1] }
112
+ .each do |file| # "src/java/com/example/CachedRepository.java"
113
+ classname = file.split('.').first.split(delimiter)[1] # "com/example/CachedRepository"
114
+ class_to_file_path_hash[classname] = file
115
+ end
116
+ class_to_file_path_hash
109
117
  end
110
118
 
111
119
  # It returns a specific class code coverage and an emoji status as well
112
- def report_class(jacoco_class)
120
+ def report_class(jacoco_class, file_path)
113
121
  report_result = {
114
122
  covered: 'No coverage data found : -',
115
123
  status: ':black_joker:',
@@ -119,7 +127,7 @@ module Danger
119
127
  counter = coverage_counter(jacoco_class)
120
128
  unless counter.nil?
121
129
  coverage = (counter.covered.fdiv(counter.covered + counter.missed) * 100).floor
122
- required_coverage = required_class_coverage(jacoco_class)
130
+ required_coverage = required_class_coverage(jacoco_class, file_path)
123
131
  status = coverage_status(coverage, required_coverage)
124
132
 
125
133
  report_result = {
@@ -133,13 +141,19 @@ module Danger
133
141
  end
134
142
 
135
143
  # Determines the required coverage for the class
136
- def required_class_coverage(jacoco_class)
144
+ # rubocop:disable Metrics/AbcSize
145
+ # rubocop:disable Metrics/CyclomaticComplexity
146
+ def required_class_coverage(jacoco_class, file_path)
137
147
  key = minimum_class_coverage_map.keys.detect { |k| jacoco_class.name.match(k) } || jacoco_class.name
138
148
  required_coverage = minimum_class_coverage_map[key]
149
+ includes_composables = File.read(file_path).include? '@Composable' if File.exist?(file_path)
150
+ required_coverage = minimum_composable_class_coverage_percentage if required_coverage.nil? && includes_composables
139
151
  required_coverage = package_coverage(jacoco_class.name) if required_coverage.nil?
140
152
  required_coverage = minimum_class_coverage_percentage if required_coverage.nil?
141
153
  required_coverage
142
154
  end
155
+ # rubocop:enable Metrics/AbcSize
156
+ # rubocop:enable Metrics/CyclomaticComplexity
143
157
 
144
158
  # it returns the most suitable coverage by package name to class or nil
145
159
  def package_coverage(class_name)
@@ -225,10 +239,11 @@ module Danger
225
239
  end
226
240
  # rubocop:enable Style/SignalException
227
241
 
228
- def markdown_class(parser, report_markdown, report_url)
242
+ def markdown_class(parser, report_markdown, report_url, class_to_file_path_hash)
229
243
  class_coverage_above_minimum = true
230
244
  parser.classes.each do |jacoco_class| # Check metrics for each classes
231
- rp = report_class(jacoco_class)
245
+ file_path = class_to_file_path_hash[jacoco_class.name]
246
+ rp = report_class(jacoco_class, file_path)
232
247
  rl = report_link(jacoco_class.name, report_url)
233
248
  ln = "| #{rl} | #{rp[:covered]}% | #{rp[:required_coverage_percentage]}% | #{rp[:status]} |\n"
234
249
  report_markdown << ln
data/spec/jacoco_spec.rb CHANGED
@@ -325,6 +325,42 @@ module Danger
325
325
 
326
326
  expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 93% | 50% | :white_check_mark: |')
327
327
  end
328
+
329
+ describe 'with CachedRepository containing @Composable annotation' do
330
+ before do
331
+ allow(File).to receive(:exist?).with('src/java/com/example/CachedRepository.java').and_return(true)
332
+ allow(File).to receive(:read).with('src/java/com/example/CachedRepository.java').and_return('package com.kevin.mia.mikaela class Vika { @Composable fun someUiWidget() {} }')
333
+ end
334
+
335
+ it 'applies minimum_composable_class_coverage_percentage' do
336
+ path_a = "#{File.dirname(__FILE__)}/fixtures/output_a.xml"
337
+
338
+ @my_plugin.minimum_class_coverage_percentage = 55
339
+ @my_plugin.minimum_composable_class_coverage_percentage = 45
340
+
341
+ @my_plugin.report path_a
342
+
343
+ expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 45% | :white_check_mark: |')
344
+ end
345
+ end
346
+
347
+ describe 'with CachedRepository _not_ containing @Composable annotation' do
348
+ before do
349
+ allow(File).to receive(:exist?).with('src/java/com/example/CachedRepository.java').and_return(true)
350
+ allow(File).to receive(:read).with('src/java/com/example/CachedRepository.java').and_return('package com.kevin.mia.mikaela class Vika { fun main() {} }')
351
+ end
352
+
353
+ it 'does not apply minimum_composable_class_coverage_percentage' do
354
+ path_a = "#{File.dirname(__FILE__)}/fixtures/output_a.xml"
355
+
356
+ @my_plugin.minimum_class_coverage_percentage = 55
357
+ @my_plugin.minimum_composable_class_coverage_percentage = 45
358
+
359
+ @my_plugin.report path_a
360
+
361
+ expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 55% | :warning: |')
362
+ end
363
+ end
328
364
  end
329
365
  end
330
366
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-jacoco-instacart
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Malinskiy
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-08-25 00:00:00.000000000 Z
12
+ date: 2022-09-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: danger-plugin-api