aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test
diff options
context:
space:
mode:
authorJack Nagel2013-04-08 00:55:44 -0500
committerJack Nagel2013-04-08 00:55:44 -0500
commitd3ac26e02721a4dc39e56068cfb8429c390e4498 (patch)
tree0a2036c078864ab2a0c1cb2b0edfd1643efaeb8e /Library/Homebrew/test
parent1953e403f39d0842933eb922cfb94a265a23b3dd (diff)
downloadhomebrew-d3ac26e02721a4dc39e56068cfb8429c390e4498.tar.bz2
Tests for SoftwareSpec and subclasses
Diffstat (limited to 'Library/Homebrew/test')
-rw-r--r--Library/Homebrew/test/test_software_spec.rb156
1 files changed, 156 insertions, 0 deletions
diff --git a/Library/Homebrew/test/test_software_spec.rb b/Library/Homebrew/test/test_software_spec.rb
new file mode 100644
index 000000000..8e23bc4a1
--- /dev/null
+++ b/Library/Homebrew/test/test_software_spec.rb
@@ -0,0 +1,156 @@
+require 'testing_env'
+require 'formula_support'
+
+# XXX: grrrrr
+require 'hardware'
+require 'bottles'
+
+class SoftwareSpecTests < Test::Unit::TestCase
+ include VersionAssertions
+
+ def setup
+ @spec = SoftwareSpec.new
+ end
+
+ def test_url
+ @spec.url('foo')
+ assert_equal 'foo', @spec.url
+ end
+
+ def test_url_with_specs
+ @spec.url('foo', :branch => 'master')
+ assert_equal 'foo', @spec.url
+ assert_equal({ :branch => 'master' }, @spec.specs)
+ end
+
+ def test_url_with_custom_download_strategy
+ strategy = Class.new(AbstractDownloadStrategy)
+ @spec.url('foo', :using => strategy)
+ assert_equal 'foo', @spec.url
+ assert_equal strategy, @spec.download_strategy
+ end
+
+ def test_url_with_specs_and_download_strategy
+ strategy = Class.new(AbstractDownloadStrategy)
+ @spec.url('foo', :using => strategy, :branch => 'master')
+ assert_equal 'foo', @spec.url
+ assert_equal({ :branch => 'master' }, @spec.specs)
+ assert_equal strategy, @spec.download_strategy
+ end
+
+ def test_version
+ @spec.version('1.0')
+ assert_version_equal '1.0', @spec.version
+ end
+
+ def test_version_from_url
+ @spec.url('http://foo.com/bar-1.0.tar.gz')
+ assert_version_equal '1.0', @spec.version
+ end
+
+ def test_version_with_scheme
+ scheme = Class.new(Version)
+ @spec.version('1.0' => scheme)
+ assert_version_equal '1.0', @spec.version
+ assert_instance_of scheme, @spec.version
+ end
+
+ def test_mirrors
+ assert_empty @spec.mirrors
+ @spec.mirror('foo')
+ @spec.mirror('bar')
+ assert_equal 'foo', @spec.mirrors.shift
+ assert_equal 'bar', @spec.mirrors.shift
+ end
+
+ def test_checksum_setters
+ assert_nil @spec.checksum
+ @spec.sha1('baadidea'*5)
+ assert_equal Checksum.new(:sha1, 'baadidea'*5), @spec.checksum
+ @spec.sha256('baadidea'*8)
+ assert_equal Checksum.new(:sha256, 'baadidea'*8), @spec.checksum
+ end
+
+ def test_download_strategy
+ strategy = Object.new
+ DownloadStrategyDetector.
+ expects(:detect).with("foo", nil).returns(strategy)
+ @spec.url("foo")
+ assert_equal strategy, @spec.download_strategy
+ end
+
+ def test_verify_download_integrity_missing
+ fn = Object.new
+ checksum = @spec.sha1('baadidea'*5)
+
+ fn.expects(:verify_checksum).
+ with(checksum).raises(ChecksumMissingError)
+ fn.expects(:sha1)
+
+ shutup { @spec.verify_download_integrity(fn) }
+ end
+
+ def test_verify_download_integrity_mismatch
+ fn = Object.new
+ checksum = @spec.sha1('baadidea'*5)
+
+ fn.expects(:verify_checksum).with(checksum).
+ raises(ChecksumMismatchError.new(checksum, Object.new))
+
+ shutup do
+ assert_raises(ChecksumMismatchError) do
+ @spec.verify_download_integrity(fn)
+ end
+ end
+ 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 BottleTests < Test::Unit::TestCase
+ include VersionAssertions
+
+ def setup
+ @spec = Bottle.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|
+ assert_equal Checksum.new(:sha1, sha1),
+ @spec.instance_variable_get(:@sha1)[cat]
+ 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