aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test/test_requirement.rb
blob: 8a2f5f472f1bc857b6bc7653db7222776e692919 (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
132
133
134
require 'testing_env'
require 'requirement'

class RequirementTests < Test::Unit::TestCase
  def test_accepts_single_tag
    dep = Requirement.new(%w{bar})
    assert_equal %w{bar}, dep.tags
  end

  def test_accepts_multiple_tags
    dep = Requirement.new(%w{bar baz})
    assert_equal %w{bar baz}.sort, dep.tags.sort
  end

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

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

  def test_dsl_fatal
    req = Class.new(Requirement) { fatal true }.new
    assert req.fatal?
  end

  def test_satisfy_true
    req = Class.new(Requirement) do
      satisfy(:build_env => false) { true }
    end.new
    assert req.satisfied?
  end

  def test_satisfy_false
    req = Class.new(Requirement) do
      satisfy(:build_env => false) { false }
    end.new
    assert !req.satisfied?
  end

  def test_satisfy_with_boolean
    req = Class.new(Requirement) do
      satisfy true
    end.new
    assert req.satisfied?
  end

  def test_satisfy_sets_up_build_env_by_default
    req = Class.new(Requirement) do
      satisfy { true }
    end.new

    ENV.expects(:with_build_environment).yields.returns(true)

    assert req.satisfied?
  end

  def test_satisfy_build_env_can_be_disabled
    req = Class.new(Requirement) do
      satisfy(:build_env => false) { true }
    end.new

    ENV.expects(:with_build_environment).never

    assert req.satisfied?
  end

  def test_infers_path_from_satisfy_result
    which_path = Pathname.new("/foo/bar/baz")
    req = Class.new(Requirement) do
      satisfy { which_path }
    end.new

    ENV.expects(:with_build_environment).yields.returns(which_path)
    ENV.expects(:append_path).with("PATH", which_path.parent)

    req.satisfied?
    req.modify_build_environment
  end

  def test_dsl_build
    req = Class.new(Requirement) { build true }.new
    assert req.build?
  end

  def test_infer_name_from_class
    klass, const = self.class, :FooRequirement
    klass.const_set(const, Class.new(Requirement))
    assert_equal "foo", klass.const_get(const).new.name
  ensure
    klass.send(:remove_const, const) if klass.const_defined?(const)
  end

  def test_dsl_default_formula
    req = Class.new(Requirement) { default_formula 'foo' }.new
    assert req.default_formula?
  end

  def test_to_dependency
    req = Class.new(Requirement) { default_formula 'foo' }.new
    assert_equal Dependency.new('foo'), req.to_dependency
  end

  def test_to_dependency_calls_requirement_modify_build_environment
    error = Class.new(StandardError)

    req = Class.new(Requirement) do
      default_formula 'foo'
      satisfy { true }
      env { raise error }
    end.new

    assert_raises(error) do
      req.to_dependency.modify_build_environment
    end
  end

  def test_eql
    a, b = Requirement.new, Requirement.new
    assert a.eql?(b)
    assert b.eql?(a)
    assert_equal a.hash, b.hash
  end

  def test_not_eql
    a, b = Requirement.new([:optional]), Requirement.new
    assert_not_equal a.hash, b.hash
    assert !a.eql?(b)
    assert !b.eql?(a)
  end
end