require 'testing_env' require 'extend/ARGV' # needs to be after test/unit to avoid conflict with OptionsParser ARGV.extend(HomebrewArgvExtension) require 'extend/ENV' ENV.extend(HomebrewEnvExtension) require 'test/testball' class AbstractDownloadStrategy attr_reader :url end class MostlyAbstractFormula 'foo' }, f.head.specs) assert_equal CurlDownloadStrategy, f.stable.download_strategy assert_equal CurlBottleDownloadStrategy, f.bottle.download_strategy assert_equal CurlDownloadStrategy, f.devel.download_strategy assert_equal GitDownloadStrategy, f.head.download_strategy assert f.stable.has_checksum? assert f.bottle.has_checksum? assert f.devel.has_checksum? assert !f.head.has_checksum? assert_equal :sha1, f.stable.checksum_type assert_equal :sha1, f.bottle.checksum_type assert_equal :sha256, f.devel.checksum_type assert_nil f.head.checksum_type assert_equal case MacOS.cat when :snowleopard then 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeef' when :lion then 'baadf00dbaadf00dbaadf00dbaadf00dbaadf00d' end, f.bottle.sha1 assert_match /[0-9a-fA-F]{40}/, f.stable.sha1 assert_match /[0-9a-fA-F]{64}/, f.devel.sha256 assert_nil f.stable.md5 assert_nil f.stable.sha256 assert_nil f.bottle.md5 assert_nil f.bottle.sha256 assert_nil f.devel.md5 assert_nil f.devel.sha1 assert_equal 1, f.stable.mirrors.length assert_nil f.bottle.mirrors assert_equal 1, f.devel.mirrors.length assert_nil f.head.mirrors assert !f.stable.explicit_version? assert !f.bottle.explicit_version? assert !f.devel.explicit_version? assert_equal '0.1', f.stable.version assert_equal '0.1', f.bottle.version assert_equal '0.2', f.devel.version assert_equal 'HEAD', f.head.version assert_equal 0, f.bottle.revision end def test_ancient_formula_specs f = AncientSpecTestBall.new assert_equal 'http://example.com', f.homepage assert_equal 'file:///foo.com/testball-0.1.tbz', f.url assert_equal '0.1', f.version assert_equal f.stable, f.active_spec assert_equal CurlDownloadStrategy, f.download_strategy assert_instance_of CurlDownloadStrategy, f.downloader assert_instance_of SoftwareSpec, f.stable assert_instance_of HeadSoftwareSpec, f.head assert_equal 'file:///foo.com/testball-0.1.tbz', f.stable.url assert_equal 'https://github.com/mxcl/homebrew.git', f.head.url assert_nil f.stable.specs assert_equal({ :tag => 'foo' }, f.head.specs) assert f.stable.has_checksum? assert !f.head.has_checksum? assert_equal :md5, f.stable.checksum_type assert_nil f.head.checksum_type assert_match /[0-9a-fA-F]{32}/, f.stable.md5 assert !f.stable.explicit_version? assert_equal '0.1', f.stable.version assert_equal 'HEAD', f.head.version end def test_devel_active_spec ARGV.push '--devel' f = SpecTestBall.new assert_equal f.devel, f.active_spec assert_equal '0.2', f.version assert_equal 'file:///foo.com/testball-0.2.tbz', f.url assert_equal CurlDownloadStrategy, f.download_strategy assert_instance_of CurlDownloadStrategy, f.downloader ARGV.delete '--devel' end def test_head_active_spec ARGV.push '--HEAD' f = SpecTestBall.new assert_equal f.head, f.active_spec assert_equal 'HEAD', f.version assert_equal 'https://github.com/mxcl/homebrew.git', f.url assert_equal GitDownloadStrategy, f.download_strategy assert_instance_of GitDownloadStrategy, f.downloader ARGV.delete '--HEAD' end def test_explicit_version_spec f = ExplicitVersionSpecTestBall.new assert_equal '0.3', f.version assert_equal '0.3', f.stable.version assert_equal '0.4', f.devel.version assert f.stable.explicit_version? assert f.devel.explicit_version? end def test_old_bottle_specs f = OldBottleSpecTestBall.new case MacOS.cat when :lion assert_instance_of Bottle, f.bottle assert_equal CurlBottleDownloadStrategy, f.bottle.download_strategy assert_nil f.bottle.specs assert_nil f.bottle.mirrors assert_equal 'file:///foo.com/testball-0.1-bottle.tar.gz', f.bottle.url assert f.bottle.has_checksum? assert_equal :sha1, f.bottle.checksum_type assert_equal 'baadf00dbaadf00dbaadf00dbaadf00dbaadf00d', f.bottle.sha1 assert_nil f.bottle.md5 assert_nil f.bottle.sha256 assert !f.bottle.explicit_version? assert_equal 0, f.bottle.revision assert_equal '0.1', f.bottle.version else assert_nil f.bottle end end def test_ancient_bottle_specs f = AncientBottleSpecTestBall.new assert_nil f.bottle end def test_head_only_specs f = HeadOnlySpecTestBall.new assert_not_nil f.head assert_nil f.stable assert_nil f.bottle assert_nil f.devel assert_equal f.head, f.active_spec assert_equal 'HEAD', f.version assert !f.head.has_checksum? assert_equal 'https://github.com/mxcl/homebrew.git', f.url assert_equal GitDownloadStrategy, f.download_strategy assert_instance_of GitDownloadStrategy, f.downloader assert_instance_of HeadSoftwareSpec, f.head end def test_incomplete_stable_specs f = IncompleteStableSpecTestBall.new assert_not_nil f.head assert_nil f.stable assert_nil f.bottle assert_nil f.devel assert_equal f.head, f.active_spec assert_equal 'HEAD', f.version assert !f.head.has_checksum? assert_equal 'https://github.com/mxcl/homebrew.git', f.url assert_equal GitDownloadStrategy, f.download_strategy assert_instance_of GitDownloadStrategy, f.downloader assert_instance_of HeadSoftwareSpec, f.head end def test_head_only_with_version_specs f = IncompleteStableSpecTestBall.new assert_not_nil f.head assert_nil f.stable assert_nil f.bottle assert_nil f.devel assert_equal f.head, f.active_spec assert_equal 'HEAD', f.version assert !f.head.has_checksum? assert_equal 'https://github.com/mxcl/homebrew.git', f.url assert_equal GitDownloadStrategy, f.download_strategy assert_instance_of GitDownloadStrategy, f.downloader assert_instance_of HeadSoftwareSpec, f.head end def test_explicit_strategy_specs f = ExplicitStrategySpecTestBall.new assert_not_nil f.stable assert_not_nil f.devel assert_not_nil f.head assert_equal f.stable, f.active_spec assert !f.stable.has_checksum? assert !f.devel.has_checksum? assert !f.head.has_checksum? assert_equal MercurialDownloadStrategy, f.stable.download_strategy assert_equal BazaarDownloadStrategy, f.devel.download_strategy assert_equal SubversionDownloadStrategy, f.head.download_strategy assert_equal({ :tag => '0.2' }, f.stable.specs) assert_equal({ :tag => '0.3' }, f.devel.specs) assert f.head.specs.empty? end end