aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test/dependency_test.rb
blob: 404f26d79c013e4a38012ef4ff157ad751640c77 (plain)
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
require "testing_env"
require "dependency"

class DependableTests < Homebrew::TestCase
  def setup
    super
    @tags = ["foo", "bar", :build]
    @dep = Struct.new(:tags).new(@tags).extend(Dependable)
  end

  def test_options
    assert_equal %w[--foo --bar].sort, @dep.options.as_flags.sort
  end

  def test_interrogation
    assert_predicate @dep, :build?
    refute_predicate @dep, :optional?
    refute_predicate @dep, :recommended?
  end
end

class DependencyTests < Homebrew::TestCase
  def test_accepts_single_tag
    dep = Dependency.new("foo", %w[bar])
    assert_equal %w[bar], dep.tags
  end

  def test_accepts_multiple_tags
    dep = Dependency.new("foo", %w[bar baz])
    assert_equal %w[bar baz].sort, dep.tags.sort
  end

  def test_preserves_symbol_tags
    dep = Dependency.new("foo", [:build])
    assert_equal [:build], dep.tags
  end

  def test_accepts_symbol_and_string_tags
    dep = Dependency.new("foo", [:build, "bar"])
    assert_equal [:build, "bar"], dep.tags
  end

  def test_merge_repeats
    dep = Dependency.new("foo", [:build], nil, "foo")
    dep2 = Dependency.new("foo", ["bar"], nil, "foo2")
    dep3 = Dependency.new("xyz", ["abc"], nil, "foo")
    merged = Dependency.merge_repeats([dep, dep2, dep3])
    assert_equal 2, merged.length
    assert_equal Dependency, merged.first.class

    foo_named_dep = merged.find { |d| d.name == "foo" }
    assert_equal ["bar"], foo_named_dep.tags
    assert_includes foo_named_dep.option_names, "foo"
    assert_includes foo_named_dep.option_names, "foo2"

    xyz_named_dep = merged.find { |d| d.name == "xyz" }
    assert_equal ["abc"], xyz_named_dep.tags
    assert_includes xyz_named_dep.option_names, "foo"
    refute_includes xyz_named_dep.option_names, "foo2"
  end

  def test_merges_necessity_tags
    required_dep = Dependency.new("foo")
    recommended_dep = Dependency.new("foo", [:recommended])
    optional_dep = Dependency.new("foo", [:optional])

    deps = Dependency.merge_repeats([required_dep, recommended_dep])
    assert_equal deps.count, 1
    assert_predicate deps.first, :required?
    refute_predicate deps.first, :recommended?
    refute_predicate deps.first, :optional?

    deps = Dependency.merge_repeats([required_dep, optional_dep])
    assert_equal deps.count, 1
    assert_predicate deps.first, :required?
    refute_predicate deps.first, :recommended?
    refute_predicate deps.first, :optional?

    deps = Dependency.merge_repeats([recommended_dep, optional_dep])
    assert_equal deps.count, 1
    refute_predicate deps.first, :required?
    assert_predicate deps.first, :recommended?
    refute_predicate deps.first, :optional?
  end

  def test_merges_temporality_tags
    normal_dep = Dependency.new("foo")
    build_dep = Dependency.new("foo", [:build])
    run_dep = Dependency.new("foo", [:run])

    deps = Dependency.merge_repeats([normal_dep, build_dep])
    assert_equal deps.count, 1
    refute_predicate deps.first, :build?
    refute_predicate deps.first, :run?

    deps = Dependency.merge_repeats([normal_dep, run_dep])
    assert_equal deps.count, 1
    refute_predicate deps.first, :build?
    refute_predicate deps.first, :run?

    deps = Dependency.merge_repeats([build_dep, run_dep])
    assert_equal deps.count, 1
    refute_predicate deps.first, :build?
    refute_predicate deps.first, :run?
  end

  def test_equality
    foo1 = Dependency.new("foo")
    foo2 = Dependency.new("foo")
    bar = Dependency.new("bar")
    assert_equal foo1, foo2
    assert_eql foo1, foo2
    refute_equal foo1, bar
    refute_eql foo1, bar
    foo3 = Dependency.new("foo", [:build])
    refute_equal foo1, foo3
    refute_eql foo1, foo3
  end
end

class TapDependencyTests < Homebrew::TestCase
  def test_tap
    dep = TapDependency.new("foo/bar/dog")
    assert_equal Tap.new("foo", "bar"), dep.tap
  end

  def test_option_names
    dep = TapDependency.new("foo/bar/dog")
    assert_equal %w[dog], dep.option_names
  end
end