mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00

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.
86 lines
2.2 KiB
Ruby
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
|