aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test/test_dependency_collector.rb
blob: f12fef7972dfcf8984328defc82e034555b3925e (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
require 'testing_env'
require 'dependency_collector'
require 'extend/set'

module DependencyCollectorTestExtension
  def find_dependency(name)
    deps.find { |dep| dep.name == name }
  end

  def find_requirement(klass)
    requirements.find { |req| klass === req }
  end
end

class DependencyCollectorTests < Test::Unit::TestCase
  def setup
    @d = DependencyCollector.new.extend(DependencyCollectorTestExtension)
  end

  def test_dependency_creation
    @d.add 'foo' => :build
    @d.add 'bar' => ['--universal', :optional]
    assert_instance_of Dependency, @d.find_dependency('foo')
    assert_equal 2, @d.find_dependency('bar').tags.length
  end

  def test_add_returns_created_dep
    ret = @d.add 'foo'
    assert_equal Dependency.new('foo'), ret
  end

  def test_dependency_tags
    assert Dependency.new('foo', [:build]).build?
    assert Dependency.new('foo', [:build, :optional]).optional?
    assert Dependency.new('foo', [:universal]).options.include? '--universal'
    assert_empty Dependency.new('foo').tags
  end

  def test_no_duplicate_dependencies
    @d.add 'foo'
    @d.add 'foo' => :build
    assert_equal 1, @d.deps.count
    assert_empty @d.find_dependency('foo').tags
  end

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

  def test_no_duplicate_requirements
    2.times { @d.add :x11 }
    assert_equal 1, @d.requirements.length
  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

  def test_libltdl_not_build_dep
    MacOS::Xcode.stubs(:provides_autotools?).returns(false)
    dep = @d.build(:libltdl)
    assert_equal Dependency.new("libtool"), dep
    assert !dep.build?
  end

  def test_autotools_dep_no_system_autotools
    MacOS::Xcode.stubs(:provides_autotools?).returns(false)
    dep = @d.build(:libtool)
    assert_equal Dependency.new("libtool"), dep
    assert dep.build?
  end

  def test_autotools_dep_system_autotools
    MacOS::Xcode.stubs(:provides_autotools?).returns(true)
    assert_nil @d.build(:libtool)
  end

  def test_x11_proxy_dep_mountain_lion
    MacOS.stubs(:version).returns(MacOS::Version.new("10.8"))
    assert_equal Dependency.new("libpng"), @d.build(:libpng)
  end

  def test_x11_proxy_dep_lion_or_older
    MacOS.stubs(:version).returns(MacOS::Version.new("10.7"))
    assert_equal X11Dependency::Proxy.new(:libpng), @d.build(:libpng)
  end

  def test_ld64_dep_pre_leopard
    MacOS.stubs(:version).returns(MacOS::Version.new("10.4"))
    assert_equal LD64Dependency.new, @d.build(:ld64)
  end

  def test_ld64_dep_leopard_or_newer
    MacOS.stubs(:version).returns(MacOS::Version.new("10.5"))
    assert_nil @d.build(:ld64)
  end

  def test_raises_typeerror_for_unknown_classes
    assert_raises(TypeError) { @d.add(Class.new) }
  end

  def test_raises_typeerror_for_unknown_types
    assert_raises(TypeError) { @d.add(Object.new) }
  end

  def test_does_not_mutate_dependency_spec
    spec = { 'foo' => :optional }
    copy = spec.dup
    @d.add(spec)
    assert_equal copy, spec
  end
end