pmdtester 1.1.2 → 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.
@@ -57,28 +57,45 @@ module PmdTester
57
57
  :configerrors_by_rule,
58
58
  :exec_time,
59
59
  :timestamp,
60
- :infos_by_rule
60
+ :file
61
61
 
62
62
  def initialize(report_document: nil,
63
+ file: '',
63
64
  exec_time: 0,
64
65
  timestamp: '0')
65
66
  initialize_empty
66
67
  initialize_with_report_document report_document unless report_document.nil?
67
68
  @exec_time = exec_time
68
69
  @timestamp = timestamp
70
+ @file = file
69
71
  end
70
72
 
71
73
  def self.empty
72
74
  new
73
75
  end
74
76
 
77
+ def rule_summaries
78
+ summary = {}
79
+ @violations_by_file.each_value do |violation|
80
+ unless summary.key?(violation.rule_name)
81
+ summary[violation.rule_name] = {
82
+ 'name' => violation.rule_name,
83
+ 'info_url' => violation.info_url,
84
+ 'count' => 0
85
+ }
86
+ end
87
+ summary[violation.rule_name]['count'] += 1
88
+ end
89
+
90
+ summary.values
91
+ end
92
+
75
93
  private
76
94
 
77
95
  def initialize_with_report_document(report_document)
78
96
  @violations_by_file = report_document.violations
79
97
  @errors_by_file = report_document.errors
80
98
  @configerrors_by_rule = report_document.configerrors
81
- @infos_by_rule = report_document.infos_by_rules
82
99
 
83
100
  PmdTester.logger.debug("Loaded #{@violations_by_file.total_size} violations " \
84
101
  "in #{@violations_by_file.num_files} files")
@@ -91,7 +108,6 @@ module PmdTester
91
108
  @violations_by_file = CollectionByFile.new
92
109
  @errors_by_file = CollectionByFile.new
93
110
  @configerrors_by_rule = {}
94
- @infos_by_rule = {}
95
111
  end
96
112
  end
97
113
 
@@ -122,7 +138,7 @@ module PmdTester
122
138
  @error_diffs_by_file = {}
123
139
  @configerror_diffs_by_rule = {}
124
140
 
125
- @rule_infos_union = base_report.infos_by_rule.dup
141
+ @rule_infos_union = {}
126
142
  @base_report = base_report
127
143
  @patch_report = patch_report
128
144
 
@@ -59,6 +59,7 @@ module PmdTester
59
59
  @options.patch_config = "#{baseline_path}/config.xml"
60
60
  else
61
61
  logger.info "Using config #{@options.patch_config} which might differ from baseline"
62
+ RuleSetBuilder.new(@options).calculate_filter_set if @options.filter_with_patch_config
62
63
  end
63
64
 
64
65
  patch_branch_details = create_pmd_report(config: @options.patch_config, branch: @options.patch_branch)
data/pmdtester.gemspec CHANGED
@@ -1,22 +1,22 @@
1
1
  # DO NOT EDIT THIS FILE. Instead, edit Rakefile, and run `rake hoe:spec`.
2
2
 
3
3
  # -*- encoding: utf-8 -*-
4
- # stub: pmdtester 1.1.2 ruby lib
4
+ # stub: pmdtester 1.2.0 ruby lib
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "pmdtester".freeze
8
- s.version = "1.1.2"
8
+ s.version = "1.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
11
11
  s.metadata = { "bug_tracker_uri" => "https://github.com/pmd/pmd-regression-tester/issues", "homepage_uri" => "https://pmd.github.io", "source_code_uri" => "https://github.com/pmd/pmd-regression-tester" } if s.respond_to? :metadata=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Andreas Dangel".freeze, "Binguo Bao".freeze, "Cl\u00E9ment Fournier".freeze]
14
- s.date = "2021-04-20"
14
+ s.date = "2021-06-20"
15
15
  s.description = "A regression testing tool ensure that new problems and unexpected behaviors will not be introduced to PMD project after fixing an issue , and new rules can work as expected.".freeze
16
16
  s.email = ["andreas.dangel@pmd-code.org".freeze, "djydewang@gmail.com".freeze, "clement.fournier76@gmail.com".freeze]
17
17
  s.executables = ["pmdtester".freeze]
18
18
  s.extra_rdoc_files = ["History.md".freeze, "Manifest.txt".freeze, "README.rdoc".freeze]
19
- s.files = [".ci/build.sh".freeze, ".ci/files/env.gpg".freeze, ".ci/inc/install-openjdk.inc".freeze, ".ci/manual-integration-tests.sh".freeze, ".github/workflows/build.yml".freeze, ".github/workflows/manual-integration-tests.yml".freeze, ".gitignore".freeze, ".hoerc".freeze, ".rubocop.yml".freeze, ".rubocop_todo.yml".freeze, ".ruby-version".freeze, "Gemfile".freeze, "History.md".freeze, "LICENSE".freeze, "Manifest.txt".freeze, "README.rdoc".freeze, "Rakefile".freeze, "bin/pmdtester".freeze, "config/all-java.xml".freeze, "config/design.xml".freeze, "config/project-list.xml".freeze, "config/projectlist_1_0_0.xsd".freeze, "config/projectlist_1_1_0.xsd".freeze, "lib/pmdtester.rb".freeze, "lib/pmdtester/builders/liquid_renderer.rb".freeze, "lib/pmdtester/builders/pmd_report_builder.rb".freeze, "lib/pmdtester/builders/project_builder.rb".freeze, "lib/pmdtester/builders/project_hasher.rb".freeze, "lib/pmdtester/builders/rule_set_builder.rb".freeze, "lib/pmdtester/builders/simple_progress_logger.rb".freeze, "lib/pmdtester/builders/summary_report_builder.rb".freeze, "lib/pmdtester/cmd.rb".freeze, "lib/pmdtester/collection_by_file.rb".freeze, "lib/pmdtester/parsers/options.rb".freeze, "lib/pmdtester/parsers/pmd_report_document.rb".freeze, "lib/pmdtester/parsers/projects_parser.rb".freeze, "lib/pmdtester/pmd_branch_detail.rb".freeze, "lib/pmdtester/pmd_configerror.rb".freeze, "lib/pmdtester/pmd_error.rb".freeze, "lib/pmdtester/pmd_report_detail.rb".freeze, "lib/pmdtester/pmd_tester_utils.rb".freeze, "lib/pmdtester/pmd_violation.rb".freeze, "lib/pmdtester/project.rb".freeze, "lib/pmdtester/report_diff.rb".freeze, "lib/pmdtester/resource_locator.rb".freeze, "lib/pmdtester/runner.rb".freeze, "pmdtester.gemspec".freeze, "resources/_includes/diff_pill_row.html".freeze, "resources/css/bootstrap.min.css".freeze, "resources/css/datatables.min.css".freeze, "resources/css/pmd-tester.css".freeze, "resources/js/bootstrap.min.js".freeze, "resources/js/code-snippets.js".freeze, "resources/js/datatables.min.js".freeze, "resources/js/jquery-3.2.1.slim.min.js".freeze, "resources/js/jquery.min.js".freeze, "resources/js/popper.min.js".freeze, "resources/js/project-report.js".freeze, "resources/project_diff_report.html".freeze, "resources/project_index.html".freeze]
19
+ s.files = [".ci/build.sh".freeze, ".ci/inc/fetch_ci_scripts.bash".freeze, ".ci/manual-integration-tests.sh".freeze, ".github/workflows/build.yml".freeze, ".github/workflows/manual-integration-tests.yml".freeze, ".gitignore".freeze, ".hoerc".freeze, ".rubocop.yml".freeze, ".rubocop_todo.yml".freeze, ".ruby-version".freeze, "Gemfile".freeze, "History.md".freeze, "LICENSE".freeze, "Manifest.txt".freeze, "README.rdoc".freeze, "Rakefile".freeze, "bin/pmdtester".freeze, "config/all-java.xml".freeze, "config/design.xml".freeze, "config/project-list.xml".freeze, "config/projectlist_1_0_0.xsd".freeze, "config/projectlist_1_1_0.xsd".freeze, "config/projectlist_1_2_0.xsd".freeze, "lib/pmdtester.rb".freeze, "lib/pmdtester/builders/liquid_renderer.rb".freeze, "lib/pmdtester/builders/pmd_report_builder.rb".freeze, "lib/pmdtester/builders/project_builder.rb".freeze, "lib/pmdtester/builders/project_hasher.rb".freeze, "lib/pmdtester/builders/rule_set_builder.rb".freeze, "lib/pmdtester/builders/simple_progress_logger.rb".freeze, "lib/pmdtester/builders/summary_report_builder.rb".freeze, "lib/pmdtester/cmd.rb".freeze, "lib/pmdtester/collection_by_file.rb".freeze, "lib/pmdtester/parsers/options.rb".freeze, "lib/pmdtester/parsers/pmd_report_document.rb".freeze, "lib/pmdtester/parsers/projects_parser.rb".freeze, "lib/pmdtester/pmd_branch_detail.rb".freeze, "lib/pmdtester/pmd_configerror.rb".freeze, "lib/pmdtester/pmd_error.rb".freeze, "lib/pmdtester/pmd_report_detail.rb".freeze, "lib/pmdtester/pmd_tester_utils.rb".freeze, "lib/pmdtester/pmd_violation.rb".freeze, "lib/pmdtester/project.rb".freeze, "lib/pmdtester/report_diff.rb".freeze, "lib/pmdtester/resource_locator.rb".freeze, "lib/pmdtester/runner.rb".freeze, "pmdtester.gemspec".freeze, "resources/_includes/diff_pill_row.html".freeze, "resources/css/bootstrap.min.css".freeze, "resources/css/datatables.min.css".freeze, "resources/css/pmd-tester.css".freeze, "resources/js/bootstrap.min.js".freeze, "resources/js/code-snippets.js".freeze, "resources/js/datatables.min.js".freeze, "resources/js/jquery-3.2.1.slim.min.js".freeze, "resources/js/jquery.min.js".freeze, "resources/js/popper.min.js".freeze, "resources/js/project-report.js".freeze, "resources/project_diff_report.html".freeze, "resources/project_index.html".freeze, "resources/project_pmd_report.html".freeze]
20
20
  s.homepage = "https://pmd.github.io".freeze
21
21
  s.licenses = ["BSD-2-Clause".freeze]
22
22
  s.rdoc_options = ["--main".freeze, "README.rdoc".freeze]
@@ -57,7 +57,8 @@ $(document).ready(function () {
57
57
  viewTotal: true,
58
58
  cascadePanes: true,
59
59
  columns: [0, 1, 3],
60
- order: ['Rule', 'Location (click row to expand)', 'Type']
60
+ order: ['Rule', 'Location (click row to expand)', 'Type'],
61
+ threshold: 1 // always show filters in search pane (default: 0.6)
61
62
  },
62
63
  // scrollCollapse: true,
63
64
  // paging: false,
@@ -18,6 +18,9 @@
18
18
 
19
19
  </head>
20
20
  <body>
21
+ <div class="section">
22
+ <h1>PMD Regression Tester Diff Report for {{project_name}}</h1>
23
+ </div>
21
24
  <div class="section">
22
25
  <h2>Summary</h2>
23
26
  <div class="section-content">
@@ -68,6 +71,12 @@
68
71
  <td class="patch">{{diff.patch_timestamp}}</td>
69
72
  <td class="diff"></td>
70
73
  </tr>
74
+ <tr>
75
+ <td class="item">Full Report</td>
76
+ <td class="base"><a href="base_pmd_report.html">Base PMD Report</a></td>
77
+ <td class="patch"><a href="patch_pmd_report.html">Patch PMD Report</a></td>
78
+ <td class="diff"></td>
79
+ </tr>
71
80
  </tbody>
72
81
  </table>
73
82
  </div>
@@ -13,6 +13,12 @@
13
13
  <link rel="stylesheet" href="css/pmd-tester.css">
14
14
  </head>
15
15
  <body>
16
+ <div class="section">
17
+ <h1>PMD Regression Tester Report</h1>
18
+ <p>
19
+ <a href="https://github.com/pmd/pmd-regression-tester">github.com/pmd/pmd-regression-tester</a>
20
+ </p>
21
+ </div>
16
22
  <div class="section">
17
23
  <h2>Branch details</h2>
18
24
  <div class="section-content">
@@ -37,6 +43,11 @@
37
43
  <span class="external-link-secondary"><a href="{{ comparison_url }}">[Compare]</a></span>
38
44
  </td>
39
45
  </tr>
46
+ <tr>
47
+ <td class="item">Timestamp</td>
48
+ <td class="base">{{base.timestamp}}</td>
49
+ <td class="patch">{{patch.timestamp}}</td>
50
+ </tr>
40
51
  <tr>
41
52
  <td class="item">Total PMD runtime</td>
42
53
  <td class="base">{{base.execution_time}}</td>
@@ -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,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pmdtester
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Dangel
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-04-20 00:00:00.000000000 Z
13
+ date: 2021-06-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
@@ -230,8 +230,7 @@ extra_rdoc_files:
230
230
  - README.rdoc
231
231
  files:
232
232
  - ".ci/build.sh"
233
- - ".ci/files/env.gpg"
234
- - ".ci/inc/install-openjdk.inc"
233
+ - ".ci/inc/fetch_ci_scripts.bash"
235
234
  - ".ci/manual-integration-tests.sh"
236
235
  - ".github/workflows/build.yml"
237
236
  - ".github/workflows/manual-integration-tests.yml"
@@ -252,6 +251,7 @@ files:
252
251
  - config/project-list.xml
253
252
  - config/projectlist_1_0_0.xsd
254
253
  - config/projectlist_1_1_0.xsd
254
+ - config/projectlist_1_2_0.xsd
255
255
  - lib/pmdtester.rb
256
256
  - lib/pmdtester/builders/liquid_renderer.rb
257
257
  - lib/pmdtester/builders/pmd_report_builder.rb
@@ -289,6 +289,7 @@ files:
289
289
  - resources/js/project-report.js
290
290
  - resources/project_diff_report.html
291
291
  - resources/project_index.html
292
+ - resources/project_pmd_report.html
292
293
  homepage: https://pmd.github.io
293
294
  licenses:
294
295
  - BSD-2-Clause
data/.ci/files/env.gpg DELETED
@@ -1 +0,0 @@
1
-
@@ -1,26 +0,0 @@
1
-
2
- function install_openjdk() {
3
- OPENJDK_VERSION=$1
4
- echo "Installing OpenJDK ${OPENJDK_VERSION}"
5
- JDK_OS=linux
6
- COMPONENTS_TO_STRIP=1 # e.g. openjdk-11.0.3+7/bin/java
7
- DOWNLOAD_URL=$(curl --silent -X GET "https://api.adoptopenjdk.net/v3/assets/feature_releases/${OPENJDK_VERSION}/ga?architecture=x64&heap_size=normal&image_type=jdk&jvm_impl=hotspot&os=${JDK_OS}&page=0&page_size=1&project=jdk&sort_method=DEFAULT&sort_order=DESC&vendor=adoptopenjdk" \
8
- -H "accept: application/json" \
9
- | jq -r ".[0].binaries[0].package.link")
10
- OPENJDK_ARCHIVE=$(basename ${DOWNLOAD_URL})
11
- CACHE_DIR=${HOME}/.cache/openjdk
12
- TARGET_DIR=${HOME}/openjdk${OPENJDK_VERSION}
13
- mkdir -p ${CACHE_DIR}
14
- mkdir -p ${TARGET_DIR}
15
- if [ ! -e ${CACHE_DIR}/${OPENJDK_ARCHIVE} ]; then
16
- echo "Downloading from ${DOWNLOAD_URL} to ${CACHE_DIR}"
17
- curl --location --output ${CACHE_DIR}/${OPENJDK_ARCHIVE} "${DOWNLOAD_URL}"
18
- else
19
- echo "Skipped download, file ${CACHE_DIR}/${OPENJDK_ARCHIVE} already exists"
20
- fi
21
- tar --extract --file ${CACHE_DIR}/${OPENJDK_ARCHIVE} -C ${TARGET_DIR} --strip-components=${COMPONENTS_TO_STRIP}
22
- export JAVA_HOME="${TARGET_DIR}"
23
- export PATH="${TARGET_DIR}/bin:${PATH}"
24
- java -version
25
- echo "Java is available at ${TARGET_DIR}"
26
- }