189 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "testing_env"
 | |
| require "download_strategy"
 | |
| 
 | |
| class ResourceDouble
 | |
|   attr_reader :url, :specs, :version
 | |
| 
 | |
|   def initialize(url = "http://example.com/foo.tar.gz", specs = {})
 | |
|     @url = url
 | |
|     @specs = specs
 | |
|   end
 | |
| end
 | |
| 
 | |
| class AbstractDownloadStrategyTests < Homebrew::TestCase
 | |
|   include FileUtils
 | |
| 
 | |
|   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
 | |
|     refute_same @args, result
 | |
|   end
 | |
| 
 | |
|   def test_source_modified_time
 | |
|     mktemp "mtime" do
 | |
|       touch "foo", :mtime => Time.now - 10
 | |
|       touch "bar", :mtime => Time.now - 100
 | |
|       ln_s "not-exist", "baz"
 | |
|       assert_equal File.mtime("foo"), @strategy.source_modified_time
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| class VCSDownloadStrategyTests < Homebrew::TestCase
 | |
|   def test_cache_filename
 | |
|     resource = ResourceDouble.new("http://example.com/bar")
 | |
|     strategy = Class.new(VCSDownloadStrategy) do
 | |
|       def cache_tag
 | |
|         "foo"
 | |
|       end
 | |
|     end
 | |
|     downloader = strategy.new("baz", resource)
 | |
|     assert_equal HOMEBREW_CACHE.join("baz--foo"), downloader.cached_location
 | |
|   end
 | |
| end
 | |
| 
 | |
| class GitDownloadStrategyTests < Homebrew::TestCase
 | |
|   include FileUtils
 | |
| 
 | |
|   def setup
 | |
|     resource = ResourceDouble.new("https://github.com/homebrew/foo")
 | |
|     @commit_id = 1
 | |
|     @strategy = GitDownloadStrategy.new("baz", resource)
 | |
|     @cached_location = @strategy.cached_location
 | |
|     mkpath @cached_location
 | |
|   end
 | |
| 
 | |
|   def teardown
 | |
|     rmtree @cached_location
 | |
|   end
 | |
| 
 | |
|   def git_commit_all
 | |
|     shutup do
 | |
|       system "git", "add", "--all"
 | |
|       system "git", "commit", "-m", "commit number #{@commit_id}"
 | |
|       @commit_id += 1
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def using_git_env
 | |
|     initial_env = ENV.to_hash
 | |
|     %w[AUTHOR COMMITTER].each do |role|
 | |
|       ENV["GIT_#{role}_NAME"] = "brew tests"
 | |
|       ENV["GIT_#{role}_EMAIL"] = "brew-tests@localhost"
 | |
|       ENV["GIT_#{role}_DATE"] = "Thu May 21 00:04:11 2009 +0100"
 | |
|     end
 | |
|     yield
 | |
|   ensure
 | |
|     ENV.replace(initial_env)
 | |
|   end
 | |
| 
 | |
|   def setup_git_repo
 | |
|     using_git_env do
 | |
|       @cached_location.cd do
 | |
|         shutup do
 | |
|           system "git", "init"
 | |
|           system "git", "remote", "add", "origin", "https://github.com/Homebrew/homebrew-foo"
 | |
|         end
 | |
|         touch "README"
 | |
|         git_commit_all
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def test_github_git_download_strategy_user_repo
 | |
|     resource = ResourceDouble.new("https://github.com/homebrew/brew.git")
 | |
|     strategy = GitHubGitDownloadStrategy.new("brew", resource)
 | |
| 
 | |
|     assert_equal strategy.instance_variable_get(:@user), "homebrew"
 | |
|     assert_equal strategy.instance_variable_get(:@repo), "brew"
 | |
|   end
 | |
| 
 | |
|   def test_source_modified_time
 | |
|     setup_git_repo
 | |
|     assert_equal 1242860651, @strategy.source_modified_time.to_i
 | |
|   end
 | |
| 
 | |
|   def test_last_commit
 | |
|     setup_git_repo
 | |
|     using_git_env do
 | |
|       @cached_location.cd do
 | |
|         touch "LICENSE"
 | |
|         git_commit_all
 | |
|       end
 | |
|     end
 | |
|     assert_equal "c50c79b", @strategy.last_commit
 | |
|   end
 | |
| 
 | |
|   def test_fetch_last_commit
 | |
|     remote_repo = HOMEBREW_PREFIX.join("remote_repo")
 | |
|     remote_repo.mkdir
 | |
| 
 | |
|     resource = ResourceDouble.new("file://#{remote_repo}")
 | |
|     resource.instance_variable_set(:@version, Version.create("HEAD"))
 | |
|     @strategy = GitDownloadStrategy.new("baz", resource)
 | |
| 
 | |
|     using_git_env do
 | |
|       remote_repo.cd do
 | |
|         shutup do
 | |
|           system "git", "init"
 | |
|           system "git", "remote", "add", "origin", "https://github.com/Homebrew/homebrew-foo"
 | |
|         end
 | |
|         touch "README"
 | |
|         git_commit_all
 | |
|         touch "LICENSE"
 | |
|         git_commit_all
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     @strategy.shutup!
 | |
|     assert_equal "c50c79b", @strategy.fetch_last_commit
 | |
|   ensure
 | |
|     remote_repo.rmtree if remote_repo.directory?
 | |
|   end
 | |
| end
 | |
| 
 | |
| class DownloadStrategyDetectorTests < Homebrew::TestCase
 | |
|   def setup
 | |
|     @d = DownloadStrategyDetector.new
 | |
|   end
 | |
| 
 | |
|   def test_detect_git_download_startegy
 | |
|     @d = DownloadStrategyDetector.detect("git://example.com/foo.git")
 | |
|     assert_equal GitDownloadStrategy, @d
 | |
|   end
 | |
| 
 | |
|   def test_detect_github_git_download_strategy
 | |
|     @d = DownloadStrategyDetector.detect("https://github.com/homebrew/brew.git")
 | |
|     assert_equal GitHubGitDownloadStrategy, @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
 | 
