aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test/test_software_spec.rb
blob: f4a63e244dd03cd5c304010fee159eefb33e15c3 (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
require 'testing_env'
require 'software_spec'

class SoftwareSpecTests < Test::Unit::TestCase
  include VersionAssertions

  def setup
    @spec = SoftwareSpec.new
  end

  def test_resource
    @spec.resource('foo') { url 'foo-1.0' }
    assert @spec.resource?('foo')
  end

  def test_raises_when_duplicate_resources_are_defined
    @spec.resource('foo') { url 'foo-1.0' }
    assert_raises(DuplicateResourceError) do
      @spec.resource('foo') { url 'foo-1.0' }
    end
  end

  def test_raises_when_accessing_missing_resources
    assert_raises(ResourceMissingError) { @spec.resource('foo') }
  end

  def test_set_owner
    owner = stub(:name => 'some_name')
    @spec.owner = owner
    assert_equal owner, @spec.owner
  end

  def test_resource_owner
    @spec.resource('foo') { url 'foo-1.0' }
    @spec.owner = stub(:name => 'some_name')
    assert_equal 'some_name', @spec.name
    @spec.resources.each_value { |r| assert_equal @spec, r.owner }
  end

  def test_resource_without_version_receives_owners_version
    @spec.url('foo-42')
    @spec.resource('bar') { url 'bar' }
    @spec.owner = stub(:name => 'some_name')
    assert_version_equal '42', @spec.resource('bar').version
  end

  def test_option
    @spec.option('foo')
    assert @spec.build.has_option? 'foo'
  end

  def test_option_raises_when_begins_with_dashes
    assert_raises(RuntimeError) { @spec.option('--foo') }
  end

  def test_option_raises_when_name_empty
    assert_raises(RuntimeError) { @spec.option('') }
  end

  def test_option_accepts_symbols
    @spec.option(:foo)
    assert @spec.build.has_option? 'foo'
  end

  def test_depends_on
    @spec.depends_on('foo')
    assert_equal 'foo', @spec.deps.first.name
  end

  def test_dependency_option_integration
    @spec.depends_on 'foo' => :optional
    @spec.depends_on 'bar' => :recommended
    assert @spec.build.has_option?('with-foo')
    assert @spec.build.has_option?('without-bar')
  end

  def test_explicit_options_override_default_dep_option_description
    @spec.option('with-foo', 'blah')
    @spec.depends_on('foo' => :optional)
    assert_equal 'blah', @spec.build.first.description
  end

  def test_patch
    @spec.patch :p1, :DATA
    assert_equal 1, @spec.patches.length
    assert_equal :p1, @spec.patches.first.strip
  end
end

class HeadSoftwareSpecTests < Test::Unit::TestCase
  include VersionAssertions

  def setup
    @spec = HeadSoftwareSpec.new
  end

  def test_version
    assert_version_equal 'HEAD', @spec.version
  end

  def test_verify_download_integrity
    assert_nil @spec.verify_download_integrity(Object.new)
  end
end

class BottleSpecificationTests < Test::Unit::TestCase
  def setup
    @spec = BottleSpecification.new
  end

  def test_checksum_setters
    checksums = {
      :snow_leopard_32 => 'deadbeef'*5,
      :snow_leopard    => 'faceb00c'*5,
      :lion            => 'baadf00d'*5,
      :mountain_lion   => '8badf00d'*5,
    }

    checksums.each_pair do |cat, sha1|
      @spec.sha1(sha1 => cat)
    end

    checksums.each_pair do |cat, sha1|
      hsh, _ = @spec.instance_variable_get(:@sha1).fetch_bottle_for(cat)
      assert_equal Checksum.new(:sha1, sha1), hsh
    end
  end

  def test_other_setters
    double = Object.new
    %w{root_url prefix cellar revision}.each do |method|
      @spec.send(method, double)
      assert_equal double, @spec.send(method)
    end
  end
end