pmdtester 1.0.0 → 1.2.0

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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.ci/build.sh +99 -0
  3. data/.ci/inc/fetch_ci_scripts.bash +19 -0
  4. data/.ci/manual-integration-tests.sh +37 -0
  5. data/.github/workflows/build.yml +55 -0
  6. data/.github/workflows/manual-integration-tests.yml +43 -0
  7. data/.gitignore +9 -0
  8. data/.hoerc +1 -1
  9. data/.rubocop.yml +9 -2
  10. data/.ruby-version +1 -0
  11. data/History.md +79 -0
  12. data/Manifest.txt +28 -9
  13. data/README.rdoc +59 -33
  14. data/Rakefile +7 -5
  15. data/config/all-java.xml +1 -1
  16. data/config/design.xml +1 -1
  17. data/config/project-list.xml +8 -7
  18. data/config/projectlist_1_0_0.xsd +2 -1
  19. data/config/projectlist_1_1_0.xsd +31 -0
  20. data/config/projectlist_1_2_0.xsd +39 -0
  21. data/lib/pmdtester.rb +8 -7
  22. data/lib/pmdtester/builders/liquid_renderer.rb +130 -0
  23. data/lib/pmdtester/builders/pmd_report_builder.rb +107 -79
  24. data/lib/pmdtester/builders/project_builder.rb +105 -0
  25. data/lib/pmdtester/builders/project_hasher.rb +128 -0
  26. data/lib/pmdtester/builders/rule_set_builder.rb +96 -47
  27. data/lib/pmdtester/builders/simple_progress_logger.rb +4 -4
  28. data/lib/pmdtester/builders/summary_report_builder.rb +63 -131
  29. data/lib/pmdtester/collection_by_file.rb +55 -0
  30. data/lib/pmdtester/parsers/options.rb +24 -0
  31. data/lib/pmdtester/parsers/pmd_report_document.rb +72 -28
  32. data/lib/pmdtester/parsers/projects_parser.rb +2 -4
  33. data/lib/pmdtester/pmd_branch_detail.rb +35 -19
  34. data/lib/pmdtester/pmd_configerror.rb +23 -24
  35. data/lib/pmdtester/pmd_error.rb +34 -34
  36. data/lib/pmdtester/pmd_report_detail.rb +10 -13
  37. data/lib/pmdtester/pmd_tester_utils.rb +58 -0
  38. data/lib/pmdtester/pmd_violation.rb +66 -28
  39. data/lib/pmdtester/project.rb +42 -56
  40. data/lib/pmdtester/report_diff.rb +203 -109
  41. data/lib/pmdtester/resource_locator.rb +4 -0
  42. data/lib/pmdtester/runner.rb +67 -64
  43. data/pmdtester.gemspec +28 -37
  44. data/resources/_includes/diff_pill_row.html +6 -0
  45. data/resources/css/bootstrap.min.css +7 -0
  46. data/resources/css/datatables.min.css +36 -0
  47. data/resources/css/pmd-tester.css +132 -0
  48. data/resources/js/bootstrap.min.js +7 -0
  49. data/resources/js/code-snippets.js +73 -0
  50. data/resources/js/datatables.min.js +726 -0
  51. data/resources/js/jquery-3.2.1.slim.min.js +4 -0
  52. data/resources/js/jquery.min.js +2 -0
  53. data/resources/js/popper.min.js +5 -0
  54. data/resources/js/project-report.js +137 -0
  55. data/resources/project_diff_report.html +214 -0
  56. data/resources/project_index.html +113 -0
  57. data/resources/project_pmd_report.html +186 -0
  58. metadata +73 -25
  59. data/.travis.yml +0 -40
  60. data/lib/pmdtester/builders/diff_builder.rb +0 -31
  61. data/lib/pmdtester/builders/diff_report/configerrors.rb +0 -50
  62. data/lib/pmdtester/builders/diff_report/errors.rb +0 -71
  63. data/lib/pmdtester/builders/diff_report/violations.rb +0 -77
  64. data/lib/pmdtester/builders/diff_report_builder.rb +0 -99
  65. data/lib/pmdtester/builders/html_report_builder.rb +0 -56
  66. data/resources/css/maven-base.css +0 -155
  67. data/resources/css/maven-theme.css +0 -171
@@ -0,0 +1,186 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>PMD Report for {{project_name}}</title>
6
+
7
+ <link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css"/>
8
+ <link rel="stylesheet" type="text/css" href="../css/datatables.min.css"/>
9
+ <link rel="stylesheet" type="text/css" href="../css/pmd-tester.css">
10
+
11
+ <script src="../js/jquery-3.2.1.slim.min.js"></script>
12
+ <script src="../js/popper.min.js"></script>
13
+ <script src="../js/bootstrap.min.js"></script>
14
+ <script src="../js/datatables.min.js"></script>
15
+ <script src="../js/code-snippets.js"></script>
16
+ <!-- This is generated -->
17
+ <script src="./{{branch}}_data.js"></script>
18
+
19
+ </head>
20
+ <body>
21
+ <div class="section">
22
+ <h1>PMD Report for {{project_name}}</h1>
23
+ </div>
24
+ <div class="section">
25
+ <h2>Summary</h2>
26
+ <div class="section-content">
27
+ <table id="table-summary" class="table">
28
+ <thead>
29
+ <tr>
30
+ <th></th>
31
+ <th>{{branch | capitalize}}</th>
32
+ </tr>
33
+ </thead>
34
+ <tbody>
35
+ <tr>
36
+ <td class="item"><a href="#section-violations">Violations</a>
37
+ </td>
38
+ <td class="{{branch}}">{{report.violation_counts}}</td>
39
+ </tr>
40
+ <tr>
41
+ <td class="item"><a href="#section-errors">Errors</a></td>
42
+ <td class="{{branch}}">{{report.error_counts}}</td>
43
+ </tr>
44
+ <tr>
45
+ <td class="item"><a href="#section-configerrors">ConfigErrors</a></td>
46
+ <td class="{{branch}}">{{report.configerror_counts}}</td>
47
+ </tr>
48
+ <tr>
49
+ <td class="item">Execution time</td>
50
+ <td class="{{branch}}">{{report.execution_time}}</td>
51
+ </tr>
52
+ <tr>
53
+ <td class="item">Timestamp</td>
54
+ <td class="{{branch}}">{{report.timestamp}}</td>
55
+ </tr>
56
+ <tr>
57
+ <td class="item">Full Report</td>
58
+ <td class="{{branch}}"><a href="{{branch}}_pmd_report.xml">{{branch}}_pmd_report.xml</a></td>
59
+ </tr>
60
+ </tbody>
61
+ </table>
62
+ </div>
63
+ </div>
64
+
65
+ <div class="section" id="section-rule-summary">
66
+
67
+ <h2>Summary by rule</h2>
68
+
69
+ <div class="section-content">
70
+
71
+ <div class="table-responsive">
72
+ <table id="rule-summary" class="table">
73
+ <thead>
74
+ <tr>
75
+ <th>Rule</th>
76
+ <th>{{branch | capitalize}}</th>
77
+ </tr>
78
+ </thead>
79
+ <tbody>
80
+
81
+ {% assign sorted_rules = report.rules | sort: 'name' %}
82
+
83
+ {% for rule in sorted_rules %}
84
+ <tr id="rule-summary-{{rule.name}}">
85
+ <td class="rulename">
86
+ {{ rule.name }}
87
+ <span class="external-link-secondary"><a class="rulelink" href="{{rule.info_url}}" target="_blank" rel="noopener noreferrer">[doc]</a></span>
88
+ </td>
89
+ <td class="{{branch}}count">{{ rule.count }}</td>
90
+ </tr>
91
+ {% endfor %}
92
+ </tbody>
93
+ </table>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ <div class="section" id="section-violations">
98
+
99
+ <h2>Violations</h2>
100
+
101
+ <div class="section-content">
102
+
103
+ <table id="violationsTable" width="100%" class="table">
104
+ <thead>
105
+ <tr>
106
+ <th>Location (click row to expand)</th>
107
+ <th>Rule</th>
108
+ <th>Message</th>
109
+ <th>Type</th>
110
+ </tr>
111
+ </thead>
112
+ </table>
113
+
114
+ </div>
115
+ </div>
116
+
117
+ <div class="section" id="section-errors">
118
+
119
+ <h2>Errors</h2>
120
+
121
+ <div class="section-content">
122
+
123
+ <div class="table-responsive">
124
+ <table id="error-table" class="table">
125
+ <thead>
126
+ <tr>
127
+ <th>File</th>
128
+ <th>Description (click to expand)</th>
129
+ </tr>
130
+ </thead>
131
+ <tbody>
132
+ {% for error in report.errors %}
133
+ <tr id="error-{{forloop.index}}" class="accordion-toggle error-row" data-toggle="collapse" data-target="#error-{{forloop.index}}-expanded">
134
+ <td><a href="{{error.file_url}}" target="_blank" rel="noopener noreferrer">{{error.short_filename}}</a></td>
135
+ <td>{{error.short_message | escape | replace: error.filename, "<span class='meta-var'>$FILE</span>" }}</td>
136
+ </tr>
137
+ <tr>
138
+ <td class="row-hidden" colspan="2">
139
+ <div class="accordion-body collapse" id="error-{{forloop.index}}-expanded">
140
+ <div class="collapsed-content-padder">
141
+ <pre>
142
+ {{ error.stack_trace_html }}
143
+ </pre>
144
+ </div>
145
+ </div>
146
+ </td>
147
+ </tr>
148
+ {% endfor %}
149
+ </tbody>
150
+ </table>
151
+ </div>
152
+
153
+ </div>
154
+ </div>
155
+
156
+ <div class="section" id="section-configerrors">
157
+
158
+ <h2>ConfigErrors</h2>
159
+
160
+ <div class="section-content">
161
+
162
+ <div class="table-responsive">
163
+ <table id="configerror-table" class="table">
164
+ <thead>
165
+ <tr>
166
+ <th>Rule</th>
167
+ <th>Message</th>
168
+ </tr>
169
+ </thead>
170
+ <tbody>
171
+ {% for configerror in report.configerrors %}
172
+ <tr class="configerror-row">
173
+ <td>{{configerror.rule}}</td>
174
+ <td>{{configerror.message}}</td>
175
+ </tr>
176
+ {% endfor %}
177
+ </tbody>
178
+ </table>
179
+ </div>
180
+ </div>
181
+ </div>
182
+
183
+ <script src="../js/project-report.js"></script>
184
+
185
+ </body>
186
+ </html>
metadata CHANGED
@@ -1,30 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pmdtester
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.2.0
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: 2020-04-25 00:00:00.000000000 Z
13
+ date: 2021-06-20 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: nokogiri
16
17
  requirement: !ruby/object:Gem::Requirement
17
18
  requirements:
18
- - - "~>"
19
+ - - ">="
19
20
  - !ruby/object:Gem::Version
20
- version: '1.8'
21
+ version: 1.11.0.rc4
21
22
  type: :runtime
22
23
  prerelease: false
23
24
  version_requirements: !ruby/object:Gem::Requirement
24
25
  requirements:
25
- - - "~>"
26
+ - - ">="
26
27
  - !ruby/object:Gem::Version
27
- version: '1.8'
28
+ version: 1.11.0.rc4
28
29
  - !ruby/object:Gem::Dependency
29
30
  name: slop
30
31
  requirement: !ruby/object:Gem::Requirement
@@ -67,6 +68,34 @@ dependencies:
67
68
  - - "~>"
68
69
  - !ruby/object:Gem::Version
69
70
  version: '3.5'
71
+ - !ruby/object:Gem::Dependency
72
+ name: logger-colors
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '1.0'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
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'
70
99
  - !ruby/object:Gem::Dependency
71
100
  name: hoe-bundler
72
101
  requirement: !ruby/object:Gem::Requirement
@@ -155,22 +184,22 @@ dependencies:
155
184
  name: rdoc
156
185
  requirement: !ruby/object:Gem::Requirement
157
186
  requirements:
158
- - - "<"
159
- - !ruby/object:Gem::Version
160
- version: '7'
161
187
  - - ">="
162
188
  - !ruby/object:Gem::Version
163
189
  version: '4.0'
190
+ - - "<"
191
+ - !ruby/object:Gem::Version
192
+ version: '7'
164
193
  type: :development
165
194
  prerelease: false
166
195
  version_requirements: !ruby/object:Gem::Requirement
167
196
  requirements:
168
- - - "<"
169
- - !ruby/object:Gem::Version
170
- version: '7'
171
197
  - - ">="
172
198
  - !ruby/object:Gem::Version
173
199
  version: '4.0'
200
+ - - "<"
201
+ - !ruby/object:Gem::Version
202
+ version: '7'
174
203
  - !ruby/object:Gem::Dependency
175
204
  name: hoe
176
205
  requirement: !ruby/object:Gem::Requirement
@@ -189,8 +218,9 @@ description: A regression testing tool ensure that new problems and unexpected b
189
218
  will not be introduced to PMD project after fixing an issue , and new rules can
190
219
  work as expected.
191
220
  email:
192
- - andreas.dangel@adangel.org
221
+ - andreas.dangel@pmd-code.org
193
222
  - djydewang@gmail.com
223
+ - clement.fournier76@gmail.com
194
224
  executables:
195
225
  - pmdtester
196
226
  extensions: []
@@ -199,10 +229,16 @@ extra_rdoc_files:
199
229
  - Manifest.txt
200
230
  - README.rdoc
201
231
  files:
232
+ - ".ci/build.sh"
233
+ - ".ci/inc/fetch_ci_scripts.bash"
234
+ - ".ci/manual-integration-tests.sh"
235
+ - ".github/workflows/build.yml"
236
+ - ".github/workflows/manual-integration-tests.yml"
237
+ - ".gitignore"
202
238
  - ".hoerc"
203
239
  - ".rubocop.yml"
204
240
  - ".rubocop_todo.yml"
205
- - ".travis.yml"
241
+ - ".ruby-version"
206
242
  - Gemfile
207
243
  - History.md
208
244
  - LICENSE
@@ -214,18 +250,18 @@ files:
214
250
  - config/design.xml
215
251
  - config/project-list.xml
216
252
  - config/projectlist_1_0_0.xsd
253
+ - config/projectlist_1_1_0.xsd
254
+ - config/projectlist_1_2_0.xsd
217
255
  - lib/pmdtester.rb
218
- - lib/pmdtester/builders/diff_builder.rb
219
- - lib/pmdtester/builders/diff_report/configerrors.rb
220
- - lib/pmdtester/builders/diff_report/errors.rb
221
- - lib/pmdtester/builders/diff_report/violations.rb
222
- - lib/pmdtester/builders/diff_report_builder.rb
223
- - lib/pmdtester/builders/html_report_builder.rb
256
+ - lib/pmdtester/builders/liquid_renderer.rb
224
257
  - lib/pmdtester/builders/pmd_report_builder.rb
258
+ - lib/pmdtester/builders/project_builder.rb
259
+ - lib/pmdtester/builders/project_hasher.rb
225
260
  - lib/pmdtester/builders/rule_set_builder.rb
226
261
  - lib/pmdtester/builders/simple_progress_logger.rb
227
262
  - lib/pmdtester/builders/summary_report_builder.rb
228
263
  - lib/pmdtester/cmd.rb
264
+ - lib/pmdtester/collection_by_file.rb
229
265
  - lib/pmdtester/parsers/options.rb
230
266
  - lib/pmdtester/parsers/pmd_report_document.rb
231
267
  - lib/pmdtester/parsers/projects_parser.rb
@@ -233,14 +269,27 @@ files:
233
269
  - lib/pmdtester/pmd_configerror.rb
234
270
  - lib/pmdtester/pmd_error.rb
235
271
  - lib/pmdtester/pmd_report_detail.rb
272
+ - lib/pmdtester/pmd_tester_utils.rb
236
273
  - lib/pmdtester/pmd_violation.rb
237
274
  - lib/pmdtester/project.rb
238
275
  - lib/pmdtester/report_diff.rb
239
276
  - lib/pmdtester/resource_locator.rb
240
277
  - lib/pmdtester/runner.rb
241
278
  - pmdtester.gemspec
242
- - resources/css/maven-base.css
243
- - resources/css/maven-theme.css
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
+ - resources/project_pmd_report.html
244
293
  homepage: https://pmd.github.io
245
294
  licenses:
246
295
  - BSD-2-Clause
@@ -258,15 +307,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
258
307
  requirements:
259
308
  - - ">="
260
309
  - !ruby/object:Gem::Version
261
- version: '2.2'
310
+ version: '2.7'
262
311
  required_rubygems_version: !ruby/object:Gem::Requirement
263
312
  requirements:
264
313
  - - ">="
265
314
  - !ruby/object:Gem::Version
266
315
  version: '0'
267
316
  requirements: []
268
- rubyforge_project:
269
- rubygems_version: 2.7.7
317
+ rubygems_version: 3.1.6
270
318
  signing_key:
271
319
  specification_version: 4
272
320
  summary: A regression testing tool ensure that new problems and unexpected behaviors
data/.travis.yml DELETED
@@ -1,40 +0,0 @@
1
- language: ruby
2
- before_install:
3
- - LOCAL_DIR=${HOME}/.cache/openjdk
4
- - TARGET_DIR=${HOME}/openjdk11
5
- - mkdir -p ${LOCAL_DIR}
6
- - mkdir -p ${TARGET_DIR}
7
- - DOWNLOAD_URL="https://pmd-code.org/openjdk/jdk-11.0.7%2B10/OpenJDK11U-jdk_x64_linux_hotspot_11.0.7_10.tar.gz"
8
- - OPENJDK_ARCHIVE=$(basename $DOWNLOAD_URL)
9
- - if [ ! -e ${LOCAL_DIR}/${OPENJDK_ARCHIVE} ]; then wget --directory-prefix ${LOCAL_DIR} --timestamping --continue ${DOWNLOAD_URL}; fi
10
- - tar --extract --file ${LOCAL_DIR}/${OPENJDK_ARCHIVE} -C ${TARGET_DIR} --strip-components=1
11
- - export JAVA_HOME="${TARGET_DIR}"
12
- - export PATH="${TARGET_DIR}/bin:${PATH}"
13
- - java -version
14
- script:
15
- - rake check_manifest
16
- - rake rubocop
17
- - rake clean test
18
- - rake clean integration-test
19
- - rake install_gem
20
- - pmdtester -h
21
-
22
- before_deploy:
23
- - git stash --all
24
- - rake hoe:spec
25
-
26
- deploy:
27
- provider: rubygems
28
- api_key:
29
- secure: "PMohVxVpupi3qKmSWjny6ASPKiWpyZxMTluARs15tiRR4Pco3Ko+Z+Nk2F6XNZkY4q4zudS91JGtYeGzuBknI/tFB9S1LjR5RDe9cUbETlhpazBCaRvVFt0K8okb9JAWfVi+mnCG5saBn0Osxv/PKS2sVr/3dK9JFVncaYfRhIZfhB/LcdHMLpnlv94sr60SGPA8ITz3pj1dKe6E2wfqQjgD8RNOOLxtcTFeEZVHDuJn0gsKz+ou2Dyzth+2SksKKboosodWXNbAIx5xg+iVLZgGFluQknZ130G0PA6vJzMLWgLEjUtFDV1QtE80jP7LhuMOKXaXHa6NghHL7h3TiBO9/2SEdHSdIq5NeMm2f8qttLNqI15cgGolyUGd+K43tAdvNuJws+wbQsj53htGFLvSKPfwTxipn1Ppa1s6/bSeUQvtj/kXO6MnVdwTBNjlm791DaG8sC4WbvppLvrKPfpvqGoOfWj9h5PlB8SsaHyDtOB6oCYE354RxLJxaI6b4hcxleyz7mPmoPcKQjcPSM8i004lCCNAmPm0VMW/yTi1Z1iBq6+1OiW7fe6txJi9zCPhMzziz1EA0oQYBgu99Uy9wjHh8CkWXtZDx+WSYRxCZOJ6kFN72dgYQbIsn4kxzrjwCp+NN0woDPR0FXcuePNgAz2hBtAvbKdOC2OCQVw="
30
- on:
31
- tags: true
32
- skip_cleanup: true
33
- gem: pmdtester
34
- gemspec: pmdtester.gemspec
35
-
36
- cache:
37
- directories:
38
- - vendor/bundle
39
- - "$HOME/.rvm/"
40
- - "$HOME/.cache/openjdk"
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'nokogiri'
4
-
5
- module PmdTester
6
- # Building difference between two pmd xml files
7
- class DiffBuilder
8
- include PmdTester
9
- # The schema of pmd xml report refers to
10
- # http://pmd.sourceforge.net/report_2_0_0.xsd
11
- def build(base_report_filename, patch_report_filename, base_info, patch_info, filter_set = nil)
12
- report_diffs = ReportDiff.new
13
- base_details, patch_details = report_diffs.calculate_details(base_info, patch_info)
14
- base_report = parse_pmd_report(base_report_filename, BASE, base_details.working_dir,
15
- filter_set)
16
- patch_report = parse_pmd_report(patch_report_filename, PATCH, patch_details.working_dir)
17
- report_diffs.calculate_violations(base_report.violations, patch_report.violations)
18
- report_diffs.calculate_errors(base_report.errors, patch_report.errors)
19
- report_diffs.calculate_configerrors(base_report.configerrors, patch_report.configerrors)
20
-
21
- report_diffs
22
- end
23
-
24
- def parse_pmd_report(report_filename, branch, working_dir, filter_set = nil)
25
- doc = PmdReportDocument.new(branch, working_dir, filter_set)
26
- parser = Nokogiri::XML::SAX::Parser.new(doc)
27
- parser.parse_file(report_filename) unless report_filename.nil?
28
- doc
29
- end
30
- end
31
- end