1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
  | 
require 'testing_env'
require 'options'
class OptionTests < Homebrew::TestCase
  def setup
    @option = Option.new("foo")
  end
  def test_to_s
    assert_equal "--foo", @option.to_s
  end
  def test_equality
    foo = Option.new("foo")
    bar = Option.new("bar")
    assert_equal foo, @option
    refute_equal bar, @option
    assert_eql @option, foo
    refute_eql @option, bar
  end
  def test_description
    assert_empty @option.description
    assert_equal "foo", Option.new("foo", "foo").description
  end
end
class OptionsTests < Homebrew::TestCase
  def setup
    @options = Options.new
  end
  def test_no_duplicate_options
    @options << Option.new("foo")
    @options << Option.new("foo")
    assert_includes @options, "--foo"
    assert_equal 1, @options.count
  end
  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
  def test_include
    @options << Option.new("foo")
    assert_includes @options, "--foo"
    assert_includes @options, "foo"
    assert_includes @options, 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_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_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).sort
  end
  def test_create_with_array
    array = %w{--foo --bar}
    option1 = Option.new("foo")
    option2 = Option.new("bar")
    assert_equal [option1, option2].sort, Options.create(array).sort
  end
end
  |