danger-pmd 0.4.0 → 1.0.5
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 +4 -4
- data/.github/workflows/deploy.yml +35 -0
- data/.github/workflows/test.yml +24 -0
- data/.rubocop.yml +4777 -99
- data/Gemfile.lock +96 -63
- data/LICENSE +21 -0
- data/README.md +42 -22
- data/codecov.yml +20 -0
- data/danger-pmd.gemspec +25 -22
- data/lib/danger_plugin.rb +1 -1
- data/lib/danger_pmd.rb +1 -1
- data/lib/pmd/entity/pmd_file.rb +11 -15
- data/lib/pmd/entity/pmd_violation.rb +4 -3
- data/lib/pmd/gem_version.rb +1 -1
- data/lib/pmd/plugin.rb +67 -41
- data/spec/entity/pmd_file_spec.rb +16 -16
- data/spec/pmd_spec.rb +93 -92
- data/spec/spec_helper.rb +24 -18
- metadata +73 -29
- data/.travis.yml +0 -10
- data/LICENSE.txt +0 -22
data/lib/danger_plugin.rb
CHANGED
data/lib/danger_pmd.rb
CHANGED
data/lib/pmd/entity/pmd_file.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Represent a PMD file.
|
3
4
|
class PmdFile
|
4
|
-
require_relative
|
5
|
+
require_relative './pmd_violation'
|
5
6
|
|
6
7
|
attr_accessor :file
|
7
8
|
|
@@ -17,23 +18,18 @@ class PmdFile
|
|
17
18
|
|
18
19
|
def initialize(prefix, file)
|
19
20
|
@file = file
|
20
|
-
@absolute_path = file.attribute(
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
if @absolute_path.start_with?(@prefix)
|
29
|
-
@relative_path = @absolute_path[@prefix.length, @absolute_path.length - @prefix.length]
|
30
|
-
else
|
31
|
-
@relative_path = @absolute_path
|
32
|
-
end
|
21
|
+
@absolute_path = file.attribute('name').value.to_s
|
22
|
+
|
23
|
+
prefix += (prefix.end_with?(file_separator) ? '' : file_separator)
|
24
|
+
@relative_path = if @absolute_path.start_with?(prefix)
|
25
|
+
@absolute_path[prefix.length, @absolute_path.length - prefix.length]
|
26
|
+
else
|
27
|
+
@absolute_path
|
28
|
+
end
|
33
29
|
end
|
34
30
|
|
35
31
|
def violations
|
36
|
-
@violations ||= file.xpath(
|
32
|
+
@violations ||= file.xpath('violation').map do |pmd_violation|
|
37
33
|
PmdViolation.new(pmd_violation)
|
38
34
|
end
|
39
35
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Represent a PMD violation.
|
3
4
|
class PmdViolation
|
4
5
|
PRIORITY_ERROR_THRESHOLD = 4
|
5
6
|
attr_accessor :violation
|
@@ -9,7 +10,7 @@ class PmdViolation
|
|
9
10
|
end
|
10
11
|
|
11
12
|
def priority
|
12
|
-
@priority ||= violation.attribute(
|
13
|
+
@priority ||= violation.attribute('priority').value.to_i
|
13
14
|
end
|
14
15
|
|
15
16
|
def type
|
@@ -17,10 +18,10 @@ class PmdViolation
|
|
17
18
|
end
|
18
19
|
|
19
20
|
def line
|
20
|
-
@line ||= violation.attribute(
|
21
|
+
@line ||= violation.attribute('beginline').value.to_i
|
21
22
|
end
|
22
23
|
|
23
24
|
def description
|
24
|
-
@description ||= violation.text.gsub("\n",
|
25
|
+
@description ||= violation.text.gsub("\n", '')
|
25
26
|
end
|
26
27
|
end
|
data/lib/pmd/gem_version.rb
CHANGED
data/lib/pmd/plugin.rb
CHANGED
@@ -11,50 +11,57 @@ module Danger
|
|
11
11
|
#
|
12
12
|
# @example Running PMD with a specific Gradle task or report file (glob accepted)
|
13
13
|
#
|
14
|
-
# pmd.gradle_task = '
|
15
|
-
# pmd.report_file =
|
14
|
+
# pmd.gradle_task = 'module:pmd' # default: 'pmd'
|
15
|
+
# pmd.report_file = 'module/build/reports/pmd/pmd.xml' # default: 'app/build/reports/pmd/pmd.xml'
|
16
16
|
# pmd.report
|
17
17
|
#
|
18
18
|
# @example Running PMD with a specific root path
|
19
19
|
#
|
20
|
-
# pmd.root_path = '/Users/developer/project
|
20
|
+
# pmd.root_path = '/Users/developer/project' # default: result of `git rev-parse --show-toplevel`
|
21
21
|
# pmd.report
|
22
22
|
#
|
23
23
|
# @example Running PMD with an array of report files (glob accepted)
|
24
24
|
#
|
25
|
-
# pmd.report_files = [
|
25
|
+
# pmd.report_files = ['modules/**/build/reports/pmd/pmd.xml', 'app/build/reports/pmd/pmd.xml']
|
26
26
|
# pmd.report
|
27
27
|
#
|
28
28
|
# @example Running PMD without running a Gradle task
|
29
29
|
#
|
30
|
-
# pmd.skip_gradle_task = true
|
30
|
+
# pmd.skip_gradle_task = true # default: false
|
31
31
|
# pmd.report
|
32
32
|
#
|
33
|
+
# @example Running PMD without inline comment
|
34
|
+
#
|
35
|
+
# pmd.report(inline_mode: false) # default: true
|
36
|
+
#
|
33
37
|
# @see mathroule/danger-pmd
|
34
38
|
# @tags java, android, pmd
|
35
|
-
|
36
39
|
class DangerPmd < Plugin
|
37
|
-
require_relative
|
40
|
+
require_relative './entity/pmd_file'
|
38
41
|
|
39
42
|
# Custom Gradle task to run.
|
40
43
|
# This is useful when your project has different flavors.
|
41
|
-
# Defaults to
|
44
|
+
# Defaults to 'pmd'.
|
45
|
+
#
|
42
46
|
# @return [String]
|
43
47
|
attr_writer :gradle_task
|
44
48
|
|
45
|
-
# A getter for `gradle_task`, returning
|
49
|
+
# A getter for `gradle_task`, returning 'pmd' if value is nil.
|
50
|
+
#
|
46
51
|
# @return [String]
|
47
52
|
def gradle_task
|
48
|
-
@gradle_task ||=
|
53
|
+
@gradle_task ||= 'pmd'
|
49
54
|
end
|
50
55
|
|
51
56
|
# Skip Gradle task.
|
52
57
|
# If you skip Gradle task, for example project does not manage Gradle.
|
53
58
|
# Defaults to `false`.
|
54
|
-
#
|
59
|
+
#
|
60
|
+
# @return [Boolean]
|
55
61
|
attr_writer :skip_gradle_task
|
56
62
|
|
57
63
|
# A getter for `skip_gradle_task`, returning false if value is nil.
|
64
|
+
#
|
58
65
|
# @return [Boolean]
|
59
66
|
def skip_gradle_task
|
60
67
|
@skip_gradle_task ||= false
|
@@ -62,35 +69,41 @@ module Danger
|
|
62
69
|
|
63
70
|
# An absolute path to a root.
|
64
71
|
# To comment errors to VCS, this needs to know relative path of files from the root.
|
65
|
-
# Defaults to result of
|
66
|
-
#
|
72
|
+
# Defaults to result of 'git rev-parse --show-toplevel'.
|
73
|
+
#
|
74
|
+
# @return [String]
|
67
75
|
attr_writer :root_path
|
68
76
|
|
69
|
-
# A getter for `root_path`, returning result of
|
77
|
+
# A getter for `root_path`, returning result of `git rev-parse --show-toplevel` if value is nil.
|
78
|
+
#
|
70
79
|
# @return [String]
|
71
80
|
def root_path
|
72
81
|
@root_path ||= `git rev-parse --show-toplevel`.chomp
|
73
82
|
end
|
74
83
|
|
75
84
|
# Location of report file.
|
76
|
-
# If your
|
77
|
-
# Defaults to
|
85
|
+
# If your PMD task task outputs to a different location, you can specify it here.
|
86
|
+
# Defaults to 'app/build/reports/pmd/pmd.xml'.
|
87
|
+
#
|
78
88
|
# @return [String]
|
79
89
|
attr_writer :report_file
|
80
90
|
|
81
|
-
# A getter for `report_file`, returning
|
91
|
+
# A getter for `report_file`, returning 'app/build/reports/pmd/pmd.xml' if value is nil.
|
92
|
+
#
|
82
93
|
# @return [String]
|
83
94
|
def report_file
|
84
|
-
@report_file ||=
|
95
|
+
@report_file ||= 'app/build/reports/pmd/pmd.xml'
|
85
96
|
end
|
86
97
|
|
87
98
|
# Location of report files.
|
88
|
-
# If your
|
89
|
-
# Defaults to [
|
99
|
+
# If your PMD task outputs to a different location, you can specify it here.
|
100
|
+
# Defaults to ['app/build/reports/pmd/pmd.xml'].
|
101
|
+
#
|
90
102
|
# @return [Array[String]]
|
91
103
|
attr_writer :report_files
|
92
104
|
|
93
|
-
# A getter for `report_files`, returning [
|
105
|
+
# A getter for `report_files`, returning ['app/build/reports/pmd/pmd.xml'] if value is nil.
|
106
|
+
#
|
94
107
|
# @return [Array[String]]
|
95
108
|
def report_files
|
96
109
|
@report_files ||= [report_file]
|
@@ -100,16 +113,19 @@ module Danger
|
|
100
113
|
# It fails if `gradlew` cannot be found inside current directory.
|
101
114
|
# It fails if `report_file` cannot be found inside current directory.
|
102
115
|
# It fails if `report_files` is empty.
|
116
|
+
#
|
117
|
+
# @param [Boolean] inline_mode Report as inline comment, defaults to [true].
|
118
|
+
#
|
103
119
|
# @return [Array[PmdFile]]
|
104
|
-
def report(inline_mode
|
120
|
+
def report(inline_mode: true)
|
105
121
|
unless skip_gradle_task
|
106
|
-
|
122
|
+
raise('Could not find `gradlew` inside current directory') unless gradlew_exists?
|
107
123
|
|
108
124
|
exec_gradle_task
|
109
125
|
end
|
110
126
|
|
111
127
|
report_files_expanded = Dir.glob(report_files).sort
|
112
|
-
|
128
|
+
raise("Could not find matching PMD report files for #{report_files} inside current directory") if report_files_expanded.empty?
|
113
129
|
|
114
130
|
do_comment(report_files_expanded, inline_mode)
|
115
131
|
end
|
@@ -117,47 +133,53 @@ module Danger
|
|
117
133
|
private
|
118
134
|
|
119
135
|
# Check gradlew file exists in current directory.
|
120
|
-
#
|
136
|
+
#
|
137
|
+
# @return [Boolean]
|
121
138
|
def gradlew_exists?
|
122
139
|
!`ls gradlew`.strip.empty?
|
123
140
|
end
|
124
141
|
|
125
142
|
# Run Gradle task.
|
143
|
+
#
|
126
144
|
# @return [void]
|
127
145
|
def exec_gradle_task
|
128
146
|
system "./gradlew #{gradle_task}"
|
129
147
|
end
|
130
148
|
|
131
|
-
# Check report_file exists in current directory.
|
132
|
-
# @return [Bool]
|
133
|
-
def report_file_exist?(report_file)
|
134
|
-
File.exist?(report_file)
|
135
|
-
end
|
136
|
-
|
137
149
|
# A getter for `pmd_report`, returning PMD report.
|
150
|
+
#
|
151
|
+
# @param [String] report_file The report file.
|
152
|
+
#
|
138
153
|
# @return [Oga::XML::Document]
|
139
154
|
def pmd_report(report_file)
|
140
|
-
require
|
155
|
+
require 'oga'
|
141
156
|
Oga.parse_xml(File.open(report_file))
|
142
157
|
end
|
143
158
|
|
144
159
|
# A getter for PMD issues, returning PMD issues.
|
160
|
+
#
|
161
|
+
# @param [String] report_file The report file.
|
162
|
+
#
|
145
163
|
# @return [Array[PmdFile]]
|
146
164
|
def pmd_issues(report_file)
|
147
|
-
pmd_report(report_file).xpath(
|
165
|
+
pmd_report(report_file).xpath('//file').map do |pmd_file|
|
148
166
|
PmdFile.new(root_path, pmd_file)
|
149
167
|
end
|
150
168
|
end
|
151
169
|
|
152
170
|
# A getter for current updated files.
|
171
|
+
#
|
153
172
|
# @return [Array[String]]
|
154
173
|
def target_files
|
155
174
|
@target_files ||= (git.modified_files - git.deleted_files) + git.added_files
|
156
175
|
end
|
157
176
|
|
158
177
|
# Generate report and send inline comment with Danger's warn or fail method.
|
178
|
+
#
|
179
|
+
# @param [Boolean] inline_mode Report as inline comment, defaults to [true].
|
180
|
+
#
|
159
181
|
# @return [Array[PmdFile]]
|
160
|
-
def do_comment(report_files, inline_mode
|
182
|
+
def do_comment(report_files, inline_mode)
|
161
183
|
pmd_issues = []
|
162
184
|
|
163
185
|
report_files.each do |report_file|
|
@@ -166,17 +188,21 @@ module Danger
|
|
166
188
|
|
167
189
|
pmd_issues.push(pmd_file)
|
168
190
|
|
169
|
-
pmd_file
|
170
|
-
if inline_mode
|
171
|
-
send(pmd_violation.type, pmd_violation.description, file: pmd_file.relative_path, line: pmd_violation.line)
|
172
|
-
else
|
173
|
-
send(pmd_violation.type, "#{pmd_file.relative_path} : #{pmd_violation.description} at #{pmd_violation.line}")
|
174
|
-
end
|
175
|
-
end
|
191
|
+
send_comment(pmd_file, inline_mode)
|
176
192
|
end
|
177
193
|
end
|
178
194
|
|
179
195
|
pmd_issues
|
180
196
|
end
|
197
|
+
|
198
|
+
def send_comment(pmd_file, inline_mode)
|
199
|
+
pmd_file.violations.each do |pmd_violation|
|
200
|
+
if inline_mode
|
201
|
+
send(pmd_violation.type, pmd_violation.description, file: pmd_file.relative_path, line: pmd_violation.line)
|
202
|
+
else
|
203
|
+
send(pmd_violation.type, "#{pmd_file.relative_path} : #{pmd_violation.description} at #{pmd_violation.line}")
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
181
207
|
end
|
182
208
|
end
|
@@ -3,15 +3,15 @@
|
|
3
3
|
require_relative "../spec_helper"
|
4
4
|
|
5
5
|
module Pmd
|
6
|
-
require
|
6
|
+
require 'oga'
|
7
7
|
|
8
8
|
describe PmdFile do
|
9
|
-
it
|
10
|
-
xml = Oga.parse_xml(File.open(
|
11
|
-
pmd_file = PmdFile.new(
|
9
|
+
it 'should initialize relative path ending with file separator' do
|
10
|
+
xml = Oga.parse_xml(File.open('spec/fixtures/pmd_report.xml'))
|
11
|
+
pmd_file = PmdFile.new('/Users/developer/sample/', xml.xpath('//file').first)
|
12
12
|
|
13
|
-
expect(pmd_file.absolute_path).to eq(
|
14
|
-
expect(pmd_file.relative_path).to eq(
|
13
|
+
expect(pmd_file.absolute_path).to eq('/Users/developer/sample/app/src/main/java/com/android/sample/Tools.java')
|
14
|
+
expect(pmd_file.relative_path).to eq('app/src/main/java/com/android/sample/Tools.java')
|
15
15
|
expect(pmd_file.violations).not_to be_nil
|
16
16
|
expect(pmd_file.violations.length).to eq(1)
|
17
17
|
expect(pmd_file.violations.first).not_to be_nil
|
@@ -19,12 +19,12 @@ module Pmd
|
|
19
19
|
expect(pmd_file.violations.first.description).to eq("The utility class name 'Tools' doesn't match '[A-Z][a-zA-Z0-9]+(Utils?|Helper)'")
|
20
20
|
end
|
21
21
|
|
22
|
-
it
|
23
|
-
xml = Oga.parse_xml(File.open(
|
24
|
-
pmd_file = PmdFile.new(
|
22
|
+
it 'should initialize relative path not ending with file separator' do
|
23
|
+
xml = Oga.parse_xml(File.open('spec/fixtures/pmd_report.xml'))
|
24
|
+
pmd_file = PmdFile.new('/Users/developer/sample', xml.xpath('//file').first)
|
25
25
|
|
26
|
-
expect(pmd_file.absolute_path).to eq(
|
27
|
-
expect(pmd_file.relative_path).to eq(
|
26
|
+
expect(pmd_file.absolute_path).to eq('/Users/developer/sample/app/src/main/java/com/android/sample/Tools.java')
|
27
|
+
expect(pmd_file.relative_path).to eq('app/src/main/java/com/android/sample/Tools.java')
|
28
28
|
expect(pmd_file.violations).not_to be_nil
|
29
29
|
expect(pmd_file.violations.length).to eq(1)
|
30
30
|
expect(pmd_file.violations.first).not_to be_nil
|
@@ -32,12 +32,12 @@ module Pmd
|
|
32
32
|
expect(pmd_file.violations.first.description).to eq("The utility class name 'Tools' doesn't match '[A-Z][a-zA-Z0-9]+(Utils?|Helper)'")
|
33
33
|
end
|
34
34
|
|
35
|
-
it
|
36
|
-
xml = Oga.parse_xml(File.open(
|
37
|
-
pmd_file = PmdFile.new(
|
35
|
+
it 'should initialize relative path not prefixed' do
|
36
|
+
xml = Oga.parse_xml(File.open('spec/fixtures/pmd_report.xml'))
|
37
|
+
pmd_file = PmdFile.new('/Users/developer/something', xml.xpath('//file').first)
|
38
38
|
|
39
|
-
expect(pmd_file.absolute_path).to eq(
|
40
|
-
expect(pmd_file.relative_path).to eq(
|
39
|
+
expect(pmd_file.absolute_path).to eq('/Users/developer/sample/app/src/main/java/com/android/sample/Tools.java')
|
40
|
+
expect(pmd_file.relative_path).to eq('/Users/developer/sample/app/src/main/java/com/android/sample/Tools.java')
|
41
41
|
expect(pmd_file.violations).not_to be_nil
|
42
42
|
expect(pmd_file.violations.length).to eq(1)
|
43
43
|
expect(pmd_file.violations.first).not_to be_nil
|
data/spec/pmd_spec.rb
CHANGED
@@ -1,80 +1,85 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require File.expand_path(
|
3
|
+
require File.expand_path('spec_helper', __dir__)
|
4
4
|
|
5
5
|
module Danger
|
6
6
|
describe Danger::DangerPmd do
|
7
|
-
it
|
7
|
+
it 'should be a plugin' do
|
8
8
|
expect(Danger::DangerPmd.new(nil)).to be_a Danger::Plugin
|
9
9
|
end
|
10
10
|
|
11
|
-
describe
|
11
|
+
describe 'with Dangerfile' do
|
12
12
|
before do
|
13
13
|
@dangerfile = testing_dangerfile
|
14
14
|
@pmd = @dangerfile.pmd
|
15
15
|
end
|
16
16
|
|
17
|
-
it
|
18
|
-
expect(@pmd.gradle_task).to eq(
|
17
|
+
it 'Check default Gradle task' do
|
18
|
+
expect(@pmd.gradle_task).to eq('pmd')
|
19
19
|
end
|
20
20
|
|
21
|
-
it
|
22
|
-
|
23
|
-
@pmd.gradle_task
|
24
|
-
expect(@pmd.gradle_task).to eq(custom_task)
|
21
|
+
it 'Set custom Gradle task' do
|
22
|
+
@pmd.gradle_task = 'pmdStagingDebug'
|
23
|
+
expect(@pmd.gradle_task).to eq('pmdStagingDebug')
|
25
24
|
end
|
26
25
|
|
27
|
-
it
|
28
|
-
expect(@pmd.skip_gradle_task).to
|
26
|
+
it 'Check default skip Gradle task' do
|
27
|
+
expect(@pmd.skip_gradle_task).to be_falsey
|
29
28
|
end
|
30
29
|
|
31
|
-
it
|
32
|
-
skip_gradle_task = true
|
33
|
-
@pmd.skip_gradle_task
|
34
|
-
|
30
|
+
it 'Set custom skip Gradle task' do
|
31
|
+
@pmd.skip_gradle_task = true
|
32
|
+
expect(@pmd.skip_gradle_task).to be_truthy
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'Check default root path' do
|
36
|
+
expect(@pmd.root_path).to eq(Dir.pwd)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'Set custom root path' do
|
40
|
+
@pmd.root_path = '/Users/developer/project'
|
41
|
+
expect(@pmd.root_path).to eq('/Users/developer/project')
|
35
42
|
end
|
36
43
|
|
37
|
-
it
|
38
|
-
expect(@pmd.report_file).to eq(
|
44
|
+
it 'Check default report file path' do
|
45
|
+
expect(@pmd.report_file).to eq('app/build/reports/pmd/pmd.xml')
|
39
46
|
end
|
40
47
|
|
41
|
-
it
|
42
|
-
|
43
|
-
@pmd.report_file
|
44
|
-
expect(@pmd.report_file).to eq(custom_report_path)
|
48
|
+
it 'Set custom report file path' do
|
49
|
+
@pmd.report_file = 'custom-path/pmd_sub_report.xml'
|
50
|
+
expect(@pmd.report_file).to eq('custom-path/pmd_sub_report.xml')
|
45
51
|
end
|
46
52
|
|
47
|
-
it
|
48
|
-
expect(@pmd.report_files).to
|
53
|
+
it 'Check default report files paths' do
|
54
|
+
expect(@pmd.report_files).to contain_exactly('app/build/reports/pmd/pmd.xml')
|
49
55
|
end
|
50
56
|
|
51
|
-
it
|
52
|
-
|
53
|
-
@pmd.report_files
|
54
|
-
expect(@pmd.report_files).to eq(custom_report_paths)
|
57
|
+
it 'Set custom report files paths' do
|
58
|
+
@pmd.report_files = %w[custom-path/pmd_report_1.xml custom-path/pmd_report_2.xml]
|
59
|
+
expect(@pmd.report_files).to contain_exactly('custom-path/pmd_report_1.xml', 'custom-path/pmd_report_2.xml')
|
55
60
|
end
|
56
61
|
|
57
|
-
it
|
62
|
+
it 'Check default root path' do
|
58
63
|
expect(@pmd.root_path).to eq(Dir.pwd)
|
59
64
|
end
|
60
65
|
|
61
|
-
it
|
62
|
-
root_path =
|
63
|
-
@pmd.root_path
|
64
|
-
expect(@pmd.root_path).to eq(root_path)
|
66
|
+
it 'Set custom root path' do
|
67
|
+
@pmd.root_path = '/Users/developer/sample/'
|
68
|
+
expect(@pmd.root_path).to eq('/Users/developer/sample/')
|
65
69
|
end
|
66
70
|
|
67
|
-
it
|
71
|
+
it 'Report with report file' do
|
72
|
+
# noinspection RubyLiteralArrayInspection
|
68
73
|
target_files = [
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
74
|
+
'app/src/main/java/com/android/sample/MainActivity.java',
|
75
|
+
'app/src/main/java/com/android/sample/Tools.java',
|
76
|
+
'app/src/test/java/com/android/sample/ExampleUnitTest.java',
|
77
|
+
'app/src/test/java/com/android/sample/ToolsTest.java'
|
73
78
|
]
|
74
79
|
allow_any_instance_of(Danger::DangerPmd).to receive(:target_files).and_return(target_files)
|
75
80
|
|
76
|
-
@pmd.report_file =
|
77
|
-
@pmd.root_path =
|
81
|
+
@pmd.report_file = 'spec/fixtures/pmd_report.xml'
|
82
|
+
@pmd.root_path = '/Users/developer/sample/'
|
78
83
|
@pmd.skip_gradle_task = true
|
79
84
|
|
80
85
|
pmd_issues = @pmd.report
|
@@ -83,8 +88,8 @@ module Danger
|
|
83
88
|
|
84
89
|
pmd_issue1 = pmd_issues[0]
|
85
90
|
expect(pmd_issue1).not_to be_nil
|
86
|
-
expect(pmd_issue1.absolute_path).to eq(
|
87
|
-
expect(pmd_issue1.relative_path).to eq(
|
91
|
+
expect(pmd_issue1.absolute_path).to eq('/Users/developer/sample/app/src/main/java/com/android/sample/Tools.java')
|
92
|
+
expect(pmd_issue1.relative_path).to eq('app/src/main/java/com/android/sample/Tools.java')
|
88
93
|
expect(pmd_issue1.violations).not_to be_nil
|
89
94
|
expect(pmd_issue1.violations.length).to eq(1)
|
90
95
|
expect(pmd_issue1.violations.first).not_to be_nil
|
@@ -93,8 +98,8 @@ module Danger
|
|
93
98
|
|
94
99
|
pmd_issue2 = pmd_issues[1]
|
95
100
|
expect(pmd_issue2).not_to be_nil
|
96
|
-
expect(pmd_issue2.absolute_path).to eq(
|
97
|
-
expect(pmd_issue2.relative_path).to eq(
|
101
|
+
expect(pmd_issue2.absolute_path).to eq('/Users/developer/sample/app/src/main/java/com/android/sample/MainActivity.java')
|
102
|
+
expect(pmd_issue2.relative_path).to eq('app/src/main/java/com/android/sample/MainActivity.java')
|
98
103
|
expect(pmd_issue2.violations).not_to be_nil
|
99
104
|
expect(pmd_issue2.violations.length).to eq(1)
|
100
105
|
expect(pmd_issue2.violations.first).not_to be_nil
|
@@ -103,8 +108,8 @@ module Danger
|
|
103
108
|
|
104
109
|
pmd_issue3 = pmd_issues[2]
|
105
110
|
expect(pmd_issue3).not_to be_nil
|
106
|
-
expect(pmd_issue3.absolute_path).to eq(
|
107
|
-
expect(pmd_issue3.relative_path).to eq(
|
111
|
+
expect(pmd_issue3.absolute_path).to eq('/Users/developer/sample/app/src/test/java/com/android/sample/ExampleUnitTest.java')
|
112
|
+
expect(pmd_issue3.relative_path).to eq('app/src/test/java/com/android/sample/ExampleUnitTest.java')
|
108
113
|
expect(pmd_issue3.violations).not_to be_nil
|
109
114
|
expect(pmd_issue3.violations.length).to eq(1)
|
110
115
|
expect(pmd_issue3.violations.first).not_to be_nil
|
@@ -113,8 +118,8 @@ module Danger
|
|
113
118
|
|
114
119
|
pmd_issue4 = pmd_issues[3]
|
115
120
|
expect(pmd_issue4).not_to be_nil
|
116
|
-
expect(pmd_issue4.absolute_path).to eq(
|
117
|
-
expect(pmd_issue4.relative_path).to eq(
|
121
|
+
expect(pmd_issue4.absolute_path).to eq('/Users/developer/sample/app/src/test/java/com/android/sample/ToolsTest.java')
|
122
|
+
expect(pmd_issue4.relative_path).to eq('app/src/test/java/com/android/sample/ToolsTest.java')
|
118
123
|
expect(pmd_issue4.violations).not_to be_nil
|
119
124
|
expect(pmd_issue4.violations.length).to eq(2)
|
120
125
|
expect(pmd_issue4.violations[0]).not_to be_nil
|
@@ -125,15 +130,16 @@ module Danger
|
|
125
130
|
expect(pmd_issue4.violations[1].description).to eq("The JUnit 4 test method name 'getLabel_2' doesn't match '[a-z][a-zA-Z0-9]*'")
|
126
131
|
end
|
127
132
|
|
128
|
-
it
|
133
|
+
it 'Report with report file not in target files' do
|
134
|
+
# noinspection RubyLiteralArrayInspection
|
129
135
|
target_files = [
|
130
|
-
|
131
|
-
|
136
|
+
'app/src/main/java/com/android/sample/Tools.java',
|
137
|
+
'app/src/test/java/com/android/sample/ToolsTest.java'
|
132
138
|
]
|
133
139
|
allow_any_instance_of(Danger::DangerPmd).to receive(:target_files).and_return(target_files)
|
134
140
|
|
135
|
-
@pmd.report_file =
|
136
|
-
@pmd.root_path =
|
141
|
+
@pmd.report_file = 'spec/fixtures/pmd_report.xml'
|
142
|
+
@pmd.root_path = '/Users/developer/sample/'
|
137
143
|
@pmd.skip_gradle_task = true
|
138
144
|
|
139
145
|
pmd_issues = @pmd.report
|
@@ -142,8 +148,8 @@ module Danger
|
|
142
148
|
|
143
149
|
pmd_issue1 = pmd_issues[0]
|
144
150
|
expect(pmd_issue1).not_to be_nil
|
145
|
-
expect(pmd_issue1.absolute_path).to eq(
|
146
|
-
expect(pmd_issue1.relative_path).to eq(
|
151
|
+
expect(pmd_issue1.absolute_path).to eq('/Users/developer/sample/app/src/main/java/com/android/sample/Tools.java')
|
152
|
+
expect(pmd_issue1.relative_path).to eq('app/src/main/java/com/android/sample/Tools.java')
|
147
153
|
expect(pmd_issue1.violations).not_to be_nil
|
148
154
|
expect(pmd_issue1.violations.length).to eq(1)
|
149
155
|
expect(pmd_issue1.violations.first).not_to be_nil
|
@@ -152,8 +158,8 @@ module Danger
|
|
152
158
|
|
153
159
|
pmd_issue2 = pmd_issues[1]
|
154
160
|
expect(pmd_issue2).not_to be_nil
|
155
|
-
expect(pmd_issue2.absolute_path).to eq(
|
156
|
-
expect(pmd_issue2.relative_path).to eq(
|
161
|
+
expect(pmd_issue2.absolute_path).to eq('/Users/developer/sample/app/src/test/java/com/android/sample/ToolsTest.java')
|
162
|
+
expect(pmd_issue2.relative_path).to eq('app/src/test/java/com/android/sample/ToolsTest.java')
|
157
163
|
expect(pmd_issue2.violations).not_to be_nil
|
158
164
|
expect(pmd_issue2.violations.length).to eq(2)
|
159
165
|
expect(pmd_issue2.violations[0]).not_to be_nil
|
@@ -164,19 +170,20 @@ module Danger
|
|
164
170
|
expect(pmd_issue2.violations[1].description).to eq("The JUnit 4 test method name 'getLabel_2' doesn't match '[a-z][a-zA-Z0-9]*'")
|
165
171
|
end
|
166
172
|
|
167
|
-
it
|
173
|
+
it 'Report with report files' do
|
174
|
+
# noinspection RubyLiteralArrayInspection
|
168
175
|
target_files = [
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
176
|
+
'app/src/main/java/com/android/sample/Application.java',
|
177
|
+
'app/src/main/java/com/android/sample/MainActivity.java',
|
178
|
+
'app/src/main/java/com/android/sample/Tools.java',
|
179
|
+
'app/src/main/java/com/android/sample/Utils.java',
|
180
|
+
'app/src/test/java/com/android/sample/ExampleUnitTest.java',
|
181
|
+
'app/src/test/java/com/android/sample/ToolsTest.java'
|
175
182
|
]
|
176
183
|
allow_any_instance_of(Danger::DangerPmd).to receive(:target_files).and_return(target_files)
|
177
184
|
|
178
|
-
@pmd.report_files = [
|
179
|
-
@pmd.root_path =
|
185
|
+
@pmd.report_files = %w[spec/fixtures/pmd_report.xml spec/fixtures/**/pmd_sub_report.xml]
|
186
|
+
@pmd.root_path = '/Users/developer/sample/'
|
180
187
|
@pmd.skip_gradle_task = true
|
181
188
|
|
182
189
|
pmd_issues = @pmd.report
|
@@ -185,8 +192,8 @@ module Danger
|
|
185
192
|
|
186
193
|
pmd_issue1 = pmd_issues[0]
|
187
194
|
expect(pmd_issue1).not_to be_nil
|
188
|
-
expect(pmd_issue1.absolute_path).to eq(
|
189
|
-
expect(pmd_issue1.relative_path).to eq(
|
195
|
+
expect(pmd_issue1.absolute_path).to eq('/Users/developer/sample/app/src/main/java/com/android/sample/Tools.java')
|
196
|
+
expect(pmd_issue1.relative_path).to eq('app/src/main/java/com/android/sample/Tools.java')
|
190
197
|
expect(pmd_issue1.violations).not_to be_nil
|
191
198
|
expect(pmd_issue1.violations.length).to eq(1)
|
192
199
|
expect(pmd_issue1.violations.first).not_to be_nil
|
@@ -195,8 +202,8 @@ module Danger
|
|
195
202
|
|
196
203
|
pmd_issue2 = pmd_issues[1]
|
197
204
|
expect(pmd_issue2).not_to be_nil
|
198
|
-
expect(pmd_issue2.absolute_path).to eq(
|
199
|
-
expect(pmd_issue2.relative_path).to eq(
|
205
|
+
expect(pmd_issue2.absolute_path).to eq('/Users/developer/sample/app/src/main/java/com/android/sample/MainActivity.java')
|
206
|
+
expect(pmd_issue2.relative_path).to eq('app/src/main/java/com/android/sample/MainActivity.java')
|
200
207
|
expect(pmd_issue2.violations).not_to be_nil
|
201
208
|
expect(pmd_issue2.violations.length).to eq(1)
|
202
209
|
expect(pmd_issue2.violations.first).not_to be_nil
|
@@ -205,8 +212,8 @@ module Danger
|
|
205
212
|
|
206
213
|
pmd_issue3 = pmd_issues[2]
|
207
214
|
expect(pmd_issue3).not_to be_nil
|
208
|
-
expect(pmd_issue3.absolute_path).to eq(
|
209
|
-
expect(pmd_issue3.relative_path).to eq(
|
215
|
+
expect(pmd_issue3.absolute_path).to eq('/Users/developer/sample/app/src/test/java/com/android/sample/ExampleUnitTest.java')
|
216
|
+
expect(pmd_issue3.relative_path).to eq('app/src/test/java/com/android/sample/ExampleUnitTest.java')
|
210
217
|
expect(pmd_issue3.violations).not_to be_nil
|
211
218
|
expect(pmd_issue3.violations.length).to eq(1)
|
212
219
|
expect(pmd_issue3.violations.first).not_to be_nil
|
@@ -215,8 +222,8 @@ module Danger
|
|
215
222
|
|
216
223
|
pmd_issue4 = pmd_issues[3]
|
217
224
|
expect(pmd_issue4).not_to be_nil
|
218
|
-
expect(pmd_issue4.absolute_path).to eq(
|
219
|
-
expect(pmd_issue4.relative_path).to eq(
|
225
|
+
expect(pmd_issue4.absolute_path).to eq('/Users/developer/sample/app/src/test/java/com/android/sample/ToolsTest.java')
|
226
|
+
expect(pmd_issue4.relative_path).to eq('app/src/test/java/com/android/sample/ToolsTest.java')
|
220
227
|
expect(pmd_issue4.violations).not_to be_nil
|
221
228
|
expect(pmd_issue4.violations.length).to eq(2)
|
222
229
|
expect(pmd_issue4.violations[0]).not_to be_nil
|
@@ -228,50 +235,44 @@ module Danger
|
|
228
235
|
|
229
236
|
pmd_issue5 = pmd_issues[4]
|
230
237
|
expect(pmd_issue5).not_to be_nil
|
231
|
-
expect(pmd_issue5.absolute_path).to eq(
|
232
|
-
expect(pmd_issue5.relative_path).to eq(
|
238
|
+
expect(pmd_issue5.absolute_path).to eq('/Users/developer/sample/app/src/main/java/com/android/sample/Utils.java')
|
239
|
+
expect(pmd_issue5.relative_path).to eq('app/src/main/java/com/android/sample/Utils.java')
|
233
240
|
expect(pmd_issue5.violations).not_to be_nil
|
234
241
|
expect(pmd_issue5.violations.length).to eq(2)
|
235
242
|
expect(pmd_issue5.violations[0]).not_to be_nil
|
236
243
|
expect(pmd_issue5.violations[0].line).to eq(23)
|
237
|
-
expect(pmd_issue5.violations[0].description).to eq(
|
244
|
+
expect(pmd_issue5.violations[0].description).to eq('These nested if statements could be combined')
|
238
245
|
expect(pmd_issue5.violations[1]).not_to be_nil
|
239
246
|
expect(pmd_issue5.violations[1].line).to eq(45)
|
240
|
-
expect(pmd_issue5.violations[1].description).to eq(
|
247
|
+
expect(pmd_issue5.violations[1].description).to eq('The String literal "unused" appears 4 times in this file; the first occurrence is on line 45')
|
241
248
|
|
242
249
|
pmd_issue6 = pmd_issues[5]
|
243
250
|
expect(pmd_issue6).not_to be_nil
|
244
|
-
expect(pmd_issue6.absolute_path).to eq(
|
245
|
-
expect(pmd_issue6.relative_path).to eq(
|
251
|
+
expect(pmd_issue6.absolute_path).to eq('/Users/developer/sample/app/src/main/java/com/android/sample/Application.java')
|
252
|
+
expect(pmd_issue6.relative_path).to eq('app/src/main/java/com/android/sample/Application.java')
|
246
253
|
expect(pmd_issue6.violations).not_to be_nil
|
247
254
|
expect(pmd_issue6.violations.length).to eq(1)
|
248
255
|
expect(pmd_issue6.violations[0]).not_to be_nil
|
249
256
|
expect(pmd_issue6.violations[0].line).to eq(135)
|
250
|
-
expect(pmd_issue6.violations[0].description).to eq(
|
257
|
+
expect(pmd_issue6.violations[0].description).to eq('The String literal "label" appears 5 times in this file; the first occurrence is on line 135')
|
251
258
|
end
|
252
259
|
|
253
|
-
it
|
260
|
+
it 'Report without Gradle' do
|
254
261
|
allow_any_instance_of(Danger::DangerPmd).to receive(:target_files).and_return([])
|
255
262
|
|
256
|
-
@pmd.report_file =
|
263
|
+
@pmd.report_file = 'spec/fixtures/pmd_report.xml'
|
257
264
|
@pmd.skip_gradle_task = false
|
258
265
|
|
259
|
-
|
260
|
-
expect(pmd_issues).not_to be_nil
|
261
|
-
expect(pmd_issues.length).to be(1)
|
262
|
-
expect(pmd_issues[0]).to be("Could not find `gradlew` inside current directory")
|
266
|
+
expect { @pmd.report }.to raise_error('Could not find `gradlew` inside current directory')
|
263
267
|
end
|
264
268
|
|
265
|
-
it
|
269
|
+
it 'Report without existing report file' do
|
266
270
|
allow_any_instance_of(Danger::DangerPmd).to receive(:target_files).and_return([])
|
267
271
|
|
268
|
-
@pmd.report_file =
|
272
|
+
@pmd.report_file = 'spec/fixtures/custom/pmd_report.xml'
|
269
273
|
@pmd.skip_gradle_task = true
|
270
274
|
|
271
|
-
|
272
|
-
expect(pmd_issues).not_to be_nil
|
273
|
-
expect(pmd_issues.length).to be(1)
|
274
|
-
expect(pmd_issues[0]).to eq("Could not find matching PMD report files for [\"spec/fixtures/custom/pmd_report.xml\"] inside current directory")
|
275
|
+
expect { @pmd.report }.to raise_error('Could not find matching PMD report files for ["spec/fixtures/custom/pmd_report.xml"] inside current directory')
|
275
276
|
end
|
276
277
|
end
|
277
278
|
end
|