| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  | require "options" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe Option do | 
					
						
							|  |  |  |   subject { described_class.new("foo") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#to_s" do | 
					
						
							|  |  |  |     expect(subject.to_s).to eq("--foo") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "equality" do | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  |     foo = described_class.new("foo") | 
					
						
							|  |  |  |     bar = described_class.new("bar") | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |     expect(subject).to eq(foo) | 
					
						
							|  |  |  |     expect(subject).not_to eq(bar) | 
					
						
							|  |  |  |     expect(subject).to eql(foo) | 
					
						
							|  |  |  |     expect(subject).not_to eql(bar) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#description" do | 
					
						
							|  |  |  |     expect(subject.description).to be_empty | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  |     expect(described_class.new("foo", "foo").description).to eq("foo") | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#inspect" do | 
					
						
							|  |  |  |     expect(subject.inspect).to eq("#<Option: \"--foo\">") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe DeprecatedOption do | 
					
						
							|  |  |  |   subject { described_class.new("foo", "bar") } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#old" do | 
					
						
							|  |  |  |     expect(subject.old).to eq("foo") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#old_flag" do | 
					
						
							|  |  |  |     expect(subject.old_flag).to eq("--foo") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#current" do | 
					
						
							|  |  |  |     expect(subject.current).to eq("bar") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#current_flag" do | 
					
						
							|  |  |  |     expect(subject.current_flag).to eq("--bar") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "equality" do | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  |     foobar = described_class.new("foo", "bar") | 
					
						
							|  |  |  |     boofar = described_class.new("boo", "far") | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |     expect(foobar).to eq(subject) | 
					
						
							|  |  |  |     expect(subject).to eq(foobar) | 
					
						
							|  |  |  |     expect(boofar).not_to eq(subject) | 
					
						
							|  |  |  |     expect(subject).not_to eq(boofar) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe Options do | 
					
						
							|  |  |  |   it "removes duplicate options" do | 
					
						
							|  |  |  |     subject << Option.new("foo") | 
					
						
							|  |  |  |     subject << Option.new("foo") | 
					
						
							|  |  |  |     expect(subject).to include("--foo") | 
					
						
							|  |  |  |     expect(subject.count).to eq(1) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-01 16:02:13 -04:00
										 |  |  |   it "preserves existing member when adding a duplicate" do | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |     a = Option.new("foo", "bar") | 
					
						
							|  |  |  |     b = Option.new("foo", "qux") | 
					
						
							|  |  |  |     subject << a << b | 
					
						
							|  |  |  |     expect(subject.count).to eq(1) | 
					
						
							|  |  |  |     expect(subject.first).to be(a) | 
					
						
							|  |  |  |     expect(subject.first.description).to eq(a.description) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#include?" do | 
					
						
							|  |  |  |     subject << Option.new("foo") | 
					
						
							|  |  |  |     expect(subject).to include("--foo") | 
					
						
							|  |  |  |     expect(subject).to include("foo") | 
					
						
							|  |  |  |     expect(subject).to include(Option.new("foo")) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#+" do | 
					
						
							|  |  |  |     it "returns options" do | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  |       expect(subject + described_class.new).to be_an_instance_of(described_class) | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#-" do | 
					
						
							|  |  |  |     it "returns options" do | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  |       expect(subject - described_class.new).to be_an_instance_of(described_class) | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#&" do | 
					
						
							|  |  |  |     foo, bar, baz = %w[foo bar baz].map { |o| Option.new(o) } | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  |     options = described_class.new << foo << bar | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |     subject << foo << baz | 
					
						
							|  |  |  |     expect((subject & options).to_a).to eq([foo]) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#|" do | 
					
						
							|  |  |  |     foo, bar, baz = %w[foo bar baz].map { |o| Option.new(o) } | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  |     options = described_class.new << foo << bar | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |     subject << foo << baz | 
					
						
							|  |  |  |     expect((subject | options).sort).to eq([foo, bar, baz].sort) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#*" do | 
					
						
							|  |  |  |     subject << Option.new("aa") << Option.new("bb") << Option.new("cc") | 
					
						
							|  |  |  |     expect((subject * "XX").split("XX").sort).to eq(%w[--aa --bb --cc]) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "<<" do | 
					
						
							|  |  |  |     it "returns itself" do | 
					
						
							|  |  |  |       expect(subject << Option.new("foo")).to be subject | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#as_flags" do | 
					
						
							|  |  |  |     subject << Option.new("foo") | 
					
						
							|  |  |  |     expect(subject.as_flags).to eq(%w[--foo]) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#to_a" do | 
					
						
							|  |  |  |     option = Option.new("foo") | 
					
						
							|  |  |  |     subject << option | 
					
						
							|  |  |  |     expect(subject.to_a).to eq([option]) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#to_ary" do | 
					
						
							|  |  |  |     option = Option.new("foo") | 
					
						
							|  |  |  |     subject << option | 
					
						
							|  |  |  |     expect(subject.to_ary).to eq([option]) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "::create_with_array" do | 
					
						
							|  |  |  |     array = %w[--foo --bar] | 
					
						
							|  |  |  |     option1 = Option.new("foo") | 
					
						
							|  |  |  |     option2 = Option.new("bar") | 
					
						
							| 
									
										
										
										
											2018-03-25 13:30:37 +01:00
										 |  |  |     expect(described_class.create(array).sort).to eq([option1, option2].sort) | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#inspect" do | 
					
						
							|  |  |  |     expect(subject.inspect).to eq("#<Options: []>") | 
					
						
							|  |  |  |     subject << Option.new("foo") | 
					
						
							|  |  |  |     expect(subject.inspect).to eq("#<Options: [#<Option: \"--foo\">]>") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |