pmdtester 1.0.0.pre.beta2 → 1.1.1
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/.ci/build.sh +67 -0
- data/.ci/files/env.gpg +1 -0
- data/.ci/inc/install-openjdk.inc +26 -0
- data/.ci/manual-integration-tests.sh +20 -0
- data/.github/workflows/build.yml +39 -0
- data/.github/workflows/manual-integration-tests.yml +32 -0
- data/.gitignore +9 -0
- data/.hoerc +1 -0
- data/.rubocop.yml +21 -2
- data/.rubocop_todo.yml +7 -8
- data/.ruby-version +1 -0
- data/Gemfile +1 -13
- data/History.md +108 -0
- data/Manifest.txt +60 -0
- data/README.rdoc +130 -7
- data/Rakefile +31 -17
- data/bin/pmdtester +1 -1
- data/config/all-java.xml +1 -1
- data/config/design.xml +1 -1
- data/config/projectlist_1_0_0.xsd +2 -1
- data/config/projectlist_1_1_0.xsd +31 -0
- data/lib/pmdtester.rb +48 -0
- data/lib/pmdtester/builders/liquid_renderer.rb +73 -0
- data/lib/pmdtester/builders/pmd_report_builder.rb +133 -64
- data/lib/pmdtester/builders/project_builder.rb +100 -0
- data/lib/pmdtester/builders/project_hasher.rb +126 -0
- data/lib/pmdtester/builders/rule_set_builder.rb +95 -51
- data/lib/pmdtester/builders/simple_progress_logger.rb +27 -0
- data/lib/pmdtester/builders/summary_report_builder.rb +62 -120
- data/lib/pmdtester/cmd.rb +15 -1
- data/lib/pmdtester/collection_by_file.rb +55 -0
- data/lib/pmdtester/parsers/options.rb +33 -10
- data/lib/pmdtester/parsers/pmd_report_document.rb +79 -29
- data/lib/pmdtester/parsers/projects_parser.rb +2 -6
- data/lib/pmdtester/pmd_branch_detail.rb +36 -13
- data/lib/pmdtester/pmd_configerror.rb +62 -0
- data/lib/pmdtester/pmd_error.rb +34 -34
- data/lib/pmdtester/pmd_report_detail.rb +10 -13
- data/lib/pmdtester/pmd_tester_utils.rb +57 -0
- data/lib/pmdtester/pmd_violation.rb +66 -26
- data/lib/pmdtester/project.rb +28 -25
- data/lib/pmdtester/report_diff.rb +194 -70
- data/lib/pmdtester/resource_locator.rb +4 -0
- data/lib/pmdtester/runner.rb +82 -57
- data/pmdtester.gemspec +64 -0
- data/resources/_includes/diff_pill_row.html +6 -0
- data/resources/css/bootstrap.min.css +7 -0
- data/resources/css/datatables.min.css +36 -0
- data/resources/css/pmd-tester.css +131 -0
- data/resources/js/bootstrap.min.js +7 -0
- data/resources/js/code-snippets.js +66 -0
- data/resources/js/datatables.min.js +726 -0
- data/resources/js/jquery-3.2.1.slim.min.js +4 -0
- data/resources/js/jquery.min.js +2 -0
- data/resources/js/popper.min.js +5 -0
- data/resources/js/project-report.js +136 -0
- data/resources/project_diff_report.html +205 -0
- data/resources/project_index.html +102 -0
- metadata +117 -44
- data/.travis.yml +0 -22
- data/lib/pmdtester/builders/diff_builder.rb +0 -35
- data/lib/pmdtester/builders/diff_report_builder.rb +0 -226
- data/lib/pmdtester/builders/html_report_builder.rb +0 -34
- data/lib/pmdtester/pmdtester.rb +0 -17
- data/resources/css/maven-base.css +0 -155
- data/resources/css/maven-theme.css +0 -171
metadata
CHANGED
|
@@ -1,72 +1,115 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pmdtester
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andreas Dangel
|
|
8
8
|
- Binguo Bao
|
|
9
|
+
- Clément Fournier
|
|
9
10
|
autorequire:
|
|
10
11
|
bindir: bin
|
|
11
12
|
cert_chain: []
|
|
12
|
-
date:
|
|
13
|
+
date: 2021-01-15 00:00:00.000000000 Z
|
|
13
14
|
dependencies:
|
|
14
15
|
- !ruby/object:Gem::Dependency
|
|
15
16
|
name: nokogiri
|
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
|
+
requirements:
|
|
19
|
+
- - ">="
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: 1.11.0.rc4
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
requirements:
|
|
26
|
+
- - ">="
|
|
27
|
+
- !ruby/object:Gem::Version
|
|
28
|
+
version: 1.11.0.rc4
|
|
29
|
+
- !ruby/object:Gem::Dependency
|
|
30
|
+
name: slop
|
|
16
31
|
requirement: !ruby/object:Gem::Requirement
|
|
17
32
|
requirements:
|
|
18
33
|
- - "~>"
|
|
19
34
|
- !ruby/object:Gem::Version
|
|
20
|
-
version:
|
|
35
|
+
version: '4.6'
|
|
21
36
|
type: :runtime
|
|
22
37
|
prerelease: false
|
|
23
38
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
39
|
requirements:
|
|
25
40
|
- - "~>"
|
|
26
41
|
- !ruby/object:Gem::Version
|
|
27
|
-
version:
|
|
42
|
+
version: '4.6'
|
|
28
43
|
- !ruby/object:Gem::Dependency
|
|
29
|
-
name:
|
|
44
|
+
name: differ
|
|
30
45
|
requirement: !ruby/object:Gem::Requirement
|
|
31
46
|
requirements:
|
|
32
47
|
- - "~>"
|
|
33
48
|
- !ruby/object:Gem::Version
|
|
34
|
-
version:
|
|
49
|
+
version: '0.1'
|
|
35
50
|
type: :runtime
|
|
36
51
|
prerelease: false
|
|
37
52
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
53
|
requirements:
|
|
39
54
|
- - "~>"
|
|
40
55
|
- !ruby/object:Gem::Version
|
|
41
|
-
version:
|
|
56
|
+
version: '0.1'
|
|
42
57
|
- !ruby/object:Gem::Dependency
|
|
43
|
-
name:
|
|
58
|
+
name: rufus-scheduler
|
|
44
59
|
requirement: !ruby/object:Gem::Requirement
|
|
45
60
|
requirements:
|
|
46
61
|
- - "~>"
|
|
47
62
|
- !ruby/object:Gem::Version
|
|
48
|
-
version: '
|
|
49
|
-
type: :
|
|
63
|
+
version: '3.5'
|
|
64
|
+
type: :runtime
|
|
50
65
|
prerelease: false
|
|
51
66
|
version_requirements: !ruby/object:Gem::Requirement
|
|
52
67
|
requirements:
|
|
53
68
|
- - "~>"
|
|
54
69
|
- !ruby/object:Gem::Version
|
|
55
|
-
version: '
|
|
70
|
+
version: '3.5'
|
|
56
71
|
- !ruby/object:Gem::Dependency
|
|
57
|
-
name:
|
|
72
|
+
name: logger-colors
|
|
58
73
|
requirement: !ruby/object:Gem::Requirement
|
|
59
74
|
requirements:
|
|
60
75
|
- - "~>"
|
|
61
76
|
- !ruby/object:Gem::Version
|
|
62
77
|
version: '1.0'
|
|
63
|
-
type: :
|
|
78
|
+
type: :runtime
|
|
64
79
|
prerelease: false
|
|
65
80
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
81
|
requirements:
|
|
67
82
|
- - "~>"
|
|
68
83
|
- !ruby/object:Gem::Version
|
|
69
84
|
version: '1.0'
|
|
85
|
+
- !ruby/object:Gem::Dependency
|
|
86
|
+
name: liquid
|
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
|
88
|
+
requirements:
|
|
89
|
+
- - ">="
|
|
90
|
+
- !ruby/object:Gem::Version
|
|
91
|
+
version: '4.0'
|
|
92
|
+
type: :runtime
|
|
93
|
+
prerelease: false
|
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
95
|
+
requirements:
|
|
96
|
+
- - ">="
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
version: '4.0'
|
|
99
|
+
- !ruby/object:Gem::Dependency
|
|
100
|
+
name: hoe-bundler
|
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
|
102
|
+
requirements:
|
|
103
|
+
- - "~>"
|
|
104
|
+
- !ruby/object:Gem::Version
|
|
105
|
+
version: '1.5'
|
|
106
|
+
type: :development
|
|
107
|
+
prerelease: false
|
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
109
|
+
requirements:
|
|
110
|
+
- - "~>"
|
|
111
|
+
- !ruby/object:Gem::Version
|
|
112
|
+
version: '1.5'
|
|
70
113
|
- !ruby/object:Gem::Dependency
|
|
71
114
|
name: hoe-git
|
|
72
115
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -87,109 +130,120 @@ dependencies:
|
|
|
87
130
|
requirements:
|
|
88
131
|
- - "~>"
|
|
89
132
|
- !ruby/object:Gem::Version
|
|
90
|
-
version: 5.10
|
|
133
|
+
version: '5.10'
|
|
91
134
|
type: :development
|
|
92
135
|
prerelease: false
|
|
93
136
|
version_requirements: !ruby/object:Gem::Requirement
|
|
94
137
|
requirements:
|
|
95
138
|
- - "~>"
|
|
96
139
|
- !ruby/object:Gem::Version
|
|
97
|
-
version: 5.10
|
|
140
|
+
version: '5.10'
|
|
98
141
|
- !ruby/object:Gem::Dependency
|
|
99
142
|
name: mocha
|
|
100
143
|
requirement: !ruby/object:Gem::Requirement
|
|
101
144
|
requirements:
|
|
102
145
|
- - "~>"
|
|
103
146
|
- !ruby/object:Gem::Version
|
|
104
|
-
version: 1.5
|
|
147
|
+
version: '1.5'
|
|
105
148
|
type: :development
|
|
106
149
|
prerelease: false
|
|
107
150
|
version_requirements: !ruby/object:Gem::Requirement
|
|
108
151
|
requirements:
|
|
109
152
|
- - "~>"
|
|
110
153
|
- !ruby/object:Gem::Version
|
|
111
|
-
version: 1.5
|
|
154
|
+
version: '1.5'
|
|
112
155
|
- !ruby/object:Gem::Dependency
|
|
113
156
|
name: rubocop
|
|
114
157
|
requirement: !ruby/object:Gem::Requirement
|
|
115
158
|
requirements:
|
|
116
159
|
- - "~>"
|
|
117
160
|
- !ruby/object:Gem::Version
|
|
118
|
-
version: 0.
|
|
161
|
+
version: '0.81'
|
|
119
162
|
type: :development
|
|
120
163
|
prerelease: false
|
|
121
164
|
version_requirements: !ruby/object:Gem::Requirement
|
|
122
165
|
requirements:
|
|
123
166
|
- - "~>"
|
|
124
167
|
- !ruby/object:Gem::Version
|
|
125
|
-
version: 0.
|
|
168
|
+
version: '0.81'
|
|
126
169
|
- !ruby/object:Gem::Dependency
|
|
127
170
|
name: test-unit
|
|
128
171
|
requirement: !ruby/object:Gem::Requirement
|
|
129
172
|
requirements:
|
|
130
173
|
- - "~>"
|
|
131
174
|
- !ruby/object:Gem::Version
|
|
132
|
-
version: 3.2
|
|
175
|
+
version: '3.2'
|
|
133
176
|
type: :development
|
|
134
177
|
prerelease: false
|
|
135
178
|
version_requirements: !ruby/object:Gem::Requirement
|
|
136
179
|
requirements:
|
|
137
180
|
- - "~>"
|
|
138
181
|
- !ruby/object:Gem::Version
|
|
139
|
-
version: 3.2
|
|
182
|
+
version: '3.2'
|
|
140
183
|
- !ruby/object:Gem::Dependency
|
|
141
184
|
name: rdoc
|
|
142
185
|
requirement: !ruby/object:Gem::Requirement
|
|
143
186
|
requirements:
|
|
144
|
-
- - "<"
|
|
145
|
-
- !ruby/object:Gem::Version
|
|
146
|
-
version: '6'
|
|
147
187
|
- - ">="
|
|
148
188
|
- !ruby/object:Gem::Version
|
|
149
189
|
version: '4.0'
|
|
190
|
+
- - "<"
|
|
191
|
+
- !ruby/object:Gem::Version
|
|
192
|
+
version: '7'
|
|
150
193
|
type: :development
|
|
151
194
|
prerelease: false
|
|
152
195
|
version_requirements: !ruby/object:Gem::Requirement
|
|
153
196
|
requirements:
|
|
154
|
-
- - "<"
|
|
155
|
-
- !ruby/object:Gem::Version
|
|
156
|
-
version: '6'
|
|
157
197
|
- - ">="
|
|
158
198
|
- !ruby/object:Gem::Version
|
|
159
199
|
version: '4.0'
|
|
200
|
+
- - "<"
|
|
201
|
+
- !ruby/object:Gem::Version
|
|
202
|
+
version: '7'
|
|
160
203
|
- !ruby/object:Gem::Dependency
|
|
161
204
|
name: hoe
|
|
162
205
|
requirement: !ruby/object:Gem::Requirement
|
|
163
206
|
requirements:
|
|
164
207
|
- - "~>"
|
|
165
208
|
- !ruby/object:Gem::Version
|
|
166
|
-
version: '3.
|
|
209
|
+
version: '3.22'
|
|
167
210
|
type: :development
|
|
168
211
|
prerelease: false
|
|
169
212
|
version_requirements: !ruby/object:Gem::Requirement
|
|
170
213
|
requirements:
|
|
171
214
|
- - "~>"
|
|
172
215
|
- !ruby/object:Gem::Version
|
|
173
|
-
version: '3.
|
|
216
|
+
version: '3.22'
|
|
174
217
|
description: A regression testing tool ensure that new problems and unexpected behaviors
|
|
175
218
|
will not be introduced to PMD project after fixing an issue , and new rules can
|
|
176
219
|
work as expected.
|
|
177
220
|
email:
|
|
178
|
-
- andreas.dangel@
|
|
221
|
+
- andreas.dangel@pmd-code.org
|
|
179
222
|
- djydewang@gmail.com
|
|
223
|
+
- clement.fournier76@gmail.com
|
|
180
224
|
executables:
|
|
181
225
|
- pmdtester
|
|
182
226
|
extensions: []
|
|
183
227
|
extra_rdoc_files:
|
|
184
228
|
- History.md
|
|
229
|
+
- Manifest.txt
|
|
185
230
|
- README.rdoc
|
|
186
231
|
files:
|
|
232
|
+
- ".ci/build.sh"
|
|
233
|
+
- ".ci/files/env.gpg"
|
|
234
|
+
- ".ci/inc/install-openjdk.inc"
|
|
235
|
+
- ".ci/manual-integration-tests.sh"
|
|
236
|
+
- ".github/workflows/build.yml"
|
|
237
|
+
- ".github/workflows/manual-integration-tests.yml"
|
|
238
|
+
- ".gitignore"
|
|
239
|
+
- ".hoerc"
|
|
187
240
|
- ".rubocop.yml"
|
|
188
241
|
- ".rubocop_todo.yml"
|
|
189
|
-
- ".
|
|
242
|
+
- ".ruby-version"
|
|
190
243
|
- Gemfile
|
|
191
244
|
- History.md
|
|
192
245
|
- LICENSE
|
|
246
|
+
- Manifest.txt
|
|
193
247
|
- README.rdoc
|
|
194
248
|
- Rakefile
|
|
195
249
|
- bin/pmdtester
|
|
@@ -197,31 +251,51 @@ files:
|
|
|
197
251
|
- config/design.xml
|
|
198
252
|
- config/project-list.xml
|
|
199
253
|
- config/projectlist_1_0_0.xsd
|
|
200
|
-
-
|
|
201
|
-
- lib/pmdtester
|
|
202
|
-
- lib/pmdtester/builders/
|
|
254
|
+
- config/projectlist_1_1_0.xsd
|
|
255
|
+
- lib/pmdtester.rb
|
|
256
|
+
- lib/pmdtester/builders/liquid_renderer.rb
|
|
203
257
|
- lib/pmdtester/builders/pmd_report_builder.rb
|
|
258
|
+
- lib/pmdtester/builders/project_builder.rb
|
|
259
|
+
- lib/pmdtester/builders/project_hasher.rb
|
|
204
260
|
- lib/pmdtester/builders/rule_set_builder.rb
|
|
261
|
+
- lib/pmdtester/builders/simple_progress_logger.rb
|
|
205
262
|
- lib/pmdtester/builders/summary_report_builder.rb
|
|
206
263
|
- lib/pmdtester/cmd.rb
|
|
264
|
+
- lib/pmdtester/collection_by_file.rb
|
|
207
265
|
- lib/pmdtester/parsers/options.rb
|
|
208
266
|
- lib/pmdtester/parsers/pmd_report_document.rb
|
|
209
267
|
- lib/pmdtester/parsers/projects_parser.rb
|
|
210
268
|
- lib/pmdtester/pmd_branch_detail.rb
|
|
269
|
+
- lib/pmdtester/pmd_configerror.rb
|
|
211
270
|
- lib/pmdtester/pmd_error.rb
|
|
212
271
|
- lib/pmdtester/pmd_report_detail.rb
|
|
272
|
+
- lib/pmdtester/pmd_tester_utils.rb
|
|
213
273
|
- lib/pmdtester/pmd_violation.rb
|
|
214
|
-
- lib/pmdtester/pmdtester.rb
|
|
215
274
|
- lib/pmdtester/project.rb
|
|
216
275
|
- lib/pmdtester/report_diff.rb
|
|
217
276
|
- lib/pmdtester/resource_locator.rb
|
|
218
277
|
- lib/pmdtester/runner.rb
|
|
219
|
-
-
|
|
220
|
-
- resources/
|
|
221
|
-
|
|
278
|
+
- pmdtester.gemspec
|
|
279
|
+
- resources/_includes/diff_pill_row.html
|
|
280
|
+
- resources/css/bootstrap.min.css
|
|
281
|
+
- resources/css/datatables.min.css
|
|
282
|
+
- resources/css/pmd-tester.css
|
|
283
|
+
- resources/js/bootstrap.min.js
|
|
284
|
+
- resources/js/code-snippets.js
|
|
285
|
+
- resources/js/datatables.min.js
|
|
286
|
+
- resources/js/jquery-3.2.1.slim.min.js
|
|
287
|
+
- resources/js/jquery.min.js
|
|
288
|
+
- resources/js/popper.min.js
|
|
289
|
+
- resources/js/project-report.js
|
|
290
|
+
- resources/project_diff_report.html
|
|
291
|
+
- resources/project_index.html
|
|
292
|
+
homepage: https://pmd.github.io
|
|
222
293
|
licenses:
|
|
223
294
|
- BSD-2-Clause
|
|
224
|
-
metadata:
|
|
295
|
+
metadata:
|
|
296
|
+
bug_tracker_uri: https://github.com/pmd/pmd-regression-tester/issues
|
|
297
|
+
homepage_uri: https://pmd.github.io
|
|
298
|
+
source_code_uri: https://github.com/pmd/pmd-regression-tester
|
|
225
299
|
post_install_message:
|
|
226
300
|
rdoc_options:
|
|
227
301
|
- "--main"
|
|
@@ -232,15 +306,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
232
306
|
requirements:
|
|
233
307
|
- - ">="
|
|
234
308
|
- !ruby/object:Gem::Version
|
|
235
|
-
version: '
|
|
309
|
+
version: '2.7'
|
|
236
310
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
237
311
|
requirements:
|
|
238
|
-
- - "
|
|
312
|
+
- - ">="
|
|
239
313
|
- !ruby/object:Gem::Version
|
|
240
|
-
version:
|
|
314
|
+
version: '0'
|
|
241
315
|
requirements: []
|
|
242
|
-
|
|
243
|
-
rubygems_version: 2.7.6
|
|
316
|
+
rubygems_version: 3.1.4
|
|
244
317
|
signing_key:
|
|
245
318
|
specification_version: 4
|
|
246
319
|
summary: A regression testing tool ensure that new problems and unexpected behaviors
|
data/.travis.yml
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
language: ruby
|
|
2
|
-
jdk: oraclejdk9
|
|
3
|
-
script:
|
|
4
|
-
- rake rubocop
|
|
5
|
-
- rake clean test
|
|
6
|
-
- rake clean integration-test
|
|
7
|
-
- rake install_gem
|
|
8
|
-
- pmdtester -h
|
|
9
|
-
|
|
10
|
-
before_deploy:
|
|
11
|
-
- git stash --all
|
|
12
|
-
- rake hoe:spec
|
|
13
|
-
|
|
14
|
-
deploy:
|
|
15
|
-
provider: rubygems
|
|
16
|
-
api_key:
|
|
17
|
-
secure: xcEpX/r7es6/jnvNPrVClVkKLemC+4EaFACfK9PCw05jAqf3sDX8UMKD2B4NU1JfF+I/szC5loyCe8s1wBUbFhelR8sL93RNOyVlQCKqaDTFw0DUvnbKWdgDb7POhcmo8SWi4aaKPias6wCuWA/Wc6jUvcrlAgKDsmYqOukXQoFyQbOUsnqrE/FMA7BfUIHkeeJbNk8807u4+aMqahZyzTFvuEVBUvKqCzDYPl9kpm4fzOtjxiExj1ic9dr2Dz5bcyWteMjZFSgjYWgZUXpk8FWCj5R/8VQsklxFFXFZlQIVwqtpaKgEOjwOOxaA6b8O7OeU82HtSPfxy6eCNE7pvzoYq+ZGxxk6fPbAl2mqKtPU76oRKH8YmXuEdDtdHVCYp7wOFdrLhJ6bJ3H/DSD14Kso21D3ktt4y4qkCd0Ev1a6nbY3LrO+NqFlZytwlYY1t8CUWyc9GfvpQXd7j0shSvrh2RU0+ATcQc0tRSHE2htjbiMWPi/ffMNe5h7iVqho5cLC4n187VrWOqGJf2S47spIgw9N3VWzyfAxAxI2XIvWcGoAIQhEgU6bH14Mz+0amG6ggzCBAbDPEC1j8cuwVkmanWCWZWi6EuRbCYZ7rgCFIx3hZS9NPBANfcXudm7eINvuMlFnmwrVzmtTIEZTy56ZfaWPzGxotyn5M9DdT1U=
|
|
18
|
-
on:
|
|
19
|
-
tags: true
|
|
20
|
-
skip_cleanup: true
|
|
21
|
-
gem: pmdtester
|
|
22
|
-
gemspec: pmdtester.gemspec
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'nokogiri'
|
|
4
|
-
require_relative '../pmd_error'
|
|
5
|
-
require_relative '../pmd_violation'
|
|
6
|
-
require_relative '../pmd_report_detail'
|
|
7
|
-
require_relative '../parsers/pmd_report_document'
|
|
8
|
-
require_relative '../report_diff'
|
|
9
|
-
|
|
10
|
-
module PmdTester
|
|
11
|
-
# Building difference between two pmd xml files
|
|
12
|
-
class DiffBuilder
|
|
13
|
-
# The schema of pmd xml report refers to
|
|
14
|
-
# http://pmd.sourceforge.net/report_2_0_0.xsd
|
|
15
|
-
def build(base_report_filename, patch_report_filename, base_info, patch_info, filter_set = nil)
|
|
16
|
-
report_diffs = ReportDiff.new
|
|
17
|
-
base_details, patch_details = report_diffs.calculate_details(base_info, patch_info)
|
|
18
|
-
base_violations, base_errors = parse_pmd_report(base_report_filename, 'base',
|
|
19
|
-
base_details.working_dir, filter_set)
|
|
20
|
-
patch_violations, patch_errors = parse_pmd_report(patch_report_filename, 'patch',
|
|
21
|
-
patch_details.working_dir)
|
|
22
|
-
report_diffs.calculate_violations(base_violations, patch_violations)
|
|
23
|
-
report_diffs.calculate_errors(base_errors, patch_errors)
|
|
24
|
-
|
|
25
|
-
report_diffs
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def parse_pmd_report(report_filename, branch, working_dir, filter_set = nil)
|
|
29
|
-
doc = PmdReportDocument.new(branch, working_dir, filter_set)
|
|
30
|
-
parser = Nokogiri::XML::SAX::Parser.new(doc)
|
|
31
|
-
parser.parse_file(report_filename) unless report_filename.nil?
|
|
32
|
-
[doc.violations, doc.errors]
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'nokogiri'
|
|
4
|
-
require_relative './html_report_builder'
|
|
5
|
-
|
|
6
|
-
module PmdTester
|
|
7
|
-
# Building diff report for a single project
|
|
8
|
-
class DiffReportBuilder < HtmlReportBuilder
|
|
9
|
-
include PmdTester
|
|
10
|
-
NO_DIFFERENCES_MESSAGE = 'No differences found!'
|
|
11
|
-
|
|
12
|
-
def build(project)
|
|
13
|
-
@project = project
|
|
14
|
-
@report_diff = project.report_diff
|
|
15
|
-
|
|
16
|
-
index = File.new(project.diff_report_index_path, 'w')
|
|
17
|
-
|
|
18
|
-
html_report = build_html_report('pmd xml difference report')
|
|
19
|
-
copy_css(project.target_diff_report_path)
|
|
20
|
-
|
|
21
|
-
index.puts html_report
|
|
22
|
-
index.close
|
|
23
|
-
|
|
24
|
-
logger.info "Built difference report of #{project.name} successfully!"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def build_body(doc)
|
|
28
|
-
violation_diffs = @report_diff.violation_diffs
|
|
29
|
-
error_diffs = @report_diff.error_diffs
|
|
30
|
-
doc.body(class: 'composite') do
|
|
31
|
-
doc.div(id: 'contentBox') do
|
|
32
|
-
build_summary_section(doc)
|
|
33
|
-
build_violations_section(doc, violation_diffs)
|
|
34
|
-
build_errors_section(doc, error_diffs)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def build_summary_section(doc)
|
|
40
|
-
doc.div(class: 'section', id: 'Summary') do
|
|
41
|
-
doc.h2 'Summary:'
|
|
42
|
-
build_summary_table(doc)
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def build_summary_table(doc)
|
|
47
|
-
doc.table(class: 'bodyTable', border: '0') do
|
|
48
|
-
doc.thead do
|
|
49
|
-
doc.tr do
|
|
50
|
-
doc.th 'Item'
|
|
51
|
-
doc.th 'Base'
|
|
52
|
-
doc.th 'Patch'
|
|
53
|
-
doc.th 'Difference'
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
build_summary_table_body(doc)
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def build_summary_table_body(doc)
|
|
62
|
-
doc.tbody do
|
|
63
|
-
build_summary_row(doc, 'number of errors', @report_diff.base_errors_size,
|
|
64
|
-
@report_diff.patch_errors_size, @report_diff.error_diffs_size)
|
|
65
|
-
build_summary_row(doc, 'number of violations', @report_diff.base_violations_size,
|
|
66
|
-
@report_diff.patch_violations_size, @report_diff.violation_diffs_size)
|
|
67
|
-
build_summary_row(doc, 'execution time', @report_diff.base_execution_time,
|
|
68
|
-
@report_diff.patch_execution_time, @report_diff.diff_execution_time)
|
|
69
|
-
build_summary_row(doc, 'timestamp', @report_diff.base_timestamp,
|
|
70
|
-
@report_diff.patch_timestamp, '')
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def build_summary_row(doc, item, base, patch, diff)
|
|
75
|
-
doc.tr do
|
|
76
|
-
doc.td(class: 'c') { doc.text item }
|
|
77
|
-
doc.td(class: 'a') { doc.text base }
|
|
78
|
-
doc.td(class: 'b') { doc.text patch }
|
|
79
|
-
doc.td(class: 'c') { doc.text diff }
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def build_filename_h3(doc, filename)
|
|
84
|
-
doc.h3 do
|
|
85
|
-
doc.a(href: @project.get_webview_url(filename)) do
|
|
86
|
-
doc.text @project.get_path_inside_project(filename)
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def build_violations_section(doc, violation_diffs)
|
|
92
|
-
doc.div(class: 'section', id: 'Violations') do
|
|
93
|
-
doc.h2 'Violations:'
|
|
94
|
-
|
|
95
|
-
doc.h3 NO_DIFFERENCES_MESSAGE if violation_diffs.empty?
|
|
96
|
-
violation_diffs.each do |key, value|
|
|
97
|
-
doc.div(class: 'section') do
|
|
98
|
-
build_filename_h3(doc, key)
|
|
99
|
-
build_violation_table(doc, key, value)
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
def build_violation_table(doc, key, value)
|
|
106
|
-
doc.table(class: 'bodyTable', border: '0') do
|
|
107
|
-
build_violation_table_head(doc)
|
|
108
|
-
build_violation_table_body(doc, key, value)
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
def build_violation_table_head(doc)
|
|
113
|
-
doc.thead do
|
|
114
|
-
doc.tr do
|
|
115
|
-
doc.th
|
|
116
|
-
doc.th 'priority'
|
|
117
|
-
doc.th 'Rule'
|
|
118
|
-
doc.th 'Message'
|
|
119
|
-
doc.th 'Line'
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
def build_violation_table_body(doc, key, value)
|
|
125
|
-
doc.tbody do
|
|
126
|
-
a_index = 1
|
|
127
|
-
value.each do |pmd_violation|
|
|
128
|
-
build_violation_table_row(doc, key, pmd_violation, a_index)
|
|
129
|
-
a_index += 1
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
def build_violation_table_row(doc, key, pmd_violation, a_index)
|
|
135
|
-
doc.tr(class: pmd_violation.branch == 'base' ? 'a' : 'b') do
|
|
136
|
-
# The anchor
|
|
137
|
-
doc.td do
|
|
138
|
-
doc.a(id: "A#{a_index}", href: "#A#{a_index}") { doc.text '#' }
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
violation = pmd_violation.attrs
|
|
142
|
-
|
|
143
|
-
# The priority of the rule
|
|
144
|
-
doc.td violation['priority']
|
|
145
|
-
|
|
146
|
-
# The rule that trigger the violation
|
|
147
|
-
doc.td do
|
|
148
|
-
doc.a(href: (violation['externalInfoUrl']).to_s) { doc.text violation['rule'] }
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
# The violation message
|
|
152
|
-
doc.td pmd_violation.text
|
|
153
|
-
|
|
154
|
-
# The begin line of the violation
|
|
155
|
-
line = violation['beginline']
|
|
156
|
-
|
|
157
|
-
# The link to the source file
|
|
158
|
-
doc.td do
|
|
159
|
-
link = get_link_to_source(violation, key)
|
|
160
|
-
doc.a(href: link.to_s) { doc.text line }
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
def get_link_to_source(violation, key)
|
|
166
|
-
l_str = @project.type == 'git' ? 'L' : 'l'
|
|
167
|
-
line_str = "##{l_str}#{violation['beginline']}"
|
|
168
|
-
@project.get_webview_url(key) + line_str
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
def build_errors_section(doc, error_diffs)
|
|
172
|
-
doc.div(class: 'section', id: 'Errors') do
|
|
173
|
-
doc.h2 do
|
|
174
|
-
doc.text 'Errors:'
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
doc.h3 NO_DIFFERENCES_MESSAGE if error_diffs.empty?
|
|
178
|
-
error_diffs.each do |key, value|
|
|
179
|
-
doc.div(class: 'section') do
|
|
180
|
-
build_filename_h3(doc, key)
|
|
181
|
-
build_errors_table(doc, value)
|
|
182
|
-
end
|
|
183
|
-
end
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def build_errors_table(doc, errors)
|
|
188
|
-
doc.table(class: 'bodyTable', border: '0') do
|
|
189
|
-
build_errors_table_head(doc)
|
|
190
|
-
build_errors_table_body(doc, errors)
|
|
191
|
-
end
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
def build_errors_table_head(doc)
|
|
195
|
-
doc.thead do
|
|
196
|
-
doc.tr do
|
|
197
|
-
doc.th
|
|
198
|
-
doc.th 'Message'
|
|
199
|
-
doc.th 'Details'
|
|
200
|
-
end
|
|
201
|
-
end
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
def build_errors_table_body(doc, errors)
|
|
205
|
-
doc.tbody do
|
|
206
|
-
b_index = 1
|
|
207
|
-
errors.each do |pmd_error|
|
|
208
|
-
doc.tr(class: pmd_error.branch == 'base' ? 'a' : 'b') do
|
|
209
|
-
# The anchor
|
|
210
|
-
doc.td do
|
|
211
|
-
doc.a(id: "B#{b_index}", href: "#B#{b_index}") { doc.text '#' }
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
# The error message
|
|
215
|
-
doc.td pmd_error.msg
|
|
216
|
-
|
|
217
|
-
# Details of error
|
|
218
|
-
doc.td pmd_error.text
|
|
219
|
-
|
|
220
|
-
b_index += 1
|
|
221
|
-
end
|
|
222
|
-
end
|
|
223
|
-
end
|
|
224
|
-
end
|
|
225
|
-
end
|
|
226
|
-
end
|