license_finder 2.1.2 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +29 -0
- data/CONTRIBUTING.md +28 -3
- data/Dockerfile +82 -0
- data/README.md +11 -2
- data/Rakefile +27 -0
- data/appveyor.yml +21 -0
- data/bin/license_finder_pip.py +1 -1
- data/ci/pipelines/pipeline.yml.erb +78 -0
- data/ci/scripts/test.sh +27 -0
- data/ci/tasks/build.yml +16 -0
- data/features/features/package_managers/gradle_spec.rb +6 -0
- data/features/features/package_managers/maven_spec.rb +9 -0
- data/features/features/report/diff_spec.rb +26 -23
- data/features/fixtures/alternate-build-file-gradle/build-alt.gradle +26 -0
- data/features/fixtures/alternate-build-file-gradle/settings.gradle +1 -0
- data/features/fixtures/file-based-libs-gradle/build.gradle +1 -1
- data/features/fixtures/gradle-wrapper/build.gradle +26 -0
- data/features/fixtures/gradle-wrapper/gradlew +3 -0
- data/features/fixtures/gradle-wrapper/gradlew.bat +1 -0
- data/features/fixtures/maven-wrapper/mvnw +3 -0
- data/features/fixtures/maven-wrapper/mvnw.cmd +7 -0
- data/features/fixtures/maven-wrapper/pom.xml +37 -0
- data/features/support/testing_dsl.rb +12 -5
- data/lib/license_finder/cli/base.rb +1 -0
- data/lib/license_finder/cli/main.rb +2 -1
- data/lib/license_finder/configuration.rb +6 -13
- data/lib/license_finder/core.rb +2 -1
- data/lib/license_finder/diff.rb +4 -4
- data/lib/license_finder/package.rb +5 -3
- data/lib/license_finder/package_delta.rb +2 -5
- data/lib/license_finder/package_managers/bower.rb +1 -1
- data/lib/license_finder/package_managers/bundler.rb +4 -4
- data/lib/license_finder/package_managers/go_dep.rb +21 -4
- data/lib/license_finder/package_managers/go_package.rb +2 -1
- data/lib/license_finder/package_managers/go_vendor.rb +21 -7
- data/lib/license_finder/package_managers/go_workspace.rb +18 -11
- data/lib/license_finder/package_managers/gradle.rb +42 -15
- data/lib/license_finder/package_managers/maven.rb +31 -17
- data/lib/license_finder/package_managers/maven_dependency_finder.rb +13 -0
- data/lib/license_finder/package_managers/maven_package.rb +6 -1
- data/lib/license_finder/package_managers/npm.rb +4 -4
- data/lib/license_finder/package_managers/rebar.rb +1 -1
- data/lib/license_finder/reports/csv_report.rb +5 -1
- data/lib/license_finder/reports/diff_report.rb +3 -7
- data/lib/license_finder/reports/text_report.rb +6 -1
- data/lib/license_finder/version.rb +1 -1
- data/license_finder.gemspec +6 -0
- data/spec/lib/license_finder/configuration_spec.rb +0 -8
- data/spec/lib/license_finder/core_spec.rb +2 -1
- data/spec/lib/license_finder/diff_spec.rb +50 -27
- data/spec/lib/license_finder/package_managers/bower_spec.rb +1 -1
- data/spec/lib/license_finder/package_managers/bundler_spec.rb +1 -1
- data/spec/lib/license_finder/package_managers/go_dep_spec.rb +14 -1
- data/spec/lib/license_finder/package_managers/go_vendor_spec.rb +23 -2
- data/spec/lib/license_finder/package_managers/go_workspace_spec.rb +23 -7
- data/spec/lib/license_finder/package_managers/gradle_spec.rb +55 -2
- data/spec/lib/license_finder/package_managers/maven_package_spec.rb +16 -3
- data/spec/lib/license_finder/package_managers/maven_spec.rb +56 -4
- data/spec/lib/license_finder/package_managers/merged_package_spec.rb +8 -4
- data/spec/lib/license_finder/package_spec.rb +4 -1
- data/spec/lib/license_finder/reports/csv_report_spec.rb +8 -0
- data/spec/lib/license_finder/reports/diff_report_spec.rb +5 -5
- data/spec/lib/license_finder/reports/text_report_spec.rb +5 -0
- metadata +218 -9
- data/.travis.yml +0 -37
- data/.travis/install_bower.sh +0 -5
- data/.travis/install_godep.sh +0 -6
- data/.travis/install_gradle.sh +0 -12
- data/.travis/install_rebar.sh +0 -14
@@ -28,7 +28,7 @@ module LicenseFinder
|
|
28
28
|
JSON
|
29
29
|
|
30
30
|
allow(Dir).to receive(:chdir).with(Pathname('/fake/path')) { |&block| block.call }
|
31
|
-
allow(subject).to receive(:capture).with('bower list --json -l action').and_return([json, true])
|
31
|
+
allow(subject).to receive(:capture).with('bower list --json -l action --allow-root').and_return([json, true])
|
32
32
|
|
33
33
|
expect(subject.current_packages.map { |p| [p.name, p.install_path] }).to eq [
|
34
34
|
%w(dependency-library /path/to/thing), %w(another-dependency /path/to/thing2)
|
@@ -30,7 +30,7 @@ module LicenseFinder
|
|
30
30
|
|
31
31
|
describe '.current_packages' do
|
32
32
|
subject do
|
33
|
-
Bundler.new(
|
33
|
+
Bundler.new(ignored_groups: ['dev', 'test'], definition: definition).current_packages
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should have 2 dependencies" do
|
@@ -21,6 +21,10 @@ module LicenseFinder
|
|
21
21
|
{
|
22
22
|
"ImportPath": "github.com/pivotal/bar",
|
23
23
|
"Rev": "3245708abcdef234589450649872346783298736"
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"ImportPath": "code.google.com/foo/bar",
|
27
|
+
"Rev": "3245708abcdef234589450649872346783298735"
|
24
28
|
}
|
25
29
|
]
|
26
30
|
}'
|
@@ -30,6 +34,14 @@ module LicenseFinder
|
|
30
34
|
allow(IO).to receive(:read).with('/fake/path/Godeps/Godeps.json').and_return(content.to_s)
|
31
35
|
end
|
32
36
|
|
37
|
+
it 'sets the homepage for packages' do
|
38
|
+
packages = subject.current_packages
|
39
|
+
|
40
|
+
expect(packages[0].homepage).to eq("github.com/pivotal/foo")
|
41
|
+
expect(packages[1].homepage).to eq("github.com/pivotal/bar")
|
42
|
+
expect(packages[2].homepage).to eq("code.google.com/foo/bar")
|
43
|
+
end
|
44
|
+
|
33
45
|
context 'when dependencies are vendored' do
|
34
46
|
before do
|
35
47
|
allow(FileTest).to receive(:exist?).with('/fake/path/Godeps/_workspace').and_return(true)
|
@@ -52,7 +64,8 @@ module LicenseFinder
|
|
52
64
|
it 'list the dependencies with full version' do
|
53
65
|
expect(subject.current_packages.map(&:version)).to eq [
|
54
66
|
"61164e49940b423ba1f12ddbdf01632ac793e5e9",
|
55
|
-
"3245708abcdef234589450649872346783298736"
|
67
|
+
"3245708abcdef234589450649872346783298736",
|
68
|
+
"3245708abcdef234589450649872346783298735"]
|
56
69
|
end
|
57
70
|
end
|
58
71
|
end
|
@@ -39,6 +39,7 @@ module LicenseFinder
|
|
39
39
|
FileUtils.mkdir_p project_path
|
40
40
|
FileUtils.touch File.join(project_path, 'main.go')
|
41
41
|
FileUtils.mkdir_p File.join(project_path, 'vendor', 'github.com', 'foo', 'bar')
|
42
|
+
FileUtils.mkdir_p File.join(project_path, 'vendor', 'golang.org', 'bar', 'baz')
|
42
43
|
end
|
43
44
|
|
44
45
|
it 'detects the project as go vendor project' do
|
@@ -49,9 +50,13 @@ module LicenseFinder
|
|
49
50
|
let(:go_deps) {
|
50
51
|
["github.com/foo/bar", true]
|
51
52
|
}
|
53
|
+
let(:std_deps) {
|
54
|
+
["stdbar/baz", true]
|
55
|
+
}
|
52
56
|
|
53
57
|
before do
|
54
|
-
allow(subject).to receive(:capture).with(%q[go list -f
|
58
|
+
allow(subject).to receive(:capture).with(%q[go list -f "{{join .Deps \"\n\"}}" ./...]).and_return(go_deps)
|
59
|
+
allow(subject).to receive(:capture).with(%q[go list std]).and_return(std_deps)
|
55
60
|
allow(subject).to receive(:capture).with(%q[git rev-list --max-count 1 HEAD]).and_return(["e0ff7ae205f\n", true])
|
56
61
|
end
|
57
62
|
|
@@ -75,7 +80,6 @@ module LicenseFinder
|
|
75
80
|
["github.com/foo/bar\ngithub.com/foo/bar/baz", true]
|
76
81
|
}
|
77
82
|
|
78
|
-
include_examples 'current_packages'
|
79
83
|
end
|
80
84
|
|
81
85
|
context 'when only sub packages are being used' do
|
@@ -93,6 +97,23 @@ module LicenseFinder
|
|
93
97
|
|
94
98
|
include_examples 'current_packages'
|
95
99
|
end
|
100
|
+
|
101
|
+
context 'when standard packages are being used' do
|
102
|
+
let(:go_deps) {
|
103
|
+
["github.com/foo/bar\ngolang.org/stdbar/baz", true]
|
104
|
+
}
|
105
|
+
|
106
|
+
include_examples 'current_packages'
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'when standard package names match part of a nonstandard package' do
|
110
|
+
let(:go_deps) {
|
111
|
+
["github.com/foo/bar/my-stdbar/baz\ngolang.org/stdbar/baz", true]
|
112
|
+
}
|
113
|
+
|
114
|
+
include_examples 'current_packages'
|
115
|
+
|
116
|
+
end
|
96
117
|
end
|
97
118
|
end
|
98
119
|
|
@@ -34,9 +34,19 @@ module LicenseFinder
|
|
34
34
|
|
35
35
|
let(:go_list_output) {
|
36
36
|
<<HERE
|
37
|
-
encoding/json
|
38
37
|
gopkg.in/yaml.v2
|
39
38
|
github.com/onsi/ginkgo
|
39
|
+
myblip/blop-custom
|
40
|
+
encoding/json
|
41
|
+
golang.org/x/tools/go/ast/astutil
|
42
|
+
HERE
|
43
|
+
}
|
44
|
+
|
45
|
+
let(:std_packages) {
|
46
|
+
<<HERE
|
47
|
+
go/ast
|
48
|
+
blop
|
49
|
+
encoding/json
|
40
50
|
HERE
|
41
51
|
}
|
42
52
|
|
@@ -44,6 +54,8 @@ HERE
|
|
44
54
|
allow(Dir).to receive(:chdir).with(Pathname.new project_path) { |&b| b.call() }
|
45
55
|
allow(FileTest).to receive(:exist?).and_return(false)
|
46
56
|
allow(FileTest).to receive(:exist?).with(File.join(project_path, '.envrc')).and_return(true)
|
57
|
+
allow(subject).to receive(:capture).with('go list -f "{{join .Deps \"\n\"}}" ./...').and_return([go_list_output, true])
|
58
|
+
allow(subject).to receive(:capture).with('go list std').and_return([std_packages, true])
|
47
59
|
end
|
48
60
|
|
49
61
|
it 'changes the directory' do
|
@@ -52,16 +64,14 @@ HERE
|
|
52
64
|
expect(Dir).to have_received(:chdir)
|
53
65
|
end
|
54
66
|
|
55
|
-
it '
|
56
|
-
allow(subject).to receive(:capture).with('go list -f \'{{join .Deps "\n"}}\' ./...').and_return([go_list_output, true])
|
67
|
+
it 'lists only non-standard packages' do
|
57
68
|
packages = subject.send(:go_list)
|
58
|
-
expect(packages.count).to eq(
|
59
|
-
expect(packages).to
|
60
|
-
expect(packages).to include 'gopkg.in/yaml.v2'
|
69
|
+
expect(packages.count).to eq(3)
|
70
|
+
expect(packages).to eq(['gopkg.in/yaml.v2', 'github.com/onsi/ginkgo', 'myblip/blop-custom'])
|
61
71
|
end
|
62
72
|
|
63
73
|
it 'sets gopath to the envrc path' do
|
64
|
-
allow(subject).to receive(:capture).with('go list -f
|
74
|
+
allow(subject).to receive(:capture).with('go list -f "{{join .Deps \"\n\"}}" ./...') {
|
65
75
|
expect(ENV['GOPATH']).to be_nil
|
66
76
|
['', true]
|
67
77
|
}
|
@@ -129,6 +139,12 @@ HERE
|
|
129
139
|
allow(subject).to receive(:git_modules).and_return(git_modules_output)
|
130
140
|
end
|
131
141
|
|
142
|
+
it 'sets homepage for the packages' do
|
143
|
+
packages = subject.current_packages
|
144
|
+
|
145
|
+
expect(packages[0].homepage).to eq('bitbucket.org/kardianos/osext')
|
146
|
+
end
|
147
|
+
|
132
148
|
describe 'should return an array of go packages' do
|
133
149
|
it 'provides package names' do
|
134
150
|
packages = subject.current_packages
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'fakefs/spec_helpers'
|
2
3
|
|
3
4
|
module LicenseFinder
|
4
5
|
describe Gradle do
|
@@ -17,6 +18,17 @@ module LicenseFinder
|
|
17
18
|
expect(GradleDependencyFinder).to receive(:new).and_return(dependencies)
|
18
19
|
end
|
19
20
|
|
21
|
+
it 'uses the gradle wrapper, if present' do
|
22
|
+
subject = Gradle.new(project_path: Pathname('features/fixtures/gradle-wrapper'))
|
23
|
+
expect(Dir).to receive(:chdir).with(Pathname('features/fixtures/gradle-wrapper')).and_call_original
|
24
|
+
if Platform.windows?
|
25
|
+
expect(subject.package_management_command).to eq('gradlew.bat')
|
26
|
+
else
|
27
|
+
expect(subject.package_management_command).to eq('./gradlew')
|
28
|
+
end
|
29
|
+
subject.current_packages
|
30
|
+
end
|
31
|
+
|
20
32
|
it 'uses custom subject command, if provided' do
|
21
33
|
subject = Gradle.new(gradle_command: 'subjectfoo', project_path: Pathname('/fake/path'))
|
22
34
|
expect(Dir).to receive(:chdir).with(Pathname('/fake/path')) { |&block| block.call }
|
@@ -27,11 +39,14 @@ module LicenseFinder
|
|
27
39
|
it 'sets the working directory to project_path, if provided' do
|
28
40
|
subject = Gradle.new(project_path: Pathname('/Users/foo/bar'))
|
29
41
|
expect(Dir).to receive(:chdir).with(Pathname('/Users/foo/bar')) { |&block| block.call }
|
30
|
-
|
42
|
+
if Platform.windows?
|
43
|
+
expect(subject).to receive(:capture).with('gradle.bat downloadLicenses').and_return(['', true])
|
44
|
+
else
|
45
|
+
expect(subject).to receive(:capture).with('gradle downloadLicenses').and_return(['', true])
|
46
|
+
end
|
31
47
|
subject.current_packages
|
32
48
|
end
|
33
49
|
|
34
|
-
|
35
50
|
context 'when dependencies are found' do
|
36
51
|
let(:content) do
|
37
52
|
[
|
@@ -123,5 +138,43 @@ module LicenseFinder
|
|
123
138
|
end
|
124
139
|
end
|
125
140
|
end
|
141
|
+
|
142
|
+
describe '#active?' do
|
143
|
+
include FakeFS::SpecHelpers
|
144
|
+
|
145
|
+
it 'return true if build.gradle exists' do
|
146
|
+
FakeFS do
|
147
|
+
FileUtils.mkdir_p '/fake/path'
|
148
|
+
FileUtils.touch '/fake/path/build.gradle'
|
149
|
+
|
150
|
+
expect(subject.active?).to be true
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
context "when there's no build.gradle" do
|
155
|
+
it 'returns false' do
|
156
|
+
expect(subject.active?).to be false
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context "when there's a settings.gradle" do
|
161
|
+
it 'uses the build.gradle referenced inside' do
|
162
|
+
SETTINGS_DOT_GRADLE = <<-eos
|
163
|
+
rootProject.buildFileName = 'build-alt.gradle'
|
164
|
+
eos
|
165
|
+
|
166
|
+
FakeFS do
|
167
|
+
FileUtils.mkdir_p '/fake/path'
|
168
|
+
File.open('/fake/path/settings.gradle', 'w') do |file|
|
169
|
+
file.write SETTINGS_DOT_GRADLE
|
170
|
+
end
|
171
|
+
FileUtils.touch '/fake/path/build-alt.gradle'
|
172
|
+
|
173
|
+
expect(subject.active?).to be true
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
126
179
|
end
|
127
180
|
end
|
@@ -2,11 +2,16 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module LicenseFinder
|
4
4
|
describe MavenPackage do
|
5
|
+
let(:options) { {} }
|
5
6
|
subject do
|
6
7
|
described_class.new(
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
{
|
9
|
+
"groupId" => "org.hamcrest",
|
10
|
+
"artifactId" => "hamcrest-core",
|
11
|
+
"version" => "4.11",
|
12
|
+
"licenses" => [{ "name" => "MIT" }],
|
13
|
+
},
|
14
|
+
options
|
10
15
|
)
|
11
16
|
end
|
12
17
|
|
@@ -33,6 +38,14 @@ module LicenseFinder
|
|
33
38
|
end
|
34
39
|
end
|
35
40
|
|
41
|
+
context 'when include_groups is set to true' do
|
42
|
+
let(:options) { {include_groups: true} }
|
43
|
+
|
44
|
+
it 'includes the group id in the name' do
|
45
|
+
expect(subject.name).to eq("org.hamcrest:hamcrest-core")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
36
49
|
context "when there are multiple licenses" do
|
37
50
|
subject do
|
38
51
|
described_class.new(
|
@@ -2,7 +2,9 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module LicenseFinder
|
4
4
|
describe Maven do
|
5
|
-
|
5
|
+
let(:options) { {} }
|
6
|
+
|
7
|
+
subject { Maven.new(options.merge(project_path: Pathname('/fake/path'))) }
|
6
8
|
|
7
9
|
it_behaves_like "a PackageManager"
|
8
10
|
|
@@ -20,21 +22,30 @@ module LicenseFinder
|
|
20
22
|
describe '.current_packages' do
|
21
23
|
before do
|
22
24
|
allow(Dir).to receive(:chdir).with(Pathname('/fake/path')) { |&block| block.call }
|
23
|
-
allow(subject).to receive(:capture).with('mvn license:download-licenses').and_return(['', true])
|
25
|
+
allow(subject).to receive(:capture).with('mvn org.codehaus.mojo:license-maven-plugin:download-licenses').and_return(['', true])
|
24
26
|
end
|
25
27
|
|
26
28
|
def stub_license_report(deps)
|
27
|
-
|
28
|
-
|
29
|
+
dependencies = double(:subject_dependency_file, dependencies: [license_xml(deps)])
|
30
|
+
expect(MavenDependencyFinder).to receive(:new).and_return(dependencies)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'uses the maven wrapper, if present' do
|
34
|
+
subject = Maven.new(project_path: Pathname('features/fixtures/maven-wrapper'))
|
35
|
+
expect(Dir).to receive(:chdir).with(Pathname('features/fixtures/maven-wrapper')).and_call_original
|
36
|
+
expect(subject.package_management_command).to eq('./mvnw').or eq('mvnw.cmd')
|
37
|
+
subject.current_packages
|
29
38
|
end
|
30
39
|
|
31
40
|
it 'lists all the current packages' do
|
32
41
|
stub_license_report("
|
33
42
|
<dependency>
|
43
|
+
<groupId>org.otherorg</groupId>
|
34
44
|
<artifactId>junit</artifactId>
|
35
45
|
<version>4.11</version>
|
36
46
|
</dependency>
|
37
47
|
<dependency>
|
48
|
+
<groupId>org.hamcrest</groupId>
|
38
49
|
<artifactId>hamcrest-core</artifactId>
|
39
50
|
<version>1.3</version>
|
40
51
|
</dependency>
|
@@ -46,6 +57,23 @@ module LicenseFinder
|
|
46
57
|
]
|
47
58
|
end
|
48
59
|
|
60
|
+
context 'when ignored_groups is used' do
|
61
|
+
subject {
|
62
|
+
Maven.new(options.merge(
|
63
|
+
project_path: Pathname('/fake/path'),
|
64
|
+
ignored_groups: Set.new(%w(system test provided import))
|
65
|
+
))
|
66
|
+
}
|
67
|
+
|
68
|
+
before do
|
69
|
+
expect(subject).to receive(:capture).with('mvn org.codehaus.mojo:license-maven-plugin:download-licenses -Dlicense.excludedScopes=system,test,provided,import').and_return(['', true])
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'uses skips the specified groups' do
|
73
|
+
subject.current_packages
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
49
77
|
it "handles multiple licenses" do
|
50
78
|
stub_license_report("
|
51
79
|
<dependency>
|
@@ -63,6 +91,30 @@ module LicenseFinder
|
|
63
91
|
expect(subject.current_packages.first.licenses.map(&:name)).to eq ['License 1', 'License 2']
|
64
92
|
end
|
65
93
|
|
94
|
+
context 'when maven group ids option is enabled' do
|
95
|
+
let(:options) { { maven_include_groups: true } }
|
96
|
+
|
97
|
+
it 'lists all the current packages' do
|
98
|
+
stub_license_report("
|
99
|
+
<dependency>
|
100
|
+
<groupId>junit</groupId>
|
101
|
+
<artifactId>junit</artifactId>
|
102
|
+
<version>4.11</version>
|
103
|
+
</dependency>
|
104
|
+
<dependency>
|
105
|
+
<groupId>org.hamcrest</groupId>
|
106
|
+
<artifactId>hamcrest-core</artifactId>
|
107
|
+
<version>1.3</version>
|
108
|
+
</dependency>
|
109
|
+
")
|
110
|
+
|
111
|
+
expect(subject.current_packages.map { |p| [p.name, p.version] }).to eq [
|
112
|
+
["junit:junit", "4.11"],
|
113
|
+
["org.hamcrest:hamcrest-core", "1.3"]
|
114
|
+
]
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
66
118
|
it "handles no licenses" do
|
67
119
|
stub_license_report("
|
68
120
|
<dependency>
|
@@ -29,27 +29,31 @@ module LicenseFinder
|
|
29
29
|
end
|
30
30
|
|
31
31
|
describe '#eql?' do
|
32
|
-
it 'returns
|
32
|
+
it 'returns false when the package names are the same, but the version is different' do
|
33
33
|
p1 = MergedPackage.new(Package.new('foo', '1.0.0'), ['/path/to/package1'])
|
34
34
|
p2 = MergedPackage.new(Package.new('foo', '2.0.0'), ['/path/to/package2'])
|
35
35
|
p3 = MergedPackage.new(Package.new('bar', '1.0.0'), ['/path/to/package3'])
|
36
|
-
expect(p1.eql?(p2)).to eq(
|
36
|
+
expect(p1.eql?(p2)).to eq(false)
|
37
37
|
expect(p1.eql?(p3)).not_to eq(true)
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'can handle merged packages that contain other merged packages' do
|
41
41
|
p1 = MergedPackage.new(Package.new('foo', '1.0.0'), ['/path/to/package1'])
|
42
42
|
p2 = MergedPackage.new(Package.new('foo', '2.0.0'), ['/path/to/package2'])
|
43
|
-
p3 = MergedPackage.new(
|
43
|
+
p3 = MergedPackage.new(p1, ['/path/to/package3', '/path/to/package1'])
|
44
|
+
p4 = MergedPackage.new(p2, ['/path/to/package4', '/path/to/package2'])
|
44
45
|
expect(p1.eql?(p3)).to eq(true)
|
46
|
+
expect(p1.eql?(p4)).not_to eq(true)
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
48
50
|
describe 'hash' do
|
49
51
|
it 'returns equal hash codes for packages that are equal' do
|
50
52
|
p1 = MergedPackage.new(Package.new('foo', '1.0.0'), ['/path/to/package1'])
|
51
|
-
p2 = MergedPackage.new(Package.new('foo', '
|
53
|
+
p2 = MergedPackage.new(Package.new('foo', '1.0.0'), ['/path/to/package2'])
|
54
|
+
p3 = MergedPackage.new(Package.new('foo', '2.0.0'), ['/path/to/package3'])
|
52
55
|
expect(p1.hash).to eq(p2.hash)
|
56
|
+
expect(p1.hash).not_to eq(p3.hash)
|
53
57
|
end
|
54
58
|
end
|
55
59
|
end
|
@@ -153,13 +153,16 @@ module LicenseFinder
|
|
153
153
|
describe '#eql?' do
|
154
154
|
it 'returns true if package name matches' do
|
155
155
|
p1 = Package.new('package', '0.0.1')
|
156
|
-
p2 = Package.new('package', '0.0.
|
156
|
+
p2 = Package.new('package', '0.0.1')
|
157
157
|
p3 = Package.new('foo', 'foo')
|
158
|
+
p4 = Package.new('foo', 'foo2')
|
158
159
|
|
159
160
|
expect(p1.eql?(p2)).to be true
|
160
161
|
expect(p1.eql?(p3)).to be false
|
162
|
+
expect(p3.eql?(p4)).to be false
|
161
163
|
|
162
164
|
expect(p1.hash).to eq p2.hash
|
165
|
+
expect(p3.hash).not_to eq p4.hash
|
163
166
|
end
|
164
167
|
end
|
165
168
|
|
@@ -35,6 +35,14 @@ module LicenseFinder
|
|
35
35
|
expect(subject.to_s).to eq("gem_a,1.0,Nuget\n")
|
36
36
|
end
|
37
37
|
|
38
|
+
it 'supports license_links column' do
|
39
|
+
dep = Package.new('gem_a', '1.0')
|
40
|
+
mit = License.find_by_name("MIT")
|
41
|
+
dep.decide_on_license(mit)
|
42
|
+
subject = described_class.new([dep], columns: %w[name licenses license_links])
|
43
|
+
expect(subject.to_s).to eq("gem_a,MIT,#{mit.url}\n")
|
44
|
+
end
|
45
|
+
|
38
46
|
it "does not include columns that should only be in merged reports" do
|
39
47
|
dep = Package.new('gem_a', '1.0')
|
40
48
|
subject = described_class.new([dep], columns: %w[subproject_paths])
|