| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  | require 'testing_env' | 
					
						
							|  |  |  | require 'options' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 20:32:51 -05:00
										 |  |  | class OptionTests < Homebrew::TestCase | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   def setup | 
					
						
							|  |  |  |     @option = Option.new("foo") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_to_s | 
					
						
							|  |  |  |     assert_equal "--foo", @option.to_s | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_to_str | 
					
						
							|  |  |  |     assert_equal "--foo", @option.to_str | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_equality | 
					
						
							|  |  |  |     foo = Option.new("foo") | 
					
						
							|  |  |  |     bar = Option.new("bar") | 
					
						
							|  |  |  |     assert_equal foo, @option | 
					
						
							| 
									
										
										
										
											2014-06-10 22:43:47 -05:00
										 |  |  |     refute_equal bar, @option | 
					
						
							| 
									
										
										
										
											2014-07-03 16:54:46 -05:00
										 |  |  |     assert_eql @option, foo | 
					
						
							|  |  |  |     refute_eql @option, bar | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_strips_leading_dashes | 
					
						
							|  |  |  |     option = Option.new("--foo") | 
					
						
							|  |  |  |     assert_equal "foo", option.name | 
					
						
							|  |  |  |     assert_equal "--foo", option.flag | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_description | 
					
						
							|  |  |  |     assert_empty @option.description | 
					
						
							|  |  |  |     assert_equal "foo", Option.new("foo", "foo").description | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:28 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_preserves_short_options | 
					
						
							|  |  |  |     option = Option.new("-d") | 
					
						
							|  |  |  |     assert_equal "-d", option.flag | 
					
						
							|  |  |  |     assert_equal "d", option.name | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 20:32:51 -05:00
										 |  |  | class OptionsTests < Homebrew::TestCase | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   def setup | 
					
						
							|  |  |  |     @options = Options.new | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_no_duplicate_options | 
					
						
							|  |  |  |     @options << Option.new("foo") | 
					
						
							|  |  |  |     @options << Option.new("foo") | 
					
						
							| 
									
										
										
										
											2014-06-11 13:03:06 -05:00
										 |  |  |     assert_includes @options, "--foo" | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |     assert_equal 1, @options.count | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-22 11:34:23 -05:00
										 |  |  |   def test_preserves_existing_member_when_pushing_duplicate | 
					
						
							|  |  |  |     a = Option.new("foo", "bar") | 
					
						
							|  |  |  |     b = Option.new("foo", "qux") | 
					
						
							|  |  |  |     @options << a << b | 
					
						
							|  |  |  |     assert_equal 1, @options.count | 
					
						
							|  |  |  |     assert_same a, @options.first | 
					
						
							|  |  |  |     assert_equal a.description, @options.first.description | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   def test_include | 
					
						
							|  |  |  |     @options << Option.new("foo") | 
					
						
							| 
									
										
										
										
											2014-06-11 13:03:06 -05:00
										 |  |  |     assert_includes @options, "--foo" | 
					
						
							|  |  |  |     assert_includes @options, "foo" | 
					
						
							|  |  |  |     assert_includes @options, Option.new("foo") | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_union_returns_options | 
					
						
							|  |  |  |     assert_instance_of Options, (@options + Options.new) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_difference_returns_options | 
					
						
							|  |  |  |     assert_instance_of Options, (@options - Options.new) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_shovel_returns_self | 
					
						
							|  |  |  |     assert_same @options, (@options << Option.new("foo")) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_as_flags | 
					
						
							|  |  |  |     @options << Option.new("foo") | 
					
						
							|  |  |  |     assert_equal %w{--foo}, @options.as_flags | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_to_a | 
					
						
							|  |  |  |     option = Option.new("foo") | 
					
						
							|  |  |  |     @options << option | 
					
						
							|  |  |  |     assert_equal [option], @options.to_a | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_to_ary | 
					
						
							|  |  |  |     option = Option.new("foo") | 
					
						
							|  |  |  |     @options << option | 
					
						
							|  |  |  |     assert_equal [option], @options.to_ary | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:28 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_concat_array | 
					
						
							|  |  |  |     option = Option.new("foo") | 
					
						
							|  |  |  |     @options.concat([option]) | 
					
						
							| 
									
										
										
										
											2014-06-11 13:03:06 -05:00
										 |  |  |     assert_includes @options, option | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:28 -06:00
										 |  |  |     assert_equal [option], @options.to_a | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_concat_options | 
					
						
							|  |  |  |     option = Option.new("foo") | 
					
						
							|  |  |  |     opts = Options.new | 
					
						
							|  |  |  |     opts << option | 
					
						
							|  |  |  |     @options.concat(opts) | 
					
						
							| 
									
										
										
										
											2014-06-11 13:03:06 -05:00
										 |  |  |     assert_includes @options, option | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:28 -06:00
										 |  |  |     assert_equal [option], @options.to_a | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_concat_returns_self | 
					
						
							|  |  |  |     assert_same @options, (@options.concat([])) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_intersection | 
					
						
							|  |  |  |     foo, bar, baz = %w{foo bar baz}.map { |o| Option.new(o) } | 
					
						
							|  |  |  |     options = Options.new << foo << bar | 
					
						
							|  |  |  |     @options << foo << baz | 
					
						
							|  |  |  |     assert_equal [foo], (@options & options).to_a | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-27 14:22:42 -06:00
										 |  |  |   def test_set_union | 
					
						
							|  |  |  |     foo, bar, baz = %w{foo bar baz}.map { |o| Option.new(o) } | 
					
						
							|  |  |  |     options = Options.new << foo << bar | 
					
						
							|  |  |  |     @options << foo << baz | 
					
						
							|  |  |  |     assert_equal [foo, bar, baz].sort, (@options | options).to_a.sort | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:28 -06:00
										 |  |  |   def test_coerce_with_options | 
					
						
							|  |  |  |     assert_same @options, Options.coerce(@options) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_coerce_with_option | 
					
						
							|  |  |  |     option = Option.new("foo") | 
					
						
							|  |  |  |     assert_equal option, Options.coerce(option).to_a.first | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_coerce_with_array | 
					
						
							|  |  |  |     array = %w{--foo --bar} | 
					
						
							|  |  |  |     option1 = Option.new("foo") | 
					
						
							|  |  |  |     option2 = Option.new("bar") | 
					
						
							|  |  |  |     assert_equal [option1, option2].sort, Options.coerce(array).to_a.sort | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_coerce_raises_for_inappropriate_types | 
					
						
							|  |  |  |     assert_raises(TypeError) { Options.coerce(1) } | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-30 11:04:54 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_coerce_splits_multiple_switches_with_single_dash | 
					
						
							|  |  |  |     array = %w{-vd} | 
					
						
							|  |  |  |     verbose = Option.new("-v") | 
					
						
							|  |  |  |     debug = Option.new("-d") | 
					
						
							|  |  |  |     assert_equal [verbose, debug].sort, Options.coerce(array).to_a.sort | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-08-22 11:46:47 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def test_copies_do_not_share_underlying_collection | 
					
						
							|  |  |  |     copy = @options.dup << Option.new("foo") | 
					
						
							|  |  |  |     assert_empty @options | 
					
						
							|  |  |  |     assert_equal 1, copy.count | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-01-23 00:26:23 -06:00
										 |  |  | end |