summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_remote_installer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem_remote_installer.rb')
-rw-r--r--test/rubygems/test_gem_remote_installer.rb161
1 files changed, 161 insertions, 0 deletions
diff --git a/test/rubygems/test_gem_remote_installer.rb b/test/rubygems/test_gem_remote_installer.rb
new file mode 100644
index 0000000000..90d94843bd
--- /dev/null
+++ b/test/rubygems/test_gem_remote_installer.rb
@@ -0,0 +1,161 @@
+#--
+# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
+# All rights reserved.
+# See LICENSE.txt for permissions.
+#++
+
+require 'test/unit'
+require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
+require 'rubygems/remote_installer'
+
+class MockFetcher
+ def initialize(uri, proxy)
+ @uri = uri
+ @proxy = proxy
+ end
+
+ def size
+ 1000
+ end
+
+ def source_index
+ if @uri =~ /non.existent.url/
+ fail Gem::RemoteSourceException,
+ "Error fetching remote gem cache: Mock Socket Exception"
+ end
+ result = {
+ 'foo-1.2.3' => Gem::Specification.new do |s|
+ s.name = 'foo'
+ s.version = "1.2.3"
+ s.summary = "This is a cool package"
+ end,
+ 'foo-tools-2.0.0' => Gem::Specification.new do |s|
+ s.name = 'foo-tools'
+ s.version = "2.0.0"
+ s.summary = "This is an even cooler package"
+ end,
+ 'foo-2-2.0.0' => Gem::Specification.new do |s|
+ s.name = 'foo-2'
+ s.version = "2.0.0"
+ s.summary = "This is the coolest package evar!~!"
+ end,
+ }
+ result
+ end
+
+ def fetch_path(path)
+ end
+
+ def self.finish
+ end
+end
+
+class TestGemRemoteInstaller < RubyGemTestCase
+
+ def setup
+ super
+
+ util_setup_fake_fetcher
+
+ util_setup_source_info_cache @gem1, @gem4
+
+ @installer = Gem::RemoteInstaller.new
+ @installer.instance_variable_set("@fetcher_class", MockFetcher)
+ end
+
+ def teardown
+ FileUtils.rm "dest_file" rescue nil
+ end
+
+ def test_find_gem_to_install
+ future_gem = quick_gem @gem1.name, '9.9.9' do |spec|
+ spec.required_ruby_version = '> 999.999.999' # HACK
+ end
+
+ util_setup_source_info_cache @gem1, future_gem
+ version = Gem::Version::Requirement.new "> 0.0.0"
+ gems = @installer.find_gem_to_install(@gem1.name, version)
+
+ assert_equal @gem1.full_name, gems.first.full_name
+ end
+
+ def test_source_index_hash
+ source_hash = @installer.source_index_hash
+
+ assert_equal 1, source_hash.size
+ assert source_hash.has_key?('http://gems.example.com')
+ assert_equal [@gem1, @gem4],
+ source_hash['http://gems.example.com'].search(@gem1.name)
+ end
+
+ def test_specs_n_sources_matching
+ version = Gem::Version::Requirement.new "> 0.0.0"
+ specs_n_sources = @installer.specs_n_sources_matching @gem1.name, version
+
+ gems = specs_n_sources.map { |g,| g.full_name }
+
+ assert_equal [@gem1.full_name], gems,
+ "Gems with longer names and higher versions must not match"
+ end
+
+end
+
+# This test suite has a number of TODOs in the test cases. The
+# TestRemoteInstaller test suite is a reworking of this class from
+# scratch.
+class RemoteInstallerTest #< RubyGemTestCase # HACK disabled
+ class RInst < Gem::RemoteInstaller
+ include Test::Unit::Assertions
+
+ attr_accessor :expected_destination_files
+ attr_accessor :expected_bodies
+ attr_accessor :caches
+ attr_accessor :responses
+
+ def source_index_hash
+ @caches
+ end
+
+ def fetch(uri)
+ @reponses ||= {}
+ @responses[uri]
+ end
+
+ def write_gem_to_file(body, destination_file)
+ expected_destination_file = expected_destination_files.pop
+ expected_body = expected_bodies.pop
+ assert_equal expected_body, body, "Unexpected body"
+ assert_equal expected_destination_file, destination_file, "Unexpected destination file"
+ end
+
+ def new_installer(gem)
+ return MockInstaller.new(gem)
+ end
+ end
+
+ def setup
+ Gem.clear_paths
+ @remote_installer = Gem::RemoteInstaller.new
+ @remote_installer.instance_eval { @fetcher_class = MockFetcher }
+ end
+
+ SAMPLE_SPEC = Gem::Specification.new do |s|
+ s.name = 'foo'
+ s.version = "1.2.3"
+ s.platform = Gem::Platform::RUBY
+ s.summary = "This is a cool package"
+ s.files = []
+ end
+ SAMPLE_CACHE = { 'foo-1.2.3' => SAMPLE_SPEC }
+ SAMPLE_CACHE_YAML = SAMPLE_CACHE.to_yaml
+
+ FOO_GEM = '' # TODO
+ CACHE_DIR = File.join(Gem.dir, 'cache')
+
+ def test_install
+ result = @remote_installer.install('foo')
+ assert_equal [nil], result
+ end
+
+end
+