aboutsummaryrefslogtreecommitdiffstats
path: root/test/rubygems/test_gem_source_index.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem_source_index.rb')
-rw-r--r--test/rubygems/test_gem_source_index.rb271
1 files changed, 208 insertions, 63 deletions
diff --git a/test/rubygems/test_gem_source_index.rb b/test/rubygems/test_gem_source_index.rb
index 140f3ad067..adb9037caa 100644
--- a/test/rubygems/test_gem_source_index.rb
+++ b/test/rubygems/test_gem_source_index.rb
@@ -23,6 +23,141 @@ class TestGemSourceIndex < RubyGemTestCase
util_setup_fake_fetcher
end
+ def test_self_from_gems_in
+ spec_dir = File.join @gemhome, 'specifications'
+
+ FileUtils.rm_r spec_dir
+
+ FileUtils.mkdir_p spec_dir
+
+ a1 = quick_gem 'a', '1' do |spec| spec.author = 'author 1' end
+
+ spec_file = File.join spec_dir, "#{a1.full_name}.gemspec"
+
+ File.open spec_file, 'w' do |fp|
+ fp.write a1.to_ruby
+ end
+
+ si = Gem::SourceIndex.from_gems_in spec_dir
+
+ assert_equal [spec_dir], si.spec_dirs
+ assert_equal [a1.full_name], si.gems.keys
+ end
+
+ def test_self_load_specification
+ spec_dir = File.join @gemhome, 'specifications'
+
+ FileUtils.rm_r spec_dir
+
+ FileUtils.mkdir_p spec_dir
+
+ a1 = quick_gem 'a', '1' do |spec| spec.author = 'author 1' end
+
+ spec_file = File.join spec_dir, "#{a1.full_name}.gemspec"
+
+ File.open spec_file, 'w' do |fp|
+ fp.write a1.to_ruby
+ end
+
+ spec = Gem::SourceIndex.load_specification spec_file
+
+ assert_equal a1.author, spec.author
+ end
+
+ def test_self_load_specification_exception
+ spec_dir = File.join @gemhome, 'specifications'
+
+ FileUtils.mkdir_p spec_dir
+
+ spec_file = File.join spec_dir, 'a-1.gemspec'
+
+ File.open spec_file, 'w' do |fp|
+ fp.write 'raise Exception, "epic fail"'
+ end
+
+ use_ui @ui do
+ assert_equal nil, Gem::SourceIndex.load_specification(spec_file)
+ end
+
+ assert_equal '', @ui.output
+
+ expected = <<-EOF
+WARNING: #<Exception: epic fail>
+raise Exception, "epic fail"
+WARNING: Invalid .gemspec format in '#{spec_file}'
+ EOF
+
+ assert_equal expected, @ui.error
+ end
+
+ def test_self_load_specification_interrupt
+ spec_dir = File.join @gemhome, 'specifications'
+
+ FileUtils.mkdir_p spec_dir
+
+ spec_file = File.join spec_dir, 'a-1.gemspec'
+
+ File.open spec_file, 'w' do |fp|
+ fp.write 'raise Interrupt, "^C"'
+ end
+
+ use_ui @ui do
+ assert_raise Interrupt do
+ Gem::SourceIndex.load_specification(spec_file)
+ end
+ end
+
+ assert_equal '', @ui.output
+ assert_equal '', @ui.error
+ end
+
+ def test_self_load_specification_syntax_error
+ spec_dir = File.join @gemhome, 'specifications'
+
+ FileUtils.mkdir_p spec_dir
+
+ spec_file = File.join spec_dir, 'a-1.gemspec'
+
+ File.open spec_file, 'w' do |fp|
+ fp.write '1 +'
+ end
+
+ use_ui @ui do
+ assert_equal nil, Gem::SourceIndex.load_specification(spec_file)
+ end
+
+ assert_equal '', @ui.output
+
+ expected = <<-EOF
+WARNING: compile error
+#{spec_file}:1: syntax error, unexpected $end
+WARNING: 1 +
+ EOF
+
+ assert_equal expected, @ui.error
+ end
+
+ def test_self_load_specification_system_exit
+ spec_dir = File.join @gemhome, 'specifications'
+
+ FileUtils.mkdir_p spec_dir
+
+ spec_file = File.join spec_dir, 'a-1.gemspec'
+
+ File.open spec_file, 'w' do |fp|
+ fp.write 'raise SystemExit, "bye-bye"'
+ end
+
+ use_ui @ui do
+ assert_raise SystemExit do
+ Gem::SourceIndex.load_specification(spec_file)
+ end
+ end
+
+ assert_equal '', @ui.output
+ assert_equal '', @ui.error
+ end
+
def test_create_from_directory
# TODO
end
@@ -43,16 +178,16 @@ class TestGemSourceIndex < RubyGemTestCase
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/Marshal.#{@marshal_version}.Z", paths.shift
+ assert_equal "#{@gem_repo}Marshal.#{@marshal_version}.Z", paths.shift
assert paths.empty?, paths.join(', ')
end
def test_fetch_bulk_index_error
- @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}.Z"] = proc { raise SocketError }
- @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}"] = proc { raise SocketError }
- @fetcher.data["#{@gem_repo}/yaml.Z"] = proc { raise SocketError }
- @fetcher.data["#{@gem_repo}/yaml"] = proc { raise SocketError }
+ @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}.Z"] = proc { raise SocketError }
+ @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}"] = proc { raise SocketError }
+ @fetcher.data["#{@gem_repo}yaml.Z"] = proc { raise SocketError }
+ @fetcher.data["#{@gem_repo}yaml"] = proc { raise SocketError }
e = assert_raise Gem::RemoteSourceException do
use_ui @ui do
@@ -62,10 +197,10 @@ class TestGemSourceIndex < RubyGemTestCase
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/Marshal.#{@marshal_version}.Z", paths.shift
- assert_equal "#{@gem_repo}/Marshal.#{@marshal_version}", paths.shift
- assert_equal "#{@gem_repo}/yaml.Z", paths.shift
- assert_equal "#{@gem_repo}/yaml", paths.shift
+ assert_equal "#{@gem_repo}Marshal.#{@marshal_version}.Z", paths.shift
+ assert_equal "#{@gem_repo}Marshal.#{@marshal_version}", paths.shift
+ assert_equal "#{@gem_repo}yaml.Z", paths.shift
+ assert_equal "#{@gem_repo}yaml", paths.shift
assert paths.empty?, paths.join(', ')
@@ -74,12 +209,12 @@ class TestGemSourceIndex < RubyGemTestCase
end
def test_fetch_bulk_index_fallback
- @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}.Z"] =
+ @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}.Z"] =
proc { raise SocketError }
- @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}"] =
+ @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}"] =
proc { raise SocketError }
- @fetcher.data["#{@gem_repo}/yaml.Z"] = proc { raise SocketError }
- @fetcher.data["#{@gem_repo}/yaml"] = @source_index.to_yaml
+ @fetcher.data["#{@gem_repo}yaml.Z"] = proc { raise SocketError }
+ @fetcher.data["#{@gem_repo}yaml"] = @source_index.to_yaml
use_ui @ui do
fetched_index = @source_index.fetch_bulk_index @uri
@@ -90,10 +225,10 @@ class TestGemSourceIndex < RubyGemTestCase
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/Marshal.#{@marshal_version}.Z", paths.shift
- assert_equal "#{@gem_repo}/Marshal.#{@marshal_version}", paths.shift
- assert_equal "#{@gem_repo}/yaml.Z", paths.shift
- assert_equal "#{@gem_repo}/yaml", paths.shift
+ assert_equal "#{@gem_repo}Marshal.#{@marshal_version}.Z", paths.shift
+ assert_equal "#{@gem_repo}Marshal.#{@marshal_version}", paths.shift
+ assert_equal "#{@gem_repo}yaml.Z", paths.shift
+ assert_equal "#{@gem_repo}yaml", paths.shift
assert paths.empty?, paths.join(', ')
end
@@ -102,8 +237,8 @@ class TestGemSourceIndex < RubyGemTestCase
marshal = @source_index.dump
marshal[0] = (Marshal::MAJOR_VERSION - 1).chr
- @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}"] = marshal
- @fetcher.data["#{@gem_repo}/yaml"] = @source_index.to_yaml
+ @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}"] = marshal
+ @fetcher.data["#{@gem_repo}yaml"] = @source_index.to_yaml
use_ui @ui do
fetched_index = @source_index.fetch_bulk_index @uri
@@ -114,10 +249,10 @@ class TestGemSourceIndex < RubyGemTestCase
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/Marshal.#{@marshal_version}.Z", paths.shift
- assert_equal "#{@gem_repo}/Marshal.#{@marshal_version}", paths.shift
- assert_equal "#{@gem_repo}/yaml.Z", paths.shift
- assert_equal "#{@gem_repo}/yaml", paths.shift
+ assert_equal "#{@gem_repo}Marshal.#{@marshal_version}.Z", paths.shift
+ assert_equal "#{@gem_repo}Marshal.#{@marshal_version}", paths.shift
+ assert_equal "#{@gem_repo}yaml.Z", paths.shift
+ assert_equal "#{@gem_repo}yaml", paths.shift
assert paths.empty?, paths.join(', ')
end
@@ -133,8 +268,8 @@ class TestGemSourceIndex < RubyGemTestCase
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/Marshal.#{@marshal_version}.Z", paths.shift
- assert_equal "#{@gem_repo}/Marshal.#{@marshal_version}", paths.shift
+ assert_equal "#{@gem_repo}Marshal.#{@marshal_version}.Z", paths.shift
+ assert_equal "#{@gem_repo}Marshal.#{@marshal_version}", paths.shift
assert paths.empty?, paths.join(', ')
end
@@ -143,8 +278,8 @@ class TestGemSourceIndex < RubyGemTestCase
index = util_zip @gem_names
latest_index = util_zip [@a2.full_name, @b2.full_name].join("\n")
- @fetcher.data["#{@gem_repo}/quick/index.rz"] = index
- @fetcher.data["#{@gem_repo}/quick/latest_index.rz"] = latest_index
+ @fetcher.data["#{@gem_repo}quick/index.rz"] = index
+ @fetcher.data["#{@gem_repo}quick/latest_index.rz"] = latest_index
quick_index = @source_index.fetch_quick_index @uri, false
assert_equal [@a2.full_name, @b2.full_name].sort,
@@ -152,7 +287,7 @@ class TestGemSourceIndex < RubyGemTestCase
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/quick/latest_index.rz", paths.shift
+ assert_equal "#{@gem_repo}quick/latest_index.rz", paths.shift
assert paths.empty?, paths.join(', ')
end
@@ -161,8 +296,8 @@ class TestGemSourceIndex < RubyGemTestCase
index = util_zip @gem_names
latest_index = util_zip [@a2.full_name, @b2.full_name].join("\n")
- @fetcher.data["#{@gem_repo}/quick/index.rz"] = index
- @fetcher.data["#{@gem_repo}/quick/latest_index.rz"] = latest_index
+ @fetcher.data["#{@gem_repo}quick/index.rz"] = index
+ @fetcher.data["#{@gem_repo}quick/latest_index.rz"] = latest_index
quick_index = @source_index.fetch_quick_index @uri, true
assert_equal [@a1.full_name, @a2.full_name, @b2.full_name].sort,
@@ -170,13 +305,13 @@ class TestGemSourceIndex < RubyGemTestCase
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/quick/index.rz", paths.shift
+ assert_equal "#{@gem_repo}quick/index.rz", paths.shift
assert paths.empty?, paths.join(', ')
end
def test_fetch_quick_index_error
- @fetcher.data["#{@gem_repo}/quick/index.rz"] =
+ @fetcher.data["#{@gem_repo}quick/index.rz"] =
proc { raise Exception }
e = assert_raise Gem::OperationNotSupportedError do
@@ -187,7 +322,7 @@ class TestGemSourceIndex < RubyGemTestCase
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/quick/index.rz", paths.shift
+ assert_equal "#{@gem_repo}quick/index.rz", paths.shift
assert paths.empty?, paths.join(', ')
end
@@ -195,22 +330,22 @@ class TestGemSourceIndex < RubyGemTestCase
def test_fetch_quick_index_fallback
index = util_zip @gem_names
- @fetcher.data["#{@gem_repo}/quick/index.rz"] = index
+ @fetcher.data["#{@gem_repo}quick/index.rz"] = index
quick_index = @source_index.fetch_quick_index @uri, false
assert_equal @gem_names.split, quick_index.sort
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/quick/latest_index.rz", paths.shift
- assert_equal "#{@gem_repo}/quick/index.rz", paths.shift
+ assert_equal "#{@gem_repo}quick/latest_index.rz", paths.shift
+ assert_equal "#{@gem_repo}quick/index.rz", paths.shift
assert paths.empty?, paths.join(', ')
end
def test_fetch_quick_index_subdir
latest_index = util_zip [@a2.full_name, @b2.full_name].join("\n")
- repo = URI.parse "#{@gem_repo}/~nobody/mirror/"
+ repo = URI.parse "#{@gem_repo}~nobody/mirror/"
@fetcher.data["#{repo}quick/latest_index.rz"] = latest_index
@@ -226,7 +361,7 @@ class TestGemSourceIndex < RubyGemTestCase
end
def test_fetch_single_spec
- a1_spec_url = "#{@gem_repo}/quick/Marshal.#{Gem.marshal_version}/#{@a1.full_name}.gemspec.rz"
+ a1_spec_url = "#{@gem_repo}quick/Marshal.#{Gem.marshal_version}/#{@a1.full_name}.gemspec.rz"
@fetcher.data[a1_spec_url] = util_zip Marshal.dump(@a1)
spec = @source_index.send :fetch_single_spec, URI.parse(@gem_repo),
@@ -242,7 +377,7 @@ class TestGemSourceIndex < RubyGemTestCase
end
def test_fetch_single_spec_subdir
- repo = URI.parse "#{@gem_repo}/~nobody/mirror/"
+ repo = URI.parse "#{@gem_repo}~nobody/mirror/"
a1_spec_url = "#{repo}quick/Marshal.#{Gem.marshal_version}/#{@a1.full_name}.gemspec.rz"
@fetcher.data[a1_spec_url] = util_zip Marshal.dump(@a1)
@@ -259,7 +394,7 @@ class TestGemSourceIndex < RubyGemTestCase
end
def test_fetch_single_spec_yaml
- a1_spec_url = "#{@gem_repo}/quick/#{@a1.full_name}.gemspec.rz"
+ a1_spec_url = "#{@gem_repo}quick/#{@a1.full_name}.gemspec.rz"
@fetcher.data[a1_spec_url] = util_zip @a1.to_yaml
repo = URI.parse @gem_repo
@@ -270,14 +405,14 @@ class TestGemSourceIndex < RubyGemTestCase
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/quick/Marshal.#{Gem.marshal_version}/#{@a1.full_name}.gemspec.rz", paths.shift
+ assert_equal "#{@gem_repo}quick/Marshal.#{Gem.marshal_version}/#{@a1.full_name}.gemspec.rz", paths.shift
assert_equal a1_spec_url, paths.shift
assert paths.empty?, paths.join(', ')
end
def test_fetch_single_spec_yaml_subdir
- repo = URI.parse "#{@gem_repo}/~nobody/mirror/"
+ repo = URI.parse "#{@gem_repo}~nobody/mirror/"
a1_spec_url = "#{repo}quick/#{@a1.full_name}.gemspec.rz"
@fetcher.data[a1_spec_url] = util_zip @a1.to_yaml
@@ -377,12 +512,12 @@ class TestGemSourceIndex < RubyGemTestCase
end
def test_outdated
- util_setup_source_info_cache
+ util_setup_spec_fetcher
assert_equal [], @source_index.outdated
updated = quick_gem @a2.name, (@a2.version.bump)
- util_setup_source_info_cache updated
+ util_setup_spec_fetcher updated
assert_equal [updated.name], @source_index.outdated
@@ -390,7 +525,7 @@ class TestGemSourceIndex < RubyGemTestCase
s.platform = Gem::Platform.new 'x86-other_platform1'
end
- util_setup_source_info_cache updated, updated_platform
+ util_setup_spec_fetcher updated, updated_platform
assert_equal [updated_platform.name], @source_index.outdated
end
@@ -411,6 +546,16 @@ class TestGemSourceIndex < RubyGemTestCase
assert source_index.gems.include?(@a1.full_name)
end
+ def test_refresh_bang_not_from_dir
+ source_index = Gem::SourceIndex.new
+
+ e = assert_raise RuntimeError do
+ source_index.refresh!
+ end
+
+ assert_equal 'source index not created from disk', e.message
+ end
+
def test_remove_extra
@source_index.add_spec @a1
@source_index.add_spec @a2
@@ -516,8 +661,8 @@ class TestGemSourceIndex < RubyGemTestCase
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/quick/index.rz", paths.shift
- assert_equal "#{@gem_repo}/Marshal.#{@marshal_version}.Z", paths.shift
+ assert_equal "#{@gem_repo}quick/index.rz", paths.shift
+ assert_equal "#{@gem_repo}Marshal.#{@marshal_version}.Z", paths.shift
assert paths.empty?, paths.join(', ')
end
@@ -528,7 +673,7 @@ class TestGemSourceIndex < RubyGemTestCase
latest_names = [@a2, @a_evil9, @b2, @c1_2].map { |s| s.full_name }
latest_index = util_zip latest_names.join("\n")
- @fetcher.data["#{@gem_repo}/quick/latest_index.rz"] = latest_index
+ @fetcher.data["#{@gem_repo}quick/latest_index.rz"] = latest_index
marshal_uri = File.join @gem_repo, "quick", "Marshal.#{@marshal_version}",
"#{@b2.full_name}.gemspec.rz"
@@ -541,7 +686,7 @@ class TestGemSourceIndex < RubyGemTestCase
end
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/quick/latest_index.rz", paths.shift
+ assert_equal "#{@gem_repo}quick/latest_index.rz", paths.shift
assert_equal marshal_uri, paths.shift
assert paths.empty?, paths.join(', ')
@@ -554,7 +699,7 @@ class TestGemSourceIndex < RubyGemTestCase
Gem.configuration = Gem::ConfigFile.new([])
quick_index = util_zip @all_gem_names.join("\n")
- @fetcher.data["#{@gem_repo}/quick/index.rz"] = quick_index
+ @fetcher.data["#{@gem_repo}quick/index.rz"] = quick_index
marshal_uri = File.join @gem_repo, "quick", "Marshal.#{@marshal_version}",
"#{@b2.full_name}.gemspec.rz"
@@ -567,7 +712,7 @@ class TestGemSourceIndex < RubyGemTestCase
end
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/quick/index.rz", paths.shift
+ assert_equal "#{@gem_repo}quick/index.rz", paths.shift
assert_equal marshal_uri, paths.shift
assert paths.empty?, paths.join(', ')
@@ -580,12 +725,12 @@ class TestGemSourceIndex < RubyGemTestCase
Gem.configuration = Gem::ConfigFile.new([])
quick_index = util_zip @all_gem_names.join("\n")
- @fetcher.data["#{@gem_repo}/quick/index.rz"] = quick_index
+ @fetcher.data["#{@gem_repo}quick/index.rz"] = quick_index
marshal_uri = File.join @gem_repo, "quick", "Marshal.#{@marshal_version}",
"#{@b2.full_name}.gemspec.rz"
- yaml_uri = "#{@gem_repo}/quick/#{@b2.full_name}.gemspec.rz"
+ yaml_uri = "#{@gem_repo}quick/#{@b2.full_name}.gemspec.rz"
@fetcher.data[yaml_uri] = util_zip @b2.to_yaml
use_ui @ui do
@@ -595,7 +740,7 @@ class TestGemSourceIndex < RubyGemTestCase
end
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/quick/index.rz", paths.shift
+ assert_equal "#{@gem_repo}quick/index.rz", paths.shift
assert_equal marshal_uri, paths.shift
assert_equal yaml_uri, paths.shift
@@ -609,7 +754,7 @@ class TestGemSourceIndex < RubyGemTestCase
Gem.configuration = Gem::ConfigFile.new([])
quick_index = util_zip @all_gem_names.join("\n")
- @fetcher.data["#{@gem_repo}/quick/index.rz"] = quick_index
+ @fetcher.data["#{@gem_repo}quick/index.rz"] = quick_index
marshal_uri = File.join @gem_repo, "quick", "Marshal.#{@marshal_version}",
"#{@b2.full_name}.gemspec.rz"
@@ -617,7 +762,7 @@ class TestGemSourceIndex < RubyGemTestCase
marshal_data[0] = (Marshal::MAJOR_VERSION - 1).chr
@fetcher.data[marshal_uri] = util_zip marshal_data
- yaml_uri = "#{@gem_repo}/quick/#{@b2.full_name}.gemspec.rz"
+ yaml_uri = "#{@gem_repo}quick/#{@b2.full_name}.gemspec.rz"
@fetcher.data[yaml_uri] = util_zip @b2.to_yaml
use_ui @ui do
@@ -627,7 +772,7 @@ class TestGemSourceIndex < RubyGemTestCase
end
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/quick/index.rz", paths.shift
+ assert_equal "#{@gem_repo}quick/index.rz", paths.shift
assert_equal marshal_uri, paths.shift
assert_equal yaml_uri, paths.shift
@@ -637,14 +782,14 @@ class TestGemSourceIndex < RubyGemTestCase
end
def test_update_subdir
- @gem_repo = @gem_repo + "/subdir"
+ @gem_repo = @gem_repo + 'subdir/'
util_setup_bulk_fetch true
@source_index.gems.replace({})
assert_equal [], @source_index.gems.keys.sort
- uri = @uri.to_s + "/subdir"
+ uri = @uri.to_s + 'subdir/'
use_ui @ui do
@source_index.update uri, true
@@ -656,8 +801,8 @@ class TestGemSourceIndex < RubyGemTestCase
paths = @fetcher.paths
- assert_equal "#{@gem_repo}/quick/index.rz", paths.shift
- assert_equal "#{@gem_repo}/Marshal.#{@marshal_version}.Z", paths.shift
+ assert_equal "#{@gem_repo}quick/index.rz", paths.shift
+ assert_equal "#{@gem_repo}Marshal.#{@marshal_version}.Z", paths.shift
assert paths.empty?, paths.join(', ')
end
@@ -684,9 +829,9 @@ class TestGemSourceIndex < RubyGemTestCase
source_index = @source_index.dump
if compressed then
- @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}.Z"] = util_zip source_index
+ @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}.Z"] = util_zip source_index
else
- @fetcher.data["#{@gem_repo}/Marshal.#{@marshal_version}"] = source_index
+ @fetcher.data["#{@gem_repo}Marshal.#{@marshal_version}"] = source_index
end
end