pmdtester 1.0.1 → 1.1.0

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