| 
									
										
										
										
											2020-10-10 14:16:11 +02:00
										 |  |  | # typed: false | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-27 11:55:14 +01:00
										 |  |  | require "dependency" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe Dependency do | 
					
						
							| 
									
										
										
										
											2017-05-09 23:00:51 +02:00
										 |  |  |   alias_matcher :be_a_build_dependency, :be_build | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-27 11:55:14 +01:00
										 |  |  |   describe "::new" do | 
					
						
							|  |  |  |     it "accepts a single tag" do | 
					
						
							|  |  |  |       dep = described_class.new("foo", %w[bar]) | 
					
						
							|  |  |  |       expect(dep.tags).to eq(%w[bar]) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "accepts multiple tags" do | 
					
						
							|  |  |  |       dep = described_class.new("foo", %w[bar baz]) | 
					
						
							|  |  |  |       expect(dep.tags.sort).to eq(%w[bar baz].sort) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "preserves symbol tags" do | 
					
						
							|  |  |  |       dep = described_class.new("foo", [:build]) | 
					
						
							|  |  |  |       expect(dep.tags).to eq([:build]) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "accepts symbol and string tags" do | 
					
						
							|  |  |  |       dep = described_class.new("foo", [:build, "bar"]) | 
					
						
							|  |  |  |       expect(dep.tags).to eq([:build, "bar"]) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2018-06-01 21:36:28 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it "rejects nil names" do | 
					
						
							|  |  |  |       expect { described_class.new(nil) }.to raise_error(ArgumentError) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-02-27 11:55:14 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "::merge_repeats" do | 
					
						
							|  |  |  |     it "merges duplicate dependencies" do | 
					
						
							|  |  |  |       dep = described_class.new("foo", [:build], nil, "foo") | 
					
						
							|  |  |  |       dep2 = described_class.new("foo", ["bar"], nil, "foo2") | 
					
						
							|  |  |  |       dep3 = described_class.new("xyz", ["abc"], nil, "foo") | 
					
						
							|  |  |  |       merged = described_class.merge_repeats([dep, dep2, dep3]) | 
					
						
							|  |  |  |       expect(merged.count).to eq(2) | 
					
						
							|  |  |  |       expect(merged.first).to be_a described_class | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       foo_named_dep = merged.find { |d| d.name == "foo" } | 
					
						
							|  |  |  |       expect(foo_named_dep.tags).to eq(["bar"]) | 
					
						
							|  |  |  |       expect(foo_named_dep.option_names).to include("foo") | 
					
						
							|  |  |  |       expect(foo_named_dep.option_names).to include("foo2") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       xyz_named_dep = merged.find { |d| d.name == "xyz" } | 
					
						
							|  |  |  |       expect(xyz_named_dep.tags).to eq(["abc"]) | 
					
						
							|  |  |  |       expect(xyz_named_dep.option_names).to include("foo") | 
					
						
							|  |  |  |       expect(xyz_named_dep.option_names).not_to include("foo2") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "merges necessity tags" do | 
					
						
							|  |  |  |       required_dep = described_class.new("foo") | 
					
						
							|  |  |  |       recommended_dep = described_class.new("foo", [:recommended]) | 
					
						
							|  |  |  |       optional_dep = described_class.new("foo", [:optional]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       deps = described_class.merge_repeats([required_dep, recommended_dep]) | 
					
						
							|  |  |  |       expect(deps.count).to eq(1) | 
					
						
							|  |  |  |       expect(deps.first).to be_required | 
					
						
							|  |  |  |       expect(deps.first).not_to be_recommended | 
					
						
							|  |  |  |       expect(deps.first).not_to be_optional | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       deps = described_class.merge_repeats([required_dep, optional_dep]) | 
					
						
							|  |  |  |       expect(deps.count).to eq(1) | 
					
						
							|  |  |  |       expect(deps.first).to be_required | 
					
						
							|  |  |  |       expect(deps.first).not_to be_recommended | 
					
						
							|  |  |  |       expect(deps.first).not_to be_optional | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       deps = described_class.merge_repeats([recommended_dep, optional_dep]) | 
					
						
							|  |  |  |       expect(deps.count).to eq(1) | 
					
						
							|  |  |  |       expect(deps.first).not_to be_required | 
					
						
							|  |  |  |       expect(deps.first).to be_recommended | 
					
						
							|  |  |  |       expect(deps.first).not_to be_optional | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "merges temporality tags" do | 
					
						
							|  |  |  |       normal_dep = described_class.new("foo") | 
					
						
							|  |  |  |       build_dep = described_class.new("foo", [:build]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       deps = described_class.merge_repeats([normal_dep, build_dep]) | 
					
						
							|  |  |  |       expect(deps.count).to eq(1) | 
					
						
							|  |  |  |       expect(deps.first).not_to be_a_build_dependency | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "equality" do | 
					
						
							|  |  |  |     foo1 = described_class.new("foo") | 
					
						
							|  |  |  |     foo2 = described_class.new("foo") | 
					
						
							|  |  |  |     expect(foo1).to eq(foo2) | 
					
						
							|  |  |  |     expect(foo1).to eql(foo2) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     bar = described_class.new("bar") | 
					
						
							|  |  |  |     expect(foo1).not_to eq(bar) | 
					
						
							|  |  |  |     expect(foo1).not_to eql(bar) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     foo3 = described_class.new("foo", [:build]) | 
					
						
							|  |  |  |     expect(foo1).not_to eq(foo3) | 
					
						
							|  |  |  |     expect(foo1).not_to eql(foo3) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 14:50:29 -05:00
										 |  |  |   describe TapDependency do | 
					
						
							|  |  |  |     subject(:dependency) { described_class.new("foo/bar/dog") } | 
					
						
							| 
									
										
										
										
											2017-02-27 11:55:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 14:50:29 -05:00
										 |  |  |     specify "#tap" do | 
					
						
							|  |  |  |       expect(dependency.tap).to eq(Tap.new("foo", "bar")) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-02-27 11:55:14 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-01-31 14:50:29 -05:00
										 |  |  |     specify "#option_names" do | 
					
						
							|  |  |  |       expect(dependency.option_names).to eq(%w[dog]) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-02-27 11:55:14 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | end |