| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  | require "options" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe Options do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |   subject(:options) { described_class.new } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   it "removes duplicate options" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     options << Option.new("foo") | 
					
						
							|  |  |  |     options << Option.new("foo") | 
					
						
							|  |  |  |     expect(options).to include("--foo") | 
					
						
							|  |  |  |     expect(options.count).to eq(1) | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   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") | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     options << a << b | 
					
						
							|  |  |  |     expect(options.count).to eq(1) | 
					
						
							|  |  |  |     expect(options.first).to be(a) | 
					
						
							|  |  |  |     expect(options.first.description).to eq(a.description) | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#include?" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     options << Option.new("foo") | 
					
						
							|  |  |  |     expect(options).to include("--foo") | 
					
						
							|  |  |  |     expect(options).to include("foo") | 
					
						
							|  |  |  |     expect(options).to include(Option.new("foo")) | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#+" do | 
					
						
							|  |  |  |     it "returns options" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       expect(options + 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 | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       expect(options - 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) } | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     other_options = described_class.new << foo << bar | 
					
						
							|  |  |  |     options << foo << baz | 
					
						
							|  |  |  |     expect((options & other_options).to_a).to eq([foo]) | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#|" do | 
					
						
							|  |  |  |     foo, bar, baz = %w[foo bar baz].map { |o| Option.new(o) } | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     other_options = described_class.new << foo << bar | 
					
						
							|  |  |  |     options << foo << baz | 
					
						
							|  |  |  |     expect((options | other_options).sort).to eq([foo, bar, baz].sort) | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#*" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     options << Option.new("aa") << Option.new("bb") << Option.new("cc") | 
					
						
							|  |  |  |     expect((options * "XX").split("XX").sort).to eq(%w[--aa --bb --cc]) | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "<<" do | 
					
						
							|  |  |  |     it "returns itself" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |       expect(options << Option.new("foo")).to be options | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#as_flags" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     options << Option.new("foo") | 
					
						
							|  |  |  |     expect(options.as_flags).to eq(%w[--foo]) | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#to_a" do | 
					
						
							|  |  |  |     option = Option.new("foo") | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     options << option | 
					
						
							|  |  |  |     expect(options.to_a).to eq([option]) | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#to_ary" do | 
					
						
							|  |  |  |     option = Option.new("foo") | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     options << option | 
					
						
							|  |  |  |     expect(options.to_ary).to eq([option]) | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-19 12:16:03 -05:00
										 |  |  |   specify "#to_s" do | 
					
						
							|  |  |  |     expect(options.to_s).to eq("") | 
					
						
							|  |  |  |     options << Option.new("first") | 
					
						
							|  |  |  |     expect(options.to_s).to eq("--first") | 
					
						
							|  |  |  |     options << Option.new("second") | 
					
						
							|  |  |  |     expect(options.to_s).to eq("--first --second") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   specify "#inspect" do | 
					
						
							| 
									
										
										
										
											2021-01-31 13:14:23 -05:00
										 |  |  |     expect(options.inspect).to eq("#<Options: []>") | 
					
						
							|  |  |  |     options << Option.new("foo") | 
					
						
							|  |  |  |     expect(options.inspect).to eq("#<Options: [#<Option: \"--foo\">]>") | 
					
						
							| 
									
										
										
										
											2017-02-25 19:34:46 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | end |