summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_spec_fetcher.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem_spec_fetcher.rb')
-rw-r--r--test/rubygems/test_gem_spec_fetcher.rb82
1 files changed, 77 insertions, 5 deletions
diff --git a/test/rubygems/test_gem_spec_fetcher.rb b/test/rubygems/test_gem_spec_fetcher.rb
index 774785be08..972289f233 100644
--- a/test/rubygems/test_gem_spec_fetcher.rb
+++ b/test/rubygems/test_gem_spec_fetcher.rb
@@ -10,22 +10,31 @@ class TestGemSpecFetcher < RubyGemTestCase
util_setup_fake_fetcher
+ @a_pre = quick_gem 'a', '1.a'
@source_index.add_spec @pl1
+ @source_index.add_spec @a_pre
@specs = @source_index.gems.sort.map do |name, spec|
[spec.name, spec.version, spec.original_platform]
end.sort
- @fetcher.data["#{@gem_repo}specs.#{Gem.marshal_version}.gz"] =
- util_gzip(Marshal.dump(@specs))
-
@latest_specs = @source_index.latest_specs.sort.map do |spec|
[spec.name, spec.version, spec.original_platform]
end
+ @prerelease_specs = @source_index.prerelease_gems.sort.map do |name, spec|
+ [spec.name, spec.version, spec.original_platform]
+ end.sort
+
+ @fetcher.data["#{@gem_repo}specs.#{Gem.marshal_version}.gz"] =
+ util_gzip(Marshal.dump(@specs))
+
@fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] =
util_gzip(Marshal.dump(@latest_specs))
+ @fetcher.data["#{@gem_repo}prerelease_specs.#{Gem.marshal_version}.gz"] =
+ util_gzip(Marshal.dump(@prerelease_specs))
+
@sf = Gem::SpecFetcher.new
end
@@ -34,6 +43,8 @@ class TestGemSpecFetcher < RubyGemTestCase
util_zip(Marshal.dump(@a1))
@fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a2.full_name}.gemspec.rz"] =
util_zip(Marshal.dump(@a2))
+ @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a_pre.full_name}.gemspec.rz"] =
+ util_zip(Marshal.dump(@a_pre))
dep = Gem::Dependency.new 'a', 1
specs_and_sources = @sf.fetch dep, true
@@ -54,6 +65,8 @@ class TestGemSpecFetcher < RubyGemTestCase
util_zip(Marshal.dump(@a1))
@fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a2.full_name}.gemspec.rz"] =
util_zip(Marshal.dump(@a2))
+ @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a_pre.full_name}.gemspec.rz"] =
+ util_zip(Marshal.dump(@a_pre))
dep = Gem::Dependency.new 'a', 1
specs_and_sources = @sf.fetch dep
@@ -65,6 +78,24 @@ class TestGemSpecFetcher < RubyGemTestCase
assert_equal [[@a2.full_name, @gem_repo]], spec_names
end
+ def test_fetch_prerelease
+ @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.full_name}.gemspec.rz"] =
+ util_zip(Marshal.dump(@a1))
+ @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a2.full_name}.gemspec.rz"] =
+ util_zip(Marshal.dump(@a2))
+ @fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a_pre.full_name}.gemspec.rz"] =
+ util_zip(Marshal.dump(@a_pre))
+
+ dep = Gem::Dependency.new 'a', '1.a'
+ specs_and_sources = @sf.fetch dep, false, true, true
+
+ 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
+ end
+
def test_fetch_legacy_repo
@fetcher.data.delete "#{@gem_repo}specs.#{Gem.marshal_version}.gz"
@fetcher.data["#{@gem_repo}yaml"] = ''
@@ -186,6 +217,17 @@ RubyGems will revert to legacy indexes degrading performance.
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'
@@ -237,7 +279,7 @@ RubyGems will revert to legacy indexes degrading performance.
def test_list_cache
specs = @sf.list
- assert !specs[@uri].empty?
+ refute specs[@uri].empty?
@fetcher.data["#{@gem_repo}/latest_specs.#{Gem.marshal_version}.gz"] = nil
@@ -249,7 +291,7 @@ RubyGems will revert to legacy indexes degrading performance.
def test_list_cache_all
specs = @sf.list true
- assert !specs[@uri].empty?
+ refute specs[@uri].empty?
@fetcher.data["#{@gem_repo}/specs.#{Gem.marshal_version}.gz"] = nil
@@ -268,6 +310,12 @@ RubyGems will revert to legacy indexes degrading performance.
assert_equal [@specs], 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
specs = @sf.load_specs @uri, 'specs'
@@ -308,5 +356,29 @@ RubyGems will revert to legacy indexes degrading performance.
assert_equal @latest_specs, latest_specs
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
+
+ cache_dir = File.join Gem.user_home, '.gem', 'specs', 'gems.example.com%80'
+
+ 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
+ end
+
end