pmdtester 1.0.1 → 1.1.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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/.ci/build.sh +91 -0
  3. data/.ci/files/env.gpg +1 -0
  4. data/.github/workflows/build.yml +39 -0
  5. data/.gitignore +9 -0
  6. data/.hoerc +1 -1
  7. data/.rubocop.yml +6 -2
  8. data/.ruby-version +1 -0
  9. data/History.md +40 -0
  10. data/Manifest.txt +24 -9
  11. data/README.rdoc +45 -30
  12. data/Rakefile +5 -3
  13. data/config/all-java.xml +1 -1
  14. data/config/design.xml +1 -1
  15. data/config/projectlist_1_0_0.xsd +2 -1
  16. data/config/projectlist_1_1_0.xsd +31 -0
  17. data/lib/pmdtester.rb +8 -7
  18. data/lib/pmdtester/builders/liquid_renderer.rb +73 -0
  19. data/lib/pmdtester/builders/pmd_report_builder.rb +102 -78
  20. data/lib/pmdtester/builders/project_builder.rb +100 -0
  21. data/lib/pmdtester/builders/project_hasher.rb +126 -0
  22. data/lib/pmdtester/builders/rule_set_builder.rb +92 -47
  23. data/lib/pmdtester/builders/simple_progress_logger.rb +4 -4
  24. data/lib/pmdtester/builders/summary_report_builder.rb +62 -131
  25. data/lib/pmdtester/collection_by_file.rb +55 -0
  26. data/lib/pmdtester/parsers/options.rb +19 -0
  27. data/lib/pmdtester/parsers/pmd_report_document.rb +74 -29
  28. data/lib/pmdtester/parsers/projects_parser.rb +2 -4
  29. data/lib/pmdtester/pmd_branch_detail.rb +29 -19
  30. data/lib/pmdtester/pmd_configerror.rb +23 -24
  31. data/lib/pmdtester/pmd_error.rb +34 -34
  32. data/lib/pmdtester/pmd_report_detail.rb +9 -12
  33. data/lib/pmdtester/pmd_tester_utils.rb +55 -0
  34. data/lib/pmdtester/pmd_violation.rb +66 -28
  35. data/lib/pmdtester/project.rb +21 -48
  36. data/lib/pmdtester/report_diff.rb +179 -111
  37. data/lib/pmdtester/resource_locator.rb +4 -0
  38. data/lib/pmdtester/runner.rb +66 -64
  39. data/pmdtester.gemspec +27 -36
  40. data/resources/_includes/diff_pill_row.html +6 -0
  41. data/resources/css/bootstrap.min.css +7 -0
  42. data/resources/css/datatables.min.css +36 -0
  43. data/resources/css/pmd-tester.css +131 -0
  44. data/resources/js/bootstrap.min.js +7 -0
  45. data/resources/js/code-snippets.js +66 -0
  46. data/resources/js/datatables.min.js +726 -0
  47. data/resources/js/jquery-3.2.1.slim.min.js +4 -0
  48. data/resources/js/jquery.min.js +2 -0
  49. data/resources/js/popper.min.js +5 -0
  50. data/resources/js/project-report.js +136 -0
  51. data/resources/project_diff_report.html +205 -0
  52. data/resources/project_index.html +102 -0
  53. metadata +64 -20
  54. data/.travis.yml +0 -40
  55. data/lib/pmdtester/builders/diff_builder.rb +0 -31
  56. data/lib/pmdtester/builders/diff_report/configerrors.rb +0 -50
  57. data/lib/pmdtester/builders/diff_report/errors.rb +0 -71
  58. data/lib/pmdtester/builders/diff_report/violations.rb +0 -77
  59. data/lib/pmdtester/builders/diff_report_builder.rb +0 -99
  60. data/lib/pmdtester/builders/html_report_builder.rb +0 -56
  61. data/resources/css/maven-base.css +0 -155
  62. data/resources/css/maven-theme.css +0 -171
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pmdtester
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.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-07-08 00:00:00.000000000 Z
13
+ date: 2020-12-05 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: nokogiri
@@ -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
@@ -191,6 +220,7 @@ description: A regression testing tool ensure that new problems and unexpected b
191
220
  email:
192
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,14 @@ extra_rdoc_files:
199
229
  - Manifest.txt
200
230
  - README.rdoc
201
231
  files:
232
+ - ".ci/build.sh"
233
+ - ".ci/files/env.gpg"
234
+ - ".github/workflows/build.yml"
235
+ - ".gitignore"
202
236
  - ".hoerc"
203
237
  - ".rubocop.yml"
204
238
  - ".rubocop_todo.yml"
205
- - ".travis.yml"
239
+ - ".ruby-version"
206
240
  - Gemfile
207
241
  - History.md
208
242
  - LICENSE
@@ -214,18 +248,17 @@ files:
214
248
  - config/design.xml
215
249
  - config/project-list.xml
216
250
  - config/projectlist_1_0_0.xsd
251
+ - config/projectlist_1_1_0.xsd
217
252
  - 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
253
+ - lib/pmdtester/builders/liquid_renderer.rb
224
254
  - lib/pmdtester/builders/pmd_report_builder.rb
255
+ - lib/pmdtester/builders/project_builder.rb
256
+ - lib/pmdtester/builders/project_hasher.rb
225
257
  - lib/pmdtester/builders/rule_set_builder.rb
226
258
  - lib/pmdtester/builders/simple_progress_logger.rb
227
259
  - lib/pmdtester/builders/summary_report_builder.rb
228
260
  - lib/pmdtester/cmd.rb
261
+ - lib/pmdtester/collection_by_file.rb
229
262
  - lib/pmdtester/parsers/options.rb
230
263
  - lib/pmdtester/parsers/pmd_report_document.rb
231
264
  - lib/pmdtester/parsers/projects_parser.rb
@@ -233,14 +266,26 @@ files:
233
266
  - lib/pmdtester/pmd_configerror.rb
234
267
  - lib/pmdtester/pmd_error.rb
235
268
  - lib/pmdtester/pmd_report_detail.rb
269
+ - lib/pmdtester/pmd_tester_utils.rb
236
270
  - lib/pmdtester/pmd_violation.rb
237
271
  - lib/pmdtester/project.rb
238
272
  - lib/pmdtester/report_diff.rb
239
273
  - lib/pmdtester/resource_locator.rb
240
274
  - lib/pmdtester/runner.rb
241
275
  - pmdtester.gemspec
242
- - resources/css/maven-base.css
243
- - resources/css/maven-theme.css
276
+ - resources/_includes/diff_pill_row.html
277
+ - resources/css/bootstrap.min.css
278
+ - resources/css/datatables.min.css
279
+ - resources/css/pmd-tester.css
280
+ - resources/js/bootstrap.min.js
281
+ - resources/js/code-snippets.js
282
+ - resources/js/datatables.min.js
283
+ - resources/js/jquery-3.2.1.slim.min.js
284
+ - resources/js/jquery.min.js
285
+ - resources/js/popper.min.js
286
+ - resources/js/project-report.js
287
+ - resources/project_diff_report.html
288
+ - resources/project_index.html
244
289
  homepage: https://pmd.github.io
245
290
  licenses:
246
291
  - BSD-2-Clause
@@ -258,15 +303,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
258
303
  requirements:
259
304
  - - ">="
260
305
  - !ruby/object:Gem::Version
261
- version: '2.2'
306
+ version: '2.7'
262
307
  required_rubygems_version: !ruby/object:Gem::Requirement
263
308
  requirements:
264
309
  - - ">="
265
310
  - !ruby/object:Gem::Version
266
311
  version: '0'
267
312
  requirements: []
268
- rubyforge_project:
269
- rubygems_version: 2.7.7
313
+ rubygems_version: 3.1.4
270
314
  signing_key:
271
315
  specification_version: 4
272
316
  summary: A regression testing tool ensure that new problems and unexpected behaviors
@@ -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
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Contains methods to write out html for the configuration errors.
4
- # This mixin is used by DiffReportBuilder.
5
- module DiffReportBuilderConfigErrors
6
- def build_configerrors_section(doc, configerrors_diffs)
7
- doc.div(class: 'section', id: 'configerrors') do
8
- doc.h2 'Configuration Errors:'
9
-
10
- doc.h3 PmdTester::HtmlReportBuilder::NO_DIFFERENCES_MESSAGE if configerrors_diffs.empty?
11
- configerrors_diffs.each do |key, value|
12
- doc.div(class: 'section') do
13
- doc.h3 key
14
- build_configerrors_table(doc, value)
15
- end
16
- end
17
- end
18
- end
19
-
20
- def build_configerrors_table(doc, errors)
21
- doc.table(class: 'bodyTable', border: '0') do
22
- build_configerrors_table_head(doc)
23
- build_configerrors_table_body(doc, errors)
24
- end
25
- end
26
-
27
- def build_configerrors_table_head(doc)
28
- build_table_head(doc, '', 'Rule', 'Message')
29
- end
30
-
31
- def build_configerrors_table_body(doc, errors)
32
- doc.tbody do
33
- errors.each { |pmd_configerror| build_configerrors_table_row(doc, pmd_configerror) }
34
- end
35
- end
36
-
37
- def build_configerrors_table_row(doc, pmd_configerror)
38
- doc.tr(class: pmd_configerror.branch == PmdTester::BASE ? 'b' : 'a') do
39
- build_table_anchor_column(doc, 'C', increment_configerror_index)
40
-
41
- doc.td pmd_configerror.rulename
42
- doc.td pmd_configerror.msg
43
- end
44
- end
45
-
46
- def increment_configerror_index
47
- @configerror_index ||= 0 # init with 0
48
- @configerror_index += 1
49
- end
50
- end
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Contains methods to write out html for the errors.
4
- # This mixin is used by DiffReportBuilder.
5
- module DiffReportBuilderErrors
6
- def build_errors_section(doc, error_diffs)
7
- doc.div(class: 'section', id: 'Errors') do
8
- doc.h2 'Errors:'
9
-
10
- doc.h3 PmdTester::HtmlReportBuilder::NO_DIFFERENCES_MESSAGE if error_diffs.empty?
11
- error_diffs.each do |key, value|
12
- doc.div(class: 'section') do
13
- build_filename_h3(doc, key)
14
- build_errors_table(doc, value)
15
- end
16
- end
17
- end
18
- end
19
-
20
- def build_errors_table(doc, errors)
21
- doc.table(class: 'bodyTable', border: '0') do
22
- build_errors_table_head(doc)
23
- build_errors_table_body(doc, errors)
24
- end
25
- end
26
-
27
- def build_errors_table_head(doc)
28
- build_table_head(doc, '', 'Message', 'Details')
29
- end
30
-
31
- def build_errors_table_body(doc, errors)
32
- if PmdTester::ReportDiff.comparable?(errors)
33
- # we have only two errors and those are from base and patch, so we
34
- # can compare them and display a nice diff
35
- pmd_error_a = errors[0]
36
- pmd_error_b = errors[1]
37
- diff_a = Differ.diff_by_line(pmd_error_a.text, pmd_error_b.text).format_as(:html)
38
- diff_b = Differ.diff_by_line(pmd_error_b.text, pmd_error_a.text).format_as(:html)
39
- doc.tbody do
40
- build_errors_table_row(doc, pmd_error_a, diff_a)
41
- build_errors_table_row(doc, pmd_error_b, diff_b)
42
- end
43
- else
44
- # many errors, just report them one by one
45
- doc.tbody do
46
- errors.each { |pmd_error| build_errors_table_row(doc, pmd_error) }
47
- end
48
- end
49
- end
50
-
51
- def build_errors_table_row(doc, pmd_error, text = nil)
52
- doc.tr(class: pmd_error.branch == PmdTester::BASE ? 'b' : 'a') do
53
- build_table_anchor_column(doc, 'B', increment_error_index)
54
-
55
- text = pmd_error.text if text.nil?
56
-
57
- # The error message
58
- doc.td pmd_error.msg
59
- doc.td do
60
- doc.pre do
61
- doc << text
62
- end
63
- end
64
- end
65
- end
66
-
67
- def increment_error_index
68
- @error_index ||= 0 # init with 0
69
- @error_index += 1
70
- end
71
- end
@@ -1,77 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Contains methods to write out html for the violations.
4
- # This mixin is used by DiffReportBuilder.
5
- module DiffReportBuilderViolations
6
- def build_violations_section(doc, violation_diffs)
7
- doc.div(class: 'section', id: 'Violations') do
8
- doc.h2 'Violations:'
9
-
10
- doc.h3 PmdTester::HtmlReportBuilder::NO_DIFFERENCES_MESSAGE if violation_diffs.empty?
11
- violation_diffs.each do |key, value|
12
- doc.div(class: 'section') do
13
- build_filename_h3(doc, key)
14
- build_violation_table(doc, key, value)
15
- end
16
- end
17
- end
18
- end
19
-
20
- def build_violation_table(doc, key, value)
21
- doc.table(class: 'bodyTable', border: '0') do
22
- build_violation_table_head(doc)
23
- build_violation_table_body(doc, key, value)
24
- end
25
- end
26
-
27
- def build_violation_table_head(doc)
28
- build_table_head(doc, '', 'Priority', 'Rule', 'Message', 'Line')
29
- end
30
-
31
- def build_violation_table_body(doc, key, value)
32
- doc.tbody do
33
- value.each do |pmd_violation|
34
- build_violation_table_row(doc, key, pmd_violation)
35
- end
36
- end
37
- end
38
-
39
- def build_violation_table_row(doc, key, pmd_violation)
40
- doc.tr(class: pmd_violation.branch == PmdTester::BASE ? 'b' : 'a') do
41
- build_table_anchor_column(doc, 'A', increment_violation_index)
42
-
43
- violation = pmd_violation.attrs
44
-
45
- # The priority of the rule
46
- doc.td violation['priority']
47
-
48
- # The rule that trigger the violation
49
- doc.td do
50
- doc.a(href: (violation['externalInfoUrl']).to_s) { doc.text violation['rule'] }
51
- end
52
-
53
- # The violation message
54
- doc.td "\n" + pmd_violation.text + "\n"
55
-
56
- # The begin line of the violation
57
- line = violation['beginline']
58
-
59
- # The link to the source file
60
- doc.td do
61
- link = get_link_to_source(violation, key)
62
- doc.a(href: link.to_s) { doc.text line }
63
- end
64
- end
65
- end
66
-
67
- def get_link_to_source(violation, key)
68
- l_str = @project.type == 'git' ? 'L' : 'l'
69
- line_str = "##{l_str}#{violation['beginline']}"
70
- @project.get_webview_url(key) + line_str
71
- end
72
-
73
- def increment_violation_index
74
- @violation_index ||= 0 # init with 0
75
- @violation_index += 1
76
- end
77
- end