danger-jacoco-instacart 0.1.15 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0dd4a48316de722878c9a9a93259094c27b8ac841391399eb11bfec956379fee
4
- data.tar.gz: 8d0f4f5cdaa727efd0d6edcc119790661bc9c63b1e28a16d3fce4adc7f6239ba
3
+ metadata.gz: df299fa783dd834367d27d1d6eda84b2f233c5a1fa52126de5f72bfda735a556
4
+ data.tar.gz: add2beee08b15e8468291eb2413edb5db0d6320c19b8dcddbd273410076b030a
5
5
  SHA512:
6
- metadata.gz: b8eb83937c2a0cf5b1fad92fa98c160d9cc481793b3eeb51f1b8a71239ecc8cd0bcd4b5f6d32fc093c5b01a4cfba9e4bd119b66e13ebd58d797ca9486e3a3e72
7
- data.tar.gz: 14567a96d7cb741c17a5dbaff165ee9bc6dd09b3e293319c644081938a20c7f6bcfe363cb34d9370f0a1b637fb8d89788f8d00632b2c164e628c510821330b3b
6
+ metadata.gz: a9608c3ee2de69007df925218e7ab510d33f8bceec9e379ec16d5af3b4dc64f219bf45a1d398feee9f5d7b636f73a11c3d1be50881dfa09809ca8779a1169d03
7
+ data.tar.gz: 92a726b45f38ad97d9f4a917c2eea152be65b4d94991ca28a0ded329302c321cff37a7e4b46e49b1abf604a414a4a86aef8744e277be331873ea02e042976315
data/.rubocop.yml CHANGED
@@ -1,4 +1,4 @@
1
- Metrics/LineLength:
1
+ Layout/LineLength:
2
2
  Max: 120
3
3
  Metrics/MethodLength:
4
4
  Max: 20
data/README.md CHANGED
@@ -35,5 +35,11 @@ to your `Dangerfile`
35
35
  1. Clone this repo
36
36
  2. Run `bundle install` to setup dependencies.
37
37
  3. Run `bundle exec rake spec` to run the tests.
38
+ 4. Run `bundle exec rubocop -A` to fix in-place what's fixable
38
39
  4. Use `bundle exec guard` to automatically have tests run as you make changes.
39
40
  5. Make your changes.
41
+
42
+ ### How to release new version
43
+ 1. Bump version in `lib/jacoco/gem_version.rb - X.Y.Z`
44
+ 2. `rake build`
45
+ 3. `gem push pkg/danger-jacoco-instacart-X.Y.Z.gem`
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Jacoco
4
- VERSION = '0.1.15'
4
+ VERSION = '0.1.16'
5
5
  end
data/lib/jacoco/plugin.rb CHANGED
@@ -105,14 +105,55 @@ module Danger
105
105
 
106
106
  def classes(delimiter)
107
107
  class_to_file_path_hash = {}
108
- files_to_check.select { |file| files_extension.reduce(false) { |state, el| state || file.end_with?(el) } }
109
- .each do |file| # "src/java/com/example/CachedRepository.java"
110
- classname = file.split('.').first.split(delimiter)[1] # "com/example/CachedRepository"
111
- class_to_file_path_hash[classname] = file
112
- end
108
+ # Initialize files_extension if it's nil
109
+ @files_extension = ['.kt', '.java'] if @files_extension.nil?
110
+
111
+ filtered_files_to_check.each do |file| # "src/java/com/example/CachedRepository.java"
112
+ # Get the package path
113
+ package_path = file.split('.').first.split(delimiter)[1] # "com/example/CachedRepository"
114
+ next unless package_path
115
+
116
+ # Add the primary class (filename-based class)
117
+ class_to_file_path_hash[package_path] = file
118
+
119
+ # For Kotlin files, we need to look for multiple classes/interfaces in the same file
120
+ add_kotlin_declarations(file, package_path, class_to_file_path_hash) if file.end_with?('.kt')
121
+ end
113
122
  class_to_file_path_hash
114
123
  end
115
124
 
125
+ # Returns files that match the configured file extensions
126
+ def filtered_files_to_check
127
+ files_to_check.select { |file| @files_extension.reduce(false) { |state, el| state || file.end_with?(el) } }
128
+ end
129
+
130
+ # Scans a Kotlin file for additional class/interface declarations and adds them to the hash
131
+ def add_kotlin_declarations(file, package_path, class_to_file_path_hash)
132
+ return unless File.exist?(file)
133
+
134
+ file_content = File.read(file)
135
+
136
+ # Look for class and interface declarations in the file
137
+ # Regex catches class/interface/object declarations with modifiers and generics
138
+ regex = /\b(?:(?:data|sealed|abstract|open|internal|private|protected|public|inline)\s+)*
139
+ (?:class|interface|object)\s+([A-Za-z0-9_]+)(?:<.*?>)?/x
140
+ declarations = file_content.scan(regex).flatten
141
+
142
+ # For each additional class/interface found (excluding the one matching the filename)
143
+ declarations.each do |class_name|
144
+ # Skip if it matches the primary class name (already added)
145
+ next if package_path.end_with?("/#{class_name}")
146
+
147
+ # Create full class path by replacing the last part with the class name
148
+ parts = package_path.split('/')
149
+ parts[-1] = class_name
150
+ additional_class_path = parts.join('/')
151
+
152
+ # Add to hash
153
+ class_to_file_path_hash[additional_class_path] = file
154
+ end
155
+ end
156
+
116
157
  # It returns a specific class code coverage and an emoji status as well
117
158
  def report_class(jacoco_class, file_path)
118
159
  report_result = {
data/spec/jacoco_spec.rb CHANGED
@@ -384,6 +384,78 @@ module Danger
384
384
  expect(@dangerfile.status_report[:markdowns][0].message).to include('| `com/example/CachedRepository` | 50% | 55% | :warning: |')
385
385
  end
386
386
  end
387
+
388
+ it 'test with kotlin multiples classes in same file' do
389
+ path_a = "#{File.dirname(__FILE__)}/fixtures/output_a.xml"
390
+
391
+ # Mock the Kotlin file with multiple classes
392
+ kotlin_file_path = 'src/kotlin/com/example/MultiClass.kt'
393
+ kotlin_file_content = <<~KOTLIN
394
+ package com.example
395
+
396
+ class MultiClass {
397
+ // some code
398
+ }
399
+
400
+ data class DataClass(val property: String) {
401
+ // some code
402
+ }
403
+
404
+ sealed class SealedClass {
405
+ // some code
406
+ }
407
+
408
+ private class PrivateClass {
409
+ // some code
410
+ }
411
+
412
+ abstract class AbstractClass {
413
+ // some code
414
+ }
415
+
416
+ class GenericClass<T> {
417
+ // some code
418
+ }
419
+
420
+ interface SomeInterface {
421
+ // some code
422
+ }
423
+
424
+ object SingletonObject {
425
+ // some code
426
+ }
427
+ KOTLIN
428
+
429
+ allow(File).to receive(:exist?).and_call_original
430
+ allow(File).to receive(:exist?).with(kotlin_file_path).and_return(true)
431
+ allow(File).to receive(:read).and_call_original
432
+ allow(File).to receive(:read).with(kotlin_file_path).and_return(kotlin_file_content)
433
+
434
+ @my_plugin.files_to_check = [kotlin_file_path]
435
+ @my_plugin.minimum_project_coverage_percentage = 0 # Avoid project coverage errors
436
+
437
+ # Use a block to capture the key-value pairs passed to classes
438
+ expect { |b| @my_plugin.classes(%r{/kotlin/}).each(&b) }.to yield_control.at_least(8).times
439
+
440
+ # Call report
441
+ @my_plugin.report path_a
442
+
443
+ # Check the class-to-file hash from SAXParser
444
+ class_file_hash = @my_plugin.classes(%r{/kotlin/})
445
+ expect(class_file_hash.keys).to include('com/example/MultiClass')
446
+ expect(class_file_hash.keys).to include('com/example/DataClass')
447
+ expect(class_file_hash.keys).to include('com/example/SealedClass')
448
+ expect(class_file_hash.keys).to include('com/example/PrivateClass')
449
+ expect(class_file_hash.keys).to include('com/example/AbstractClass')
450
+ expect(class_file_hash.keys).to include('com/example/GenericClass')
451
+ expect(class_file_hash.keys).to include('com/example/SomeInterface')
452
+ expect(class_file_hash.keys).to include('com/example/SingletonObject')
453
+
454
+ # All keys should map to the same file path
455
+ class_file_hash.each_value do |file_path|
456
+ expect(file_path).to eq(kotlin_file_path)
457
+ end
458
+ end
387
459
  end
388
460
  end
389
461
  end
data/spec/spec_helper.rb CHANGED
@@ -29,7 +29,6 @@ require 'danger_plugin'
29
29
  # it comes with an extra function `.string` which will
30
30
  # strip all ANSI colours from the string.
31
31
 
32
- # rubocop:disable Lint/NestedMethodDefinition
33
32
  def testing_ui
34
33
  @output = StringIO.new
35
34
  def @output.winsize
@@ -42,7 +41,6 @@ def testing_ui
42
41
  end
43
42
  cork
44
43
  end
45
- # rubocop:enable Lint/NestedMethodDefinition
46
44
 
47
45
  # Example environment (ENV) that would come from
48
46
  # running a PR on TravisCI
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-jacoco-instacart
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.15
4
+ version: 0.1.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Malinskiy
8
8
  - Alexander Bezverhni
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-06-21 00:00:00.000000000 Z
12
+ date: 2025-11-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: danger-plugin-api
@@ -217,7 +217,7 @@ homepage: https://github.com/alexanderbezverhni/danger-jacoco
217
217
  licenses:
218
218
  - MIT
219
219
  metadata: {}
220
- post_install_message:
220
+ post_install_message:
221
221
  rdoc_options: []
222
222
  require_paths:
223
223
  - lib
@@ -232,8 +232,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
232
232
  - !ruby/object:Gem::Version
233
233
  version: '0'
234
234
  requirements: []
235
- rubygems_version: 3.1.2
236
- signing_key:
235
+ rubygems_version: 3.5.3
236
+ signing_key:
237
237
  specification_version: 4
238
238
  summary: A longer description of danger-jacoco.
239
239
  test_files: