brew/Library/Homebrew/test/test_options.rb
Jack Nagel cf08b71bf8 FormulaInstaller: construct new ARGV from an Options collection
The array of options that is passed to the spawned build process is a
combination of the current ARGV, options passed in by a dependent
formula, and an existing install receipt. The objects that are
interacting here each expect the resulting collection to have certain
properties, and the expectations are not consistent.

Clear up this confusing mess by only dealing with Options collections.
This keeps our representation of options uniform across the codebase.

We can remove BuildOptions dependency on HomebrewArgvExtension, which
allows us to pass any Array-like collection to Tab.create. The only
other site inside of FormulaInstaller that uses the array is the #exec
call, and there it is splatted and thus we can substitute our Options
collection there as well.
2013-01-26 12:14:47 -06:00

144 lines
3.2 KiB
Ruby

require 'testing_env'
require 'options'
class OptionTests < Test::Unit::TestCase
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_to_json
assert_equal %q{"--foo"}, @option.to_json
end
def test_equality
foo = Option.new("foo")
bar = Option.new("bar")
assert_equal foo, @option
assert_not_equal bar, @option
assert @option.eql?(foo)
assert !@option.eql?(bar)
assert bar < foo
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
def test_preserves_short_options
option = Option.new("-d")
assert_equal "-d", option.flag
assert_equal "d", option.name
end
end
class OptionsTests < Test::Unit::TestCase
def setup
@options = Options.new
end
def test_no_duplicate_options
@options << Option.new("foo")
@options << Option.new("foo")
assert @options.include? "--foo"
assert_equal 1, @options.count
end
def test_include
@options << Option.new("foo")
assert @options.include? "--foo"
assert @options.include? "foo"
assert @options.include? Option.new("foo")
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
def test_concat_array
option = Option.new("foo")
@options.concat([option])
assert @options.include?(option)
assert_equal [option], @options.to_a
end
def test_concat_options
option = Option.new("foo")
opts = Options.new
opts << option
@options.concat(opts)
assert @options.include?(option)
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
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
end