aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test/test_requirement.rb
blob: 5d89defb05a10a994a184f406a77997f04e2bf33 (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
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
      env :userpaths
      satisfy { true }
    end.new

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

    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
    ENV.expects(:userpaths!).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(:userpaths!)
    ENV.expects(:append).with("PATH", which_path.parent, ":")

    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
end