summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-05-07 17:25:56 -0600
committermo khan <mo.khan@gmail.com>2020-05-07 17:25:56 -0600
commitcc9eda11425e6f6ec3243fbcd768c4e2a37adf2a (patch)
tree52745bf01649b5f7b3be20ce6f68f173c65ca921 /spec
parent99dc28a123b59d5052db3e20ec428c023091ee13 (diff)
Build a composite license that traverses and expression tree
Diffstat (limited to 'spec')
-rw-r--r--spec/unit/core/guess_spec.rb22
-rw-r--r--spec/unit/spdx/composite_license_spec.rb47
2 files changed, 58 insertions, 11 deletions
diff --git a/spec/unit/core/guess_spec.rb b/spec/unit/core/guess_spec.rb
index f19aa18..63f0bf2 100644
--- a/spec/unit/core/guess_spec.rb
+++ b/spec/unit/core/guess_spec.rb
@@ -44,20 +44,20 @@ RSpec.describe Spandx::Core::Guess do
specify { expect(subject.license_for(content)&.id).to eql('MIT') }
end
- specify { expect(subject.license_for('(0BSD OR MIT)')&.id).to eql('0BSD') }
- specify { expect(subject.license_for('(BSD-2-Clause OR MIT OR Apache-2.0)')&.id).to eql('BSD-2-Clause') }
- specify { expect(subject.license_for('(BSD-3-Clause OR GPL-2.0)')&.id).to eql('BSD-3-Clause') }
- specify { expect(subject.license_for('(MIT AND CC-BY-3.0)')&.id).to eql('MIT') }
- specify { expect(subject.license_for('(MIT AND Zlib)')&.id).to eql('MIT') }
- specify { expect(subject.license_for('(MIT OR Apache-2.0)')&.id).to eql('MIT') }
- specify { expect(subject.license_for('(MIT OR CC0-1.0)')&.id).to eql('MIT') }
- specify { expect(subject.license_for('(MIT OR GPL-3.0)')&.id).to eql('MIT') }
- specify { expect(subject.license_for('(WTFPL OR MIT)')&.id).to eql('WTFPL') }
+ specify { expect(subject.license_for('(0BSD OR MIT)')&.id).to eql('(0BSD OR MIT)') }
+ specify { expect(subject.license_for('(BSD-2-Clause OR MIT OR Apache-2.0)')&.id).to eql('(BSD-2-Clause OR MIT OR Apache-2.0)') }
+ specify { expect(subject.license_for('(BSD-3-Clause OR GPL-2.0)')&.id).to eql('(BSD-3-Clause OR GPL-2.0)') }
+ specify { expect(subject.license_for('(MIT AND CC-BY-3.0)')&.id).to eql('(MIT AND CC-BY-3.0)') }
+ specify { expect(subject.license_for('(MIT AND Zlib)')&.id).to eql('(MIT AND Zlib)') }
+ specify { expect(subject.license_for('(MIT OR Apache-2.0)')&.id).to eql('(MIT OR Apache-2.0)') }
+ specify { expect(subject.license_for('(MIT OR CC0-1.0)')&.id).to eql('(MIT OR CC0-1.0)') }
+ specify { expect(subject.license_for('(MIT OR GPL-3.0)')&.id).to eql('(MIT OR GPL-3.0)') }
+ specify { expect(subject.license_for('(WTFPL OR MIT)')&.id).to eql('(WTFPL OR MIT)') }
specify { expect(subject.license_for('Apache 2.0')&.id).to eql('Apache-2.0') }
- specify { expect(subject.license_for('BSD-3-Clause OR MIT')&.id).to eql('BSD-3-Clause') }
+ specify { expect(subject.license_for('BSD-3-Clause OR MIT')&.id).to eql('(BSD-3-Clause OR MIT)') }
specify { expect(subject.license_for('BSD-like')&.id).to eql('Nonstandard') }
specify { expect(subject.license_for('Common Public License Version 1.0')&.id).to eql('CPL-1.0') }
- specify { expect(subject.license_for('MIT or GPLv3')&.id).to eql('MIT') }
+ specify { expect(subject.license_for('MIT or GPLv3')&.id).to eql('(MIT OR Nonstandard)') }
pending { expect(subject.license_for('MIT/X11')&.id).to eql('X11') }
end
end
diff --git a/spec/unit/spdx/composite_license_spec.rb b/spec/unit/spdx/composite_license_spec.rb
new file mode 100644
index 0000000..84dca0c
--- /dev/null
+++ b/spec/unit/spdx/composite_license_spec.rb
@@ -0,0 +1,47 @@
+RSpec.describe Spandx::Spdx::CompositeLicense do
+ context ".from_expression" do
+ subject { described_class.from_expression(expression, catalogue) }
+ let(:catalogue) { ::Spandx::Spdx::Catalogue.from_file(fixture_file('spdx/json/licenses.json')) }
+
+ before do
+ puts subject.instance_variable_get(:@tree).inspect
+ end
+
+ context 'when parsing a simple binary expression' do
+ let(:expression) { '(0BSD OR MIT)' }
+
+ specify { expect(subject.id).to eql(expression) }
+ specify { expect(subject.name).to eql("#{catalogue['0BSD'].name} OR #{catalogue['MIT'].name}") }
+ specify { expect(subject).to be_kind_of(::Spandx::Spdx::License) }
+ end
+
+ context 'when parsing an expression with a valid and an invalid license id' do
+ let(:expression) { 'MIT or GPLv3' }
+
+ specify { expect(subject.id).to eql("(MIT OR Nonstandard)") }
+ specify { expect(subject.name).to eql("#{catalogue['MIT'].name} OR GPLv3") }
+ specify { expect(subject).to be_kind_of(::Spandx::Spdx::License) }
+ end
+
+ context 'when parsing a license name' do
+ let(:expression) { 'Common Public License Version 1.0' }
+
+ specify { expect(subject).to be_nil }
+ end
+
+ context 'when parsing an invalid expression' do
+ let(:expression) { 'BSD-like' }
+
+ specify { expect(subject.id).to eql('Nonstandard') }
+ specify { expect(subject.name).to eql('BSD-like') }
+ end
+
+ context 'when parsing a binary expression with an id that is similar to another' do
+ let(:expression) { '(MIT OR CC0-1.0)' }
+
+ specify { expect(subject.id).to eql(expression) }
+ specify { expect(subject.name).to eql("#{catalogue['MIT'].name} OR #{catalogue['CC0-1.0'].name}") }
+ specify { expect(subject).to be_kind_of(::Spandx::Spdx::License) }
+ end
+ end
+end