brew/Library/Homebrew/test/test_download_strategies.rb
Jack Nagel 45bdeadd94 Set bottle download strategy directly
We know what strategy we want, so going through DownloadStrategyDetector
is wasted work. Now we can remove those patterns from the detector and
have two fewer branches each time through.
2014-03-18 21:28:33 -05:00

86 lines
2.2 KiB
Ruby

require 'testing_env'
require 'download_strategy'
class ResourceDouble
attr_reader :url, :specs
def initialize(url="http://foo.com/bar.tar.gz", specs={})
@url = url
@specs = specs
end
end
class AbstractDownloadStrategyTests < Test::Unit::TestCase
def setup
@name = "foo"
@resource = ResourceDouble.new
@strategy = AbstractDownloadStrategy.new(@name, @resource)
@args = %w{foo bar baz}
end
def test_expand_safe_system_args_with_explicit_quiet_flag
@args << { :quiet_flag => '--flag' }
expanded_args = @strategy.expand_safe_system_args(@args)
assert_equal %w{foo bar baz --flag}, expanded_args
end
def test_expand_safe_system_args_with_implicit_quiet_flag
expanded_args = @strategy.expand_safe_system_args(@args)
assert_equal %w{foo bar -q baz}, expanded_args
end
def test_expand_safe_system_args_does_not_mutate_argument
result = @strategy.expand_safe_system_args(@args)
assert_equal %w{foo bar baz}, @args
assert_not_same @args, result
end
end
class VCSDownloadStrategyTests < Test::Unit::TestCase
def setup
@resource = ResourceDouble.new("http://foo.com/bar")
@strategy = VCSDownloadStrategy
end
def escaped(tag)
"#{ERB::Util.url_encode(@resource.url)}--#{tag}"
end
def test_explicit_name
downloader = @strategy.new("baz", @resource)
assert_equal "baz--foo", downloader.cache_filename("foo")
end
def test_empty_name
downloader = @strategy.new("", @resource)
assert_equal escaped("foo"), downloader.cache_filename("foo")
end
def test_unknown_name
downloader = @strategy.new("__UNKNOWN__", @resource)
assert_equal escaped("foo"), downloader.cache_filename("foo")
end
end
class DownloadStrategyDetectorTests < Test::Unit::TestCase
def setup
@d = DownloadStrategyDetector.new
end
def test_detect_git_download_startegy
@d = DownloadStrategyDetector.detect("git://foo.com/bar.git")
assert_equal GitDownloadStrategy, @d
end
def test_default_to_curl_strategy
@d = DownloadStrategyDetector.detect(Object.new)
assert_equal CurlDownloadStrategy, @d
end
def test_raises_when_passed_unrecognized_strategy
assert_raises(TypeError) do
DownloadStrategyDetector.detect("foo", Class.new)
end
end
end