aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test/test_requirements.rb
blob: c8a8e1ba87c2bed625e0d90d4fc8b539a8b8be83 (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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
require 'testing_env'
require 'test/testball'
require 'dependencies'

class DependencyCollector
  def find_requirement(klass)
    requirements.find do |req|
      klass === req
    end
  end
end

class RequirementTests < Test::Unit::TestCase
  def setup
    @d = DependencyCollector.new
  end

  def test_requirement_creation
    @d.add :x11
    assert_not_nil @d.find_requirement(X11Dependency)
  end


  def test_no_duplicate_requirements
    2.times { @d.add :x11 }
    assert_equal 1, @d.requirements.length
  end
end

class RequirementTagTests < Test::Unit::TestCase
  def setup
    @d = DependencyCollector.new
  end

  def test_requirement_tags
    @d.add :x11 => '2.5.1'
    @d.add :xcode => :build
    assert_empty @d.find_requirement(X11Dependency).tags
    assert @d.find_requirement(XcodeDependency).build?
  end

  def test_x11_no_tag
    @d.add :x11
    assert_empty @d.find_requirement(X11Dependency).tags
  end

  def test_x11_min_version
    @d.add :x11 => '2.5.1'
    assert_equal '2.5.1', @d.find_requirement(X11Dependency).min_version
  end

  def test_x11_tag
    @d.add :x11 => :optional
    assert @d.find_requirement(X11Dependency).optional?
  end

  def test_x11_min_version_and_tag
    @d.add :x11 => ['2.5.1', :optional]
    dep = @d.find_requirement(X11Dependency)
    assert_equal '2.5.1', dep.min_version
    assert dep.optional?
  end
end

class ExternalDepsTests < Test::Unit::TestCase
  def check_deps_fail specs
    d = DependencyCollector.new
    specs.each do |key, value|
      d.add key => value
    end

    # Should have found a dep
    assert d.requirements.size == 1

    d.requirements do |req|
      assert !d.satisfied?
    end
  end

  def check_deps_pass specs
    d = DependencyCollector.new
    specs.each do |key, value|
      d.add key => value
    end

    # Should have found a dep
    assert d.requirements.size == 1

    d.requirements do |req|
      assert d.satisfied?
    end
  end


  def test_bad_perl_deps
    check_deps_fail "notapackage" => :perl
  end

  def test_good_perl_deps
    check_deps_pass "ENV" => :perl
  end

  def test_bad_python_deps
    check_deps_fail "notapackage" => :python
  end

  def test_good_python_deps
    check_deps_pass "datetime" => :python
  end

  def test_bad_ruby_deps
    check_deps_fail "notapackage" => :ruby
  end

  def test_good_ruby_deps
    check_deps_pass "date" => :ruby
  end

  # Only run these next two tests if jruby is installed.
  def test_bad_jruby_deps
    check_deps_fail "notapackage" => :jruby if which('jruby')
  end

  def test_good_jruby_deps
    check_deps_pass "date" => :jruby if which('jruby')
  end

  # Only run these next two tests if rubinius is installed.
  def test_bad_rubinius_deps
    check_deps_fail "notapackage" => :rbx if which('rbx')
  end

  def test_good_rubinius_deps
    check_deps_pass "date" => :rbx if which('rbx')
  end

  # Only run these next two tests if chicken scheme is installed.
  def test_bad_chicken_deps
    check_deps_fail "notapackage" => :chicken if which('csc')
  end

  def test_good_chicken_deps
    check_deps_pass "extras" => :chicken if which('csc')
  end

  # Only run these next two tests if node.js is installed.
  def test_bad_node_deps
    check_deps_fail "notapackage" => :node if which('node')
  end

  def test_good_node_deps
    check_deps_pass "util" => :node if which('node')
  end
end