diff options
| author | mo khan <mo.khan@gmail.com> | 2020-05-07 17:25:56 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-05-07 17:25:56 -0600 |
| commit | cc9eda11425e6f6ec3243fbcd768c4e2a37adf2a (patch) | |
| tree | 52745bf01649b5f7b3be20ce6f68f173c65ca921 /spec | |
| parent | 99dc28a123b59d5052db3e20ec428c023091ee13 (diff) | |
Build a composite license that traverses and expression tree
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/unit/core/guess_spec.rb | 22 | ||||
| -rw-r--r-- | spec/unit/spdx/composite_license_spec.rb | 47 |
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 |
