pmdtester 1.0.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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