pmdtester 1.0.0.pre.beta2

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: bc98cf9ced82209cfacc2752160229c5eb067c9604c8639d3ec5d9663134d8fc
4
+ data.tar.gz: 2c5a013fe96a5e60614f7d932837434a42e15ba19ae5a5e7096934ae4b7692f7
5
+ SHA512:
6
+ metadata.gz: eb72595523c73e2a2a9adfe560f653baf0c35581ee803d3381ef9f400c90aeec9f92ef262f19f6f56323a848a5b4a98fb898af811577c815429a6ac93c619e7e
7
+ data.tar.gz: 93d11d0f0943378987968434a6f0a36391830826a70dc6a8ce09a9706aef6cd5cfe87bf31671e7bba031ac52f34c2d26e4edc96f096a5c02f9be19dfd2ce4a82
data/.rubocop.yml ADDED
@@ -0,0 +1,10 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ AllCops:
4
+ TargetRubyVersion: 2.4
5
+ Exclude:
6
+ - 'target/**/*'
7
+ - 'test/resources/**/*'
8
+
9
+ Metrics/LineLength:
10
+ Max: 100
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,27 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2018-07-12 16:57:46 +0800 using RuboCop version 0.56.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 22
10
+ Metrics/AbcSize:
11
+ Max: 47
12
+
13
+ # Offense count: 3
14
+ # Configuration parameters: CountComments.
15
+ Metrics/ClassLength:
16
+ Max: 174
17
+
18
+ # Offense count: 33
19
+ # Configuration parameters: CountComments.
20
+ Metrics/MethodLength:
21
+ Max: 35
22
+
23
+ # Offense count: 5
24
+ Naming/AccessorMethodName:
25
+ Exclude:
26
+ - 'lib/pmdtester/builders/pmd_report_builder.rb'
27
+ - 'lib/pmdtester/parsers/projects_parser.rb'
data/.travis.yml ADDED
@@ -0,0 +1,22 @@
1
+ language: ruby
2
+ jdk: oraclejdk9
3
+ script:
4
+ - rake rubocop
5
+ - rake clean test
6
+ - rake clean integration-test
7
+ - rake install_gem
8
+ - pmdtester -h
9
+
10
+ before_deploy:
11
+ - git stash --all
12
+ - rake hoe:spec
13
+
14
+ deploy:
15
+ provider: rubygems
16
+ api_key:
17
+ secure: xcEpX/r7es6/jnvNPrVClVkKLemC+4EaFACfK9PCw05jAqf3sDX8UMKD2B4NU1JfF+I/szC5loyCe8s1wBUbFhelR8sL93RNOyVlQCKqaDTFw0DUvnbKWdgDb7POhcmo8SWi4aaKPias6wCuWA/Wc6jUvcrlAgKDsmYqOukXQoFyQbOUsnqrE/FMA7BfUIHkeeJbNk8807u4+aMqahZyzTFvuEVBUvKqCzDYPl9kpm4fzOtjxiExj1ic9dr2Dz5bcyWteMjZFSgjYWgZUXpk8FWCj5R/8VQsklxFFXFZlQIVwqtpaKgEOjwOOxaA6b8O7OeU82HtSPfxy6eCNE7pvzoYq+ZGxxk6fPbAl2mqKtPU76oRKH8YmXuEdDtdHVCYp7wOFdrLhJ6bJ3H/DSD14Kso21D3ktt4y4qkCd0Ev1a6nbY3LrO+NqFlZytwlYY1t8CUWyc9GfvpQXd7j0shSvrh2RU0+ATcQc0tRSHE2htjbiMWPi/ffMNe5h7iVqho5cLC4n187VrWOqGJf2S47spIgw9N3VWzyfAxAxI2XIvWcGoAIQhEgU6bH14Mz+0amG6ggzCBAbDPEC1j8cuwVkmanWCWZWi6EuRbCYZ7rgCFIx3hZS9NPBANfcXudm7eINvuMlFnmwrVzmtTIEZTy56ZfaWPzGxotyn5M9DdT1U=
18
+ on:
19
+ tags: true
20
+ skip_cleanup: true
21
+ gem: pmdtester
22
+ gemspec: pmdtester.gemspec
data/Gemfile ADDED
@@ -0,0 +1,20 @@
1
+ # -*- ruby -*-
2
+
3
+ # DO NOT EDIT THIS FILE. Instead, edit Rakefile, and run `rake bundler:gemfile`.
4
+
5
+ source "https://rubygems.org/"
6
+
7
+ gem "nokogiri", "~>1.8.2"
8
+ gem "slop", "~>4.6.2"
9
+
10
+ gem "hoe-bundler", "~>1.2", :group => [:development, :test]
11
+ gem "hoe-gemspec", "~>1.0", :group => [:development, :test]
12
+ gem "hoe-git", "~>1.6", :group => [:development, :test]
13
+ gem "minitest", "~>5.10.1", :group => [:development, :test]
14
+ gem "mocha", "~>1.5.0", :group => [:development, :test]
15
+ gem "rubocop", "~>0.56.0", :group => [:development, :test]
16
+ gem "test-unit", "~>3.2.3", :group => [:development, :test]
17
+ gem "rdoc", ">=4.0", "<6", :group => [:development, :test]
18
+ gem "hoe", "~>3.17", :group => [:development, :test]
19
+
20
+ # vim: syntax=ruby
data/History.md ADDED
@@ -0,0 +1,36 @@
1
+ # 1.0.0.beta2 / 2018-07-17
2
+
3
+ * First release of pmdtester
4
+
5
+ Note: This is a beta release. The pmdtester is feature complete,
6
+ but might contains bugs.
7
+
8
+ ## External Contributions
9
+
10
+ * [#1](https://github.com/pmd/pmd-regression-tester/pull/1): Initialize project - [BBG](https://github.com/djydewang)
11
+ * [#2](https://github.com/pmd/pmd-regression-tester/pull/2): Add projects parser & design format of projectlist - [BBG](https://github.com/djydewang)
12
+ * [#3](https://github.com/pmd/pmd-regression-tester/pull/3): Add pmd report builder - [BBG](https://github.com/djydewang)
13
+ * [#4](https://github.com/pmd/pmd-regression-tester/pull/4): Test PmdReportBuilder - [BBG](https://github.com/djydewang)
14
+ * [#5](https://github.com/pmd/pmd-regression-tester/pull/5): Add DiffBuilder for PmdTester - [BBG](https://github.com/djydewang)
15
+ * [#6](https://github.com/pmd/pmd-regression-tester/pull/6): Change the package command for building PMD - [BBG](https://github.com/djydewang)
16
+ * [#7](https://github.com/pmd/pmd-regression-tester/pull/7): Add test cases for DiffBuilder - [BBG](https://github.com/djydewang)
17
+ * [#8](https://github.com/pmd/pmd-regression-tester/pull/8): Add HtmlReportBuilder to PmdTester - [BBG](https://github.com/djydewang)
18
+ * [#9](https://github.com/pmd/pmd-regression-tester/pull/9): Add test cases for HtmlReportBuilder - [BBG](https://github.com/djydewang)
19
+ * [#10](https://github.com/pmd/pmd-regression-tester/pull/10): Add bundler to manage dependency - [BBG](https://github.com/djydewang)
20
+ * [#11](https://github.com/pmd/pmd-regression-tester/pull/11): Using rubocop to check code style of the project - [BBG](https://github.com/djydewang)
21
+ * [#12](https://github.com/pmd/pmd-regression-tester/pull/12): Fix Metrics/BlockLength offenses - [BBG](https://github.com/djydewang)
22
+ * [#13](https://github.com/pmd/pmd-regression-tester/pull/13): Separate integration test cases - [BBG](https://github.com/djydewang)
23
+ * [#14](https://github.com/pmd/pmd-regression-tester/pull/14): Add Runner to PmdTester - [BBG](https://github.com/djydewang)
24
+ * [#15](https://github.com/pmd/pmd-regression-tester/pull/15): Fix rubocop Style/Documentation offenses - [BBG](https://github.com/djydewang)
25
+ * [#16](https://github.com/pmd/pmd-regression-tester/pull/16): Add single mode, add mocha library for unit test - [BBG](https://github.com/djydewang)
26
+ * [#17](https://github.com/pmd/pmd-regression-tester/pull/17): Add more details about pmd branchs and pmd reports - [BBG](https://github.com/djydewang)
27
+ * [#18](https://github.com/pmd/pmd-regression-tester/pull/18): Add SummaryReportBuilder to PmdTester - [BBG](https://github.com/djydewang)
28
+ * [#19](https://github.com/pmd/pmd-regression-tester/pull/19): Add online mode for PmdTester - [BBG](https://github.com/djydewang)
29
+ * [#20](https://github.com/pmd/pmd-regression-tester/pull/20): Change the way of parsing xml file from DOM to SAX - [BBG](https://github.com/djydewang)
30
+ * [#21](https://github.com/pmd/pmd-regression-tester/pull/21): Add auto-gen-config option for PmdTester - [BBG](https://github.com/djydewang)
31
+ * [#22](https://github.com/pmd/pmd-regression-tester/pull/22): Add 'introduce new errors' table head for html summary report - [BBG](https://github.com/djydewang)
32
+ * [#23](https://github.com/pmd/pmd-regression-tester/pull/23): Preparing for the release of PmdTester - [BBG](https://github.com/djydewang)
33
+ * [#24](https://github.com/pmd/pmd-regression-tester/pull/24): Adding a logging framework for PmdTester - [BBG](https://github.com/djydewang)
34
+ * [#25](https://github.com/pmd/pmd-regression-tester/pull/25): Remove working directory substring from filename of pmd violation - [BBG](https://github.com/djydewang)
35
+ * [#26](https://github.com/pmd/pmd-regression-tester/pull/26): Release pmdtester 1.0.0.beta1 - [BBG](https://github.com/djydewang)
36
+ * [#27](https://github.com/pmd/pmd-regression-tester/pull/27): Release pmdtester 1.0.0.beta2 - [BBG](https://github.com/djydewang)
data/LICENSE ADDED
@@ -0,0 +1,25 @@
1
+ BSD 2-Clause License
2
+
3
+ Copyright (c) 2018, PMD
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ * Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ * Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
20
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.rdoc ADDED
@@ -0,0 +1,33 @@
1
+ = pmdtester
2
+
3
+ code :: https://github.com/pmd/pmd-regression-tester
4
+ bugs :: https://github.com/pmd/pmd-regression-tester/issues
5
+
6
+ build-status :: {<img src="https://travis-ci.com/pmd/pmd-regression-tester.svg?branch=master" alt="Build Status" />}[https://travis-ci.com/pmd/pmd-regression-tester]
7
+
8
+ == DESCRIPTION:
9
+
10
+ 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.
11
+
12
+ == FEATURES/PROBLEMS:
13
+
14
+ The diff report can be generated according to the base and patch branch of PMD
15
+ on a list of standard projects(Spring Framework, Hibernate, Solr, etc.)
16
+
17
+ == SYNOPSIS:
18
+
19
+ * FIX (code sample of usage)
20
+
21
+ == REQUIREMENTS:
22
+
23
+ * FIX (list of requirements)
24
+
25
+ == INSTALL:
26
+
27
+ * FIX (sudo gem install, anything else)
28
+
29
+ == DEVELOPERS:
30
+
31
+ You can list all tasks by running `rake -T`.
32
+
33
+
data/Rakefile ADDED
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ # -*- ruby -*-
4
+ require 'rake/testtask'
5
+ require 'rubocop/rake_task'
6
+ require_relative './lib/pmdtester/parsers/options.rb'
7
+
8
+ gem 'hoe'
9
+ require 'hoe'
10
+ Hoe.plugin :bundler
11
+ Hoe.plugin :gemspec
12
+ Hoe.plugin :git
13
+
14
+ hoe = Hoe.spec 'pmdtester' do
15
+ self.version = PmdTester::Options::VERSION
16
+
17
+ developer 'Andreas Dangel', 'andreas.dangel@adangel.org'
18
+ developer 'Binguo Bao', 'djydewang@gmail.com'
19
+
20
+ self.clean_globs = %w[target/reports/**/* target/test/**/*]
21
+ self.extra_deps += [['nokogiri', '~> 1.8.2'], ['slop', '~> 4.6.2']]
22
+ self.extra_dev_deps += [
23
+ ['hoe-bundler', '~> 1.2'],
24
+ ['hoe-gemspec', '~> 1.0'],
25
+ ['hoe-git', '~> 1.6'],
26
+ ['minitest', '~> 5.10.1'],
27
+ ['mocha', '~> 1.5.0'],
28
+ ['rubocop', '~> 0.56.0'],
29
+ ['test-unit', '~> 3.2.3']
30
+ ]
31
+
32
+ license 'BSD-2-Clause'
33
+ end
34
+
35
+ # Refers to
36
+ # http://rubocop.readthedocs.io/en/latest/integration_with_other_tools/#rake-integration
37
+ RuboCop::RakeTask.new(:rubocop) do |task|
38
+ task.patterns = %w[lib/**/*.rb test/**/*.rb]
39
+ end
40
+
41
+ # Run integration test cases
42
+ Rake::TestTask.new('integration-test') do |task|
43
+ task.description = 'Run integration test cases'
44
+ task.libs = ['test']
45
+ task.pattern = 'test/**/integration_test_*.rb'
46
+ task.verbose = true
47
+ end
48
+
49
+ desc 'generate the pmdtester.gemspec file'
50
+ task 'hoe:spec' do
51
+ File.open("#{hoe.name}.gemspec", "w") { |f| f.write hoe.spec.to_ruby}
52
+ end
53
+
54
+ # vim: syntax=ruby
data/bin/pmdtester ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../lib/pmdtester/runner'
5
+
6
+ runner = PmdTester::Runner.new(ARGV)
7
+ runner.run
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0"?>
2
+
3
+ <ruleset name="All Java Rules"
4
+ xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
5
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6
+ xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
7
+ <description>Every Java Rule in PMD</description>
8
+
9
+ <rule ref="category/java/bestpractices.xml" />
10
+ <rule ref="category/java/codestyle.xml" />
11
+ <rule ref="category/java/design.xml" />
12
+ <rule ref="category/java/documentation.xml" />
13
+ <rule ref="category/java/errorprone.xml" />
14
+ <rule ref="category/java/multithreading.xml" />
15
+ <rule ref="category/java/performance.xml" />
16
+ <rule ref="category/java/security.xml" />
17
+
18
+ </ruleset>
data/config/design.xml ADDED
@@ -0,0 +1,78 @@
1
+ <?xml version="1.0"?>
2
+
3
+ <ruleset name="Design"
4
+ xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
5
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6
+ xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
7
+
8
+ <description>
9
+ The Design ruleset contains rules that flag suboptimal code implementations. Alternate approaches
10
+ are suggested.
11
+ </description>
12
+
13
+ <!-- Rules, that have been moved into a category -->
14
+ <rule ref="category/java/design.xml/AbstractClassWithoutAnyMethod" deprecated="true" />
15
+ <rule ref="category/java/design.xml/AvoidDeeplyNestedIfStmts" deprecated="true" />
16
+ <rule ref="category/java/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal" deprecated="true" />
17
+ <rule ref="category/java/design.xml/DataClass" deprecated="true" />
18
+ <rule ref="category/java/design.xml/FinalFieldCouldBeStatic" deprecated="true" />
19
+ <rule ref="category/java/design.xml/GodClass" deprecated="true" />
20
+ <rule ref="category/java/design.xml/ImmutableField" deprecated="true" />
21
+ <rule ref="category/java/design.xml/LogicInversion" deprecated="true" />
22
+ <rule ref="category/java/design.xml/SimplifyBooleanExpressions" deprecated="true" />
23
+ <rule ref="category/java/design.xml/SimplifyBooleanReturns" deprecated="true" />
24
+ <rule ref="category/java/design.xml/SimplifyConditional" deprecated="true" />
25
+ <rule ref="category/java/design.xml/SingularField" deprecated="true" />
26
+ <rule ref="category/java/design.xml/SwitchDensity" deprecated="true" />
27
+ <rule ref="category/java/design.xml/UseUtilityClass" deprecated="true" />
28
+
29
+ <rule ref="category/java/errorprone.xml/AssignmentToNonFinalStatic" deprecated="true" />
30
+ <rule ref="category/java/errorprone.xml/AvoidInstanceofChecksInCatchClause" deprecated="true" />
31
+ <rule ref="category/java/errorprone.xml/BadComparison" deprecated="true" />
32
+ <rule ref="category/java/errorprone.xml/CloseResource" deprecated="true" />
33
+ <rule ref="category/java/errorprone.xml/CompareObjectsWithEquals" deprecated="true" />
34
+ <rule ref="category/java/errorprone.xml/ConstructorCallsOverridableMethod" deprecated="true" />
35
+ <rule ref="category/java/errorprone.xml/EqualsNull" deprecated="true" />
36
+ <rule ref="category/java/errorprone.xml/IdempotentOperations" deprecated="true" />
37
+ <rule ref="category/java/errorprone.xml/InstantiationToGetClass" deprecated="true" />
38
+ <rule ref="category/java/errorprone.xml/MissingBreakInSwitch" deprecated="true" />
39
+ <rule ref="category/java/errorprone.xml/MissingStaticMethodInNonInstantiatableClass" deprecated="true" />
40
+ <rule ref="category/java/errorprone.xml/NonCaseLabelInSwitchStatement" deprecated="true" />
41
+ <rule ref="category/java/errorprone.xml/NonStaticInitializer" deprecated="true" />
42
+ <rule ref="category/java/errorprone.xml/ReturnEmptyArrayRatherThanNull" deprecated="true" />
43
+ <rule ref="category/java/errorprone.xml/SimpleDateFormatNeedsLocale" deprecated="true" />
44
+ <rule ref="category/java/errorprone.xml/SingleMethodSingleton" deprecated="true" />
45
+ <rule ref="category/java/errorprone.xml/SingletonClassReturningNewInstance" deprecated="true" />
46
+ <rule ref="category/java/errorprone.xml/UseLocaleWithCaseConversions" deprecated="true" />
47
+
48
+ <rule ref="category/java/codestyle.xml/AvoidProtectedFieldInFinalClass" deprecated="true" />
49
+ <rule ref="category/java/codestyle.xml/AvoidProtectedMethodInFinalClassNotExtending" deprecated="true" />
50
+ <rule ref="category/java/codestyle.xml/ConfusingTernary" deprecated="true" />
51
+ <rule ref="category/java/codestyle.xml/EmptyMethodInAbstractClassShouldBeAbstract" deprecated="true" />
52
+ <rule ref="category/java/codestyle.xml/FieldDeclarationsShouldBeAtStartOfClass" deprecated="true" />
53
+ <rule ref="category/java/codestyle.xml/UnnecessaryLocalBeforeReturn" deprecated="true" />
54
+
55
+ <rule ref="category/java/multithreading.xml/AvoidSynchronizedAtMethodLevel" deprecated="true" />
56
+ <rule ref="category/java/multithreading.xml/NonThreadSafeSingleton" deprecated="true" />
57
+ <rule ref="category/java/multithreading.xml/UnsynchronizedStaticDateFormatter" deprecated="true" />
58
+ <rule ref="category/java/multithreading.xml/UseNotifyAllInsteadOfNotify" deprecated="true" />
59
+
60
+ <rule ref="category/java/bestpractices.xml/AbstractClassWithoutAbstractMethod" deprecated="true" />
61
+ <rule ref="category/java/bestpractices.xml/AccessorClassGeneration" deprecated="true" />
62
+ <rule ref="category/java/bestpractices.xml/AccessorMethodGeneration" deprecated="true" />
63
+ <rule ref="category/java/bestpractices.xml/AvoidReassigningParameters" deprecated="true" />
64
+ <rule ref="category/java/bestpractices.xml/ConstantsInInterface" deprecated="true" />
65
+ <rule ref="category/java/bestpractices.xml/DefaultLabelNotLastInSwitchStmt" deprecated="true" />
66
+ <rule ref="category/java/bestpractices.xml/PositionLiteralsFirstInCaseInsensitiveComparisons" deprecated="true" />
67
+ <rule ref="category/java/bestpractices.xml/PositionLiteralsFirstInComparisons" deprecated="true" />
68
+ <rule ref="category/java/bestpractices.xml/PreserveStackTrace" deprecated="true" />
69
+ <rule ref="category/java/bestpractices.xml/SwitchStmtsShouldHaveDefault" deprecated="true" />
70
+ <rule ref="category/java/bestpractices.xml/UseCollectionIsEmpty" deprecated="true" />
71
+ <rule ref="category/java/bestpractices.xml/UseVarargs" deprecated="true" />
72
+
73
+ <rule ref="category/java/performance.xml/OptimizableToArrayCall" deprecated="true" />
74
+ <rule ref="category/java/performance.xml/TooFewBranchesForASwitchStatement" deprecated="true" />
75
+
76
+ <rule ref="category/java/documentation.xml/UncommentedEmptyConstructor" deprecated="true" />
77
+ <rule ref="category/java/documentation.xml/UncommentedEmptyMethodBody" deprecated="true" />
78
+ </ruleset>
@@ -0,0 +1,29 @@
1
+ <?xml version="1.0"?>
2
+
3
+ <projectlist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:noNamespaceSchemaLocation="projectlist_1_0_0.xsd">
5
+ <description>Standard Projects</description>
6
+
7
+ <project>
8
+ <name>checkstyle</name>
9
+ <type>git</type>
10
+ <connection>https://github.com/checkstyle/checkstyle</connection>
11
+ <tag>checkstyle-8.10</tag>
12
+ <exclude-pattern>**/src/test/resources-noncompilable/**/*</exclude-pattern>
13
+ <exclude-pattern>**/src/test/resources/**/*</exclude-pattern>
14
+ </project>
15
+
16
+ <project>
17
+ <name>spring-framework</name>
18
+ <type>git</type>
19
+ <connection>https://github.com/spring-projects/spring-framework</connection>
20
+ <tag>v5.0.6.RELEASE</tag>
21
+ </project>
22
+
23
+ <!---<project>
24
+ <name>openjdk10</name>
25
+ <type>hg</type>
26
+ <connection>http://hg.openjdk.java.net/jdk10/jdk10/jdk</connection>
27
+ <webview-url>http://hg.openjdk.java.net/jdk10/jdk10/jdk/file/777356696811</webview-url>
28
+ </project> -->
29
+ </projectlist>
@@ -0,0 +1,28 @@
1
+ <?xml version="1.0" ?>
2
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
3
+ <xs:element name="projectlist">
4
+ <xs:complexType>
5
+ <xs:sequence>
6
+ <xs:element name="description" type="xs:string" minOccurs="1" maxOccurs="1"/>
7
+ <xs:element name="project" type="project" minOccurs="1" maxOccurs="unbounded"/>
8
+ </xs:sequence>
9
+ </xs:complexType>
10
+ </xs:element>
11
+ <xs:complexType name="project">
12
+ <xs:sequence>
13
+ <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/>
14
+ <xs:element name="type" minOccurs="1" maxOccurs="1">
15
+ <xs:simpleType>
16
+ <xs:restriction base="xs:string">
17
+ <xs:enumeration value="git"/>
18
+ <xs:enumeration value="hg"/>
19
+ </xs:restriction>
20
+ </xs:simpleType>
21
+ </xs:element>
22
+ <xs:element name="connection" type="xs:string" minOccurs="1" maxOccurs="1"/>
23
+ <xs:element name="webview-url" type="xs:string" minOccurs="0" maxOccurs="1"/>
24
+ <xs:element name="tag" type="xs:string" minOccurs="0" maxOccurs="1"/>
25
+ <xs:element name="exclude-pattern" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
26
+ </xs:sequence>
27
+ </xs:complexType>
28
+ </xs:schema>
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'nokogiri'
4
+ require_relative '../pmd_error'
5
+ require_relative '../pmd_violation'
6
+ require_relative '../pmd_report_detail'
7
+ require_relative '../parsers/pmd_report_document'
8
+ require_relative '../report_diff'
9
+
10
+ module PmdTester
11
+ # Building difference between two pmd xml files
12
+ class DiffBuilder
13
+ # The schema of pmd xml report refers to
14
+ # http://pmd.sourceforge.net/report_2_0_0.xsd
15
+ def build(base_report_filename, patch_report_filename, base_info, patch_info, filter_set = nil)
16
+ report_diffs = ReportDiff.new
17
+ base_details, patch_details = report_diffs.calculate_details(base_info, patch_info)
18
+ base_violations, base_errors = parse_pmd_report(base_report_filename, 'base',
19
+ base_details.working_dir, filter_set)
20
+ patch_violations, patch_errors = parse_pmd_report(patch_report_filename, 'patch',
21
+ patch_details.working_dir)
22
+ report_diffs.calculate_violations(base_violations, patch_violations)
23
+ report_diffs.calculate_errors(base_errors, patch_errors)
24
+
25
+ report_diffs
26
+ end
27
+
28
+ def parse_pmd_report(report_filename, branch, working_dir, filter_set = nil)
29
+ doc = PmdReportDocument.new(branch, working_dir, filter_set)
30
+ parser = Nokogiri::XML::SAX::Parser.new(doc)
31
+ parser.parse_file(report_filename) unless report_filename.nil?
32
+ [doc.violations, doc.errors]
33
+ end
34
+ end
35
+ end