aboutsummaryrefslogtreecommitdiffstats
path: root/test/rubygems/test_gem_spec_fetcher.rb
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-11-29 06:52:18 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-11-29 06:52:18 +0000
commit9694bb8cac12969300692dac5a1cf7aa4e3a46cd (patch)
treec3cb423d701f7049ba9382de052e2a937cd1302d /test/rubygems/test_gem_spec_fetcher.rb
parent3f606b7063fc7a8b191556365ad343a314719a8d (diff)
downloadruby-9694bb8cac12969300692dac5a1cf7aa4e3a46cd.tar.gz
* lib/rubygems*: Updated to RubyGems 2.0
* test/rubygems*: ditto. * common.mk (prelude): Updated for RubyGems 2.0 source rearrangement. * tool/change_maker.rb: Allow invalid UTF-8 characters in source files. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37976 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rubygems/test_gem_spec_fetcher.rb')
-rw-r--r--test/rubygems/test_gem_spec_fetcher.rb346
1 files changed, 84 insertions, 262 deletions
diff --git a/test/rubygems/test_gem_spec_fetcher.rb b/test/rubygems/test_gem_spec_fetcher.rb
index 015d2eec7d..a64a2c60cd 100644
--- a/test/rubygems/test_gem_spec_fetcher.rb
+++ b/test/rubygems/test_gem_spec_fetcher.rb
@@ -3,10 +3,15 @@ require 'rubygems/spec_fetcher'
class TestGemSpecFetcher < Gem::TestCase
+ def tuple(*args)
+ Gem::NameTuple.new(*args)
+ end
+
def setup
super
@uri = URI.parse @gem_repo
+ @source = Gem::Source.new(@uri)
util_setup_fake_fetcher
@@ -16,108 +21,114 @@ class TestGemSpecFetcher < Gem::TestCase
Gem::Specification.remove_spec @b2
- @specs = Gem::Specification.map { |spec|
- [spec.name, spec.version, spec.original_platform]
+ all = Gem::Specification.map { |spec|
+ Gem::NameTuple.new(spec.name, spec.version, spec.original_platform)
}.sort
+ @prerelease_specs, @specs = all.partition { |g| g.prerelease? }
+
# TODO: couldn't all of this come from the fake spec fetcher?
@latest_specs = Gem::Specification.latest_specs.sort.map { |spec|
- [spec.name, spec.version, spec.original_platform]
+ Gem::NameTuple.new(spec.name, spec.version, spec.original_platform)
}
- prerelease = Gem::Specification.find_all { |s| s.version.prerelease? }
- @prerelease_specs = prerelease.map { |spec|
- [spec.name, spec.version, spec.original_platform]
- }.sort
-
v = Gem.marshal_version
- s_zip = util_gzip(Marshal.dump(@specs))
- l_zip = util_gzip(Marshal.dump(@latest_specs))
- p_zip = util_gzip(Marshal.dump(@prerelease_specs))
+ s_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@specs)))
+ l_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@latest_specs)))
+ p_zip = util_gzip(Marshal.dump(Gem::NameTuple.to_basic(@prerelease_specs)))
@fetcher.data["#{@gem_repo}specs.#{v}.gz"] = s_zip
@fetcher.data["#{@gem_repo}latest_specs.#{v}.gz"] = l_zip
@fetcher.data["#{@gem_repo}prerelease_specs.#{v}.gz"] = p_zip
@sf = Gem::SpecFetcher.new
+
+ @released = Gem::NameTuple.from_list \
+ [["a", Gem::Version.new("1"), "ruby"],
+ ["a", Gem::Version.new("2"), "ruby"],
+ ["a_evil", Gem::Version.new("9"), "ruby"],
+ ["c", Gem::Version.new("1.2"), "ruby"],
+ ['dep_x', Gem::Version.new(1), 'ruby'],
+ ["pl", Gem::Version.new("1"), "i386-linux"],
+ ['x', Gem::Version.new(1), 'ruby']]
end
- def test_fetch_all
+ def test_spec_for_dependency_all
d = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}"
@fetcher.data["#{d}#{@a1.spec_name}.rz"] = util_zip(Marshal.dump(@a1))
@fetcher.data["#{d}#{@a2.spec_name}.rz"] = util_zip(Marshal.dump(@a2))
@fetcher.data["#{d}#{@a_pre.spec_name}.rz"] = util_zip(Marshal.dump(@a_pre))
@fetcher.data["#{d}#{@a3a.spec_name}.rz"] = util_zip(Marshal.dump(@a3a))
- dep = Gem::Dependency.new 'a', 1
+ dep = Gem::Dependency.new 'a', ">= 1"
- specs_and_sources = @sf.fetch dep, true
+ specs_and_sources, _ = @sf.spec_for_dependency dep
spec_names = specs_and_sources.map do |spec, source_uri|
[spec.full_name, source_uri]
end
- expected = [[@a1.full_name, @gem_repo], [@a2.full_name, @gem_repo]]
+ expected = [[@a1.full_name, @source], [@a2.full_name, @source]]
assert_equal expected, spec_names
assert_same specs_and_sources.first.last, specs_and_sources.last.last
end
- def test_fetch_latest
+ def test_spec_for_dependency_latest
d = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}"
@fetcher.data["#{d}#{@a1.spec_name}.rz"] = util_zip(Marshal.dump(@a1))
@fetcher.data["#{d}#{@a2.spec_name}.rz"] = util_zip(Marshal.dump(@a2))
@fetcher.data["#{d}#{@a_pre.spec_name}.rz"] = util_zip(Marshal.dump(@a_pre))
- dep = Gem::Dependency.new 'a', 1
- specs_and_sources = @sf.fetch dep
+ dep = Gem::Dependency.new 'a'
+ specs_and_sources, _ = @sf.spec_for_dependency dep
spec_names = specs_and_sources.map do |spec, source_uri|
[spec.full_name, source_uri]
end
- assert_equal [[@a2.full_name, @gem_repo]], spec_names
+ assert_equal [[@a2.full_name, Gem::Source.new(@gem_repo)]], spec_names
end
- def test_fetch_prerelease
+ def test_spec_for_dependency_prerelease
d = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}"
@fetcher.data["#{d}#{@a1.spec_name}.rz"] = util_zip(Marshal.dump(@a1))
@fetcher.data["#{d}#{@a2.spec_name}.rz"] = util_zip(Marshal.dump(@a2))
@fetcher.data["#{d}#{@a_pre.spec_name}.rz"] = util_zip(Marshal.dump(@a_pre))
- specs_and_sources = @sf.fetch dep('a', '1.a'), false, true, true
+ specs_and_sources, _ = @sf.spec_for_dependency dep('a', '1.a')
spec_names = specs_and_sources.map do |spec, source_uri|
[spec.full_name, source_uri]
end
- assert_equal [[@a_pre.full_name, @gem_repo]], spec_names
+ assert_equal [[@a_pre.full_name, Gem::Source.new(@gem_repo)]], spec_names
end
- def test_fetch_platform
+ def test_spec_for_dependency_platform
util_set_arch 'i386-linux'
@fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@pl1.original_name}.gemspec.rz"] =
util_zip(Marshal.dump(@pl1))
dep = Gem::Dependency.new 'pl', 1
- specs_and_sources = @sf.fetch dep
+ specs_and_sources, _ = @sf.spec_for_dependency dep
spec_names = specs_and_sources.map do |spec, source_uri|
[spec.full_name, source_uri]
end
- assert_equal [[@pl1.full_name, @gem_repo]], spec_names
+ assert_equal [[@pl1.full_name, Gem::Source.new(@gem_repo)]], spec_names
end
- def test_fetch_with_errors_mismatched_platform
+ def test_spec_for_dependency_mismatched_platform
util_set_arch 'hrpa-989'
@fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@pl1.original_name}.gemspec.rz"] =
util_zip(Marshal.dump(@pl1))
dep = Gem::Dependency.new 'pl', 1
- specs_and_sources, errors = @sf.fetch_with_errors dep
+ specs_and_sources, errors = @sf.spec_for_dependency dep
assert_equal 0, specs_and_sources.size
assert_equal 1, errors.size
@@ -125,284 +136,95 @@ class TestGemSpecFetcher < Gem::TestCase
assert_equal "i386-linux", errors[0].platforms.first
end
- def test_fetch_spec
- spec_uri = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}"
- @fetcher.data["#{spec_uri}.rz"] = util_zip(Marshal.dump(@a1))
-
- spec = @sf.fetch_spec ['a', Gem::Version.new(1), 'ruby'], @uri
- assert_equal @a1.full_name, spec.full_name
-
- cache_dir = @sf.cache_dir URI.parse(spec_uri)
-
- cache_file = File.join cache_dir, @a1.spec_name
-
- assert File.exist?(cache_file)
- end
-
- def test_fetch_spec_cached
- spec_uri = "#{@gem_repo}/#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}"
- @fetcher.data["#{spec_uri}.rz"] = nil
-
- cache_dir = @sf.cache_dir URI.parse(spec_uri)
- FileUtils.mkdir_p cache_dir
-
- cache_file = File.join cache_dir, @a1.spec_name
-
- open cache_file, 'wb' do |io|
- Marshal.dump @a1, io
+ def test_spec_for_dependency_bad_fetch_spec
+ src = Gem::Source.new(@gem_repo)
+ def src.fetch_spec(name)
+ raise Gem::RemoteFetcher::FetchError.new("bad news from the internet", @uri)
end
- spec = @sf.fetch_spec ['a', Gem::Version.new(1), 'ruby'], @uri
- assert_equal @a1.full_name, spec.full_name
- end
-
- def test_fetch_spec_platform
- @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@pl1.original_name}.gemspec.rz"] =
- util_zip(Marshal.dump(@pl1))
-
- spec = @sf.fetch_spec ['pl', Gem::Version.new(1), 'i386-linux'], @uri
-
- assert_equal @pl1.full_name, spec.full_name
- end
+ Gem.sources.replace [src]
- def test_fetch_spec_platform_ruby
- @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}.rz"] =
- util_zip(Marshal.dump(@a1))
-
- spec = @sf.fetch_spec ['a', Gem::Version.new(1), nil], @uri
- assert_equal @a1.full_name, spec.full_name
-
- spec = @sf.fetch_spec ['a', Gem::Version.new(1), ''], @uri
- assert_equal @a1.full_name, spec.full_name
- end
-
- def test_find_matching_all
- dep = Gem::Dependency.new 'a', 1
- specs = @sf.find_matching dep, true
-
- expected = [
- [['a', Gem::Version.new(1), Gem::Platform::RUBY], @gem_repo],
- [['a', Gem::Version.new(2), Gem::Platform::RUBY], @gem_repo],
- ]
-
- assert_equal expected, specs
- end
-
- def test_find_matching_latest
- dep = Gem::Dependency.new 'a', 1
- specs = @sf.find_matching dep
-
- expected = [
- [['a', Gem::Version.new(2), Gem::Platform::RUBY], @gem_repo],
- ]
-
- assert_equal expected, specs
- end
-
- def test_find_matching_prerelease
- dep = Gem::Dependency.new 'a', '1.a'
- specs = @sf.find_matching dep, false, true, true
-
- expected = [
- [['a', Gem::Version.new('1.a'), Gem::Platform::RUBY], @gem_repo],
- ]
-
- assert_equal expected, specs
- end
-
- def test_find_matching_platform
- util_set_arch 'i386-linux'
-
- dep = Gem::Dependency.new 'pl', 1
- specs = @sf.find_matching dep
-
- expected = [
- [['pl', Gem::Version.new(1), 'i386-linux'], @gem_repo],
- ]
-
- assert_equal expected, specs
-
- util_set_arch 'i386-freebsd6'
-
- dep = Gem::Dependency.new 'pl', 1
- specs = @sf.find_matching dep
-
- assert_equal [], specs
- end
+ d = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}"
+ @fetcher.data["#{d}#{@a1.spec_name}.rz"] = util_zip(Marshal.dump(@a1))
+ @fetcher.data["#{d}#{@a2.spec_name}.rz"] = util_zip(Marshal.dump(@a2))
+ @fetcher.data["#{d}#{@a_pre.spec_name}.rz"] = util_zip(Marshal.dump(@a_pre))
+ @fetcher.data["#{d}#{@a3a.spec_name}.rz"] = util_zip(Marshal.dump(@a3a))
- def test_find_matching_with_errors_matched_platform
- util_set_arch 'i386-linux'
+ dep = Gem::Dependency.new 'a', ">= 1"
- dep = Gem::Dependency.new 'pl', 1
- specs, errors = @sf.find_matching_with_errors dep
+ specs_and_sources, errors = @sf.spec_for_dependency dep
- expected = [
- [['pl', Gem::Version.new(1), 'i386-linux'], @gem_repo],
- ]
+ assert_equal [], specs_and_sources
+ sfp = errors.first
- assert_equal expected, specs
- assert_equal 0, errors.size
+ assert_kind_of Gem::SourceFetchProblem, sfp
+ assert_equal src, sfp.source
+ assert_equal "bad news from the internet (#{@gem_repo})", sfp.error.message
end
- def test_find_matching_with_errors_invalid_platform
- util_set_arch 'hrpa-899'
-
- dep = Gem::Dependency.new 'pl', 1
- specs, errors = @sf.find_matching_with_errors dep
-
- assert_equal 0, specs.size
+ def test_available_specs_latest
+ specs, _ = @sf.available_specs(:latest)
- assert_equal 1, errors.size
-
- assert_equal "i386-linux", errors[0].platforms.first
+ assert_equal [@source], specs.keys
+ assert_equal @latest_specs, specs[@source].sort
end
- def test_find_all_platforms
- util_set_arch 'i386-freebsd6'
+ def test_available_specs_released
+ specs, _ = @sf.available_specs(:released)
- dep = Gem::Dependency.new 'pl', 1
- specs = @sf.find_matching dep, false, false
-
- expected = [
- [['pl', Gem::Version.new(1), 'i386-linux'], @gem_repo],
- ]
+ assert_equal [@source], specs.keys
- assert_equal expected, specs
+ assert_equal @released, specs[@source].sort
end
- def test_list
- specs = @sf.list
-
- assert_equal [@uri], specs.keys
- assert_equal @latest_specs, specs[@uri].sort
- end
+ def test_available_specs_complete
+ specs, _ = @sf.available_specs(:complete)
- def test_list_all
- specs = @sf.list true
+ assert_equal [@source], specs.keys
- assert_equal [@uri], specs.keys
+ comp = @prerelease_specs + @released
- assert_equal([["a", Gem::Version.new("1"), "ruby"],
- ["a", Gem::Version.new("2"), "ruby"],
- ["a_evil", Gem::Version.new("9"), "ruby"],
- ["c", Gem::Version.new("1.2"), "ruby"],
- ["pl", Gem::Version.new("1"), "i386-linux"]],
- specs[@uri].sort)
+ assert_equal comp.sort, specs[@source].sort
end
- def test_list_cache
- specs = @sf.list
+ def test_available_specs_cache
+ specs, _ = @sf.available_specs(:latest)
- refute specs[@uri].empty?
+ refute specs[@source].empty?
@fetcher.data["#{@gem_repo}/latest_specs.#{Gem.marshal_version}.gz"] = nil
- cached_specs = @sf.list
+ cached_specs, _ = @sf.available_specs(:latest)
assert_equal specs, cached_specs
end
- def test_list_cache_all
- specs = @sf.list true
+ def test_available_specs_cache_released
+ specs, _ = @sf.available_specs(:released)
- refute specs[@uri].empty?
+ refute specs[@source].empty?
@fetcher.data["#{@gem_repo}/specs.#{Gem.marshal_version}.gz"] = nil
- cached_specs = @sf.list true
+ cached_specs, _ = @sf.available_specs(:released)
assert_equal specs, cached_specs
end
- def test_list_latest_all
- specs = @sf.list false
-
- assert_equal [@latest_specs], specs.values
-
- specs = @sf.list true
-
- assert_equal([[["a", Gem::Version.new("1"), "ruby"],
- ["a", Gem::Version.new("2"), "ruby"],
- ["a_evil", Gem::Version.new("9"), "ruby"],
- ["c", Gem::Version.new("1.2"), "ruby"],
- ["pl", Gem::Version.new("1"), "i386-linux"]]],
- specs.values, 'specs file not loaded')
- end
-
- def test_list_prerelease
- specs = @sf.list false, true
-
- assert_equal @prerelease_specs, specs[@uri].sort
- end
-
- def test_load_specs
- expected = [
- ['a', Gem::Version.new('1.a'), Gem::Platform::RUBY],
- ['a', Gem::Version.new(1), Gem::Platform::RUBY],
- ['a', Gem::Version.new(2), Gem::Platform::RUBY],
- ['a', Gem::Version.new('3.a'), Gem::Platform::RUBY],
- ['a_evil', Gem::Version.new(9), Gem::Platform::RUBY],
- ['c', Gem::Version.new('1.2'), Gem::Platform::RUBY],
- ['pl', Gem::Version.new(1), 'i386-linux'],
- ]
-
- assert_equal expected, @sf.load_specs(@uri, 'specs')
-
- cache_dir = File.join Gem.user_home, '.gem', 'specs', 'gems.example.com%80'
- assert File.exist?(cache_dir), "#{cache_dir} does not exist"
-
- cache_file = File.join cache_dir, "specs.#{Gem.marshal_version}"
- assert File.exist?(cache_file)
- end
-
- def test_load_specs_cached
- @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] = nil
- @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}"] =
- ' ' * Marshal.dump(@latest_specs).length
-
- cache_dir = File.join Gem.user_home, '.gem', 'specs', 'gems.example.com%80'
+ def test_available_specs_prerelease
+ specs, _ = @sf.available_specs(:prerelease)
- FileUtils.mkdir_p cache_dir
-
- cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}"
-
- open cache_file, 'wb' do |io|
- Marshal.dump @latest_specs, io
- end
-
- latest_specs = @sf.load_specs @uri, 'latest_specs'
-
- assert_equal @latest_specs, latest_specs
+ assert_equal @prerelease_specs, specs[@source].sort
end
- def test_load_specs_cached_empty
- @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] =
- proc do
- @fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] =
- util_gzip(Marshal.dump(@latest_specs))
-
- nil
- end
+ def test_available_specs_with_bad_source
+ Gem.sources.replace ["http://not-there.nothing"]
- cache_dir = File.join Gem.user_home, '.gem', 'specs', 'gems.example.com%80'
+ specs, errors = @sf.available_specs(:latest)
- FileUtils.mkdir_p cache_dir
-
- cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}"
-
- open cache_file, 'wb' do |io|
- io.write Marshal.dump(@latest_specs)[0, 10]
- end
-
- latest_specs = @sf.load_specs @uri, 'latest_specs'
-
- assert_equal @latest_specs, latest_specs
+ assert_equal({}, specs)
+ assert_kind_of Gem::SourceFetchProblem, errors.first
end
- def test_cache_dir_escapes_windows_paths
- uri = URI.parse("file:///C:/WINDOWS/Temp/gem_repo")
- cache_dir = @sf.cache_dir(uri).gsub(@sf.dir, '')
- assert cache_dir !~ /:/, "#{cache_dir} should not contain a :"
- end
end