1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* lib/rubygems: Update to RubyGems master b9213d7. Changes include:

Fixed tests on Windows (I hope) by forcing platform for
  platform-dependent tests.

  Fixed File.exists? warnings.

  Improved testing infrastructure.

* test/rubygems:  ditto.

* test/rdoc/test_rdoc_rubygems_hook.rb:  Switch to util_spec like
  RubyGems.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43651 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
drbrain 2013-11-12 00:16:41 +00:00
parent 8f3934261a
commit 44d0a6dcd7
45 changed files with 1068 additions and 906 deletions

View file

@ -1,3 +1,19 @@
Tue Nov 12 09:16:24 2013 Eric Hodel <drbrain@segment7.net>
* lib/rubygems: Update to RubyGems master b9213d7. Changes include:
Fixed tests on Windows (I hope) by forcing platform for
platform-dependent tests.
Fixed File.exists? warnings.
Improved testing infrastructure.
* test/rubygems: ditto.
* test/rdoc/test_rdoc_rubygems_hook.rb: Switch to util_spec like
RubyGems.
Mon Nov 11 18:31:12 2013 Aman Gupta <ruby@tmm1.net>
* internal.h: move common string/hash flags to include file.

View file

@ -156,6 +156,10 @@ class RDoc::RubygemsHook
args.concat @spec.require_paths
args.concat @spec.extra_rdoc_files
puts
p @spec.extra_rdoc_files
puts
case config_args = Gem.configuration[:rdoc]
when String then
args = args.concat config_args.split

View file

@ -8,7 +8,7 @@
require 'rbconfig'
module Gem
VERSION = '2.2.0.preview.2'
VERSION = '2.2.0'
end
# Must be first since it unloads the prelude from 1.9.2

View file

@ -56,8 +56,6 @@ class Gem::Source
# Returns a Set that can fetch specifications from this source.
def dependency_resolver_set # :nodoc:
uri = api_uri
bundler_api_uri = api_uri + './api/v1/dependencies'
begin

View file

@ -1393,7 +1393,7 @@ class Gem::Specification < Gem::BasicSpecification
# Returns the build_args used to install the gem
def build_args
if File.exists? build_info_file
if File.exist? build_info_file
File.readlines(build_info_file).map { |x| x.strip }
else
[]

View file

@ -30,7 +30,6 @@ require 'fileutils'
require 'tmpdir'
require 'uri'
require 'rubygems/package'
require 'rubygems/test_utilities'
require 'pp'
require 'zlib'
require 'pathname'
@ -84,6 +83,8 @@ end
class Gem::TestCase < MiniTest::Unit::TestCase
attr_accessor :fetcher # :nodoc:
def assert_activate expected, *specs
specs.each do |spec|
case spec
@ -197,7 +198,8 @@ class Gem::TestCase < MiniTest::Unit::TestCase
@orig_gem_path = ENV['GEM_PATH']
@current_dir = Dir.pwd
@ui = Gem::MockGemUi.new
@fetcher = nil
@ui = Gem::MockGemUi.new
tmpdir = File.expand_path Dir.tmpdir
tmpdir.untaint
@ -378,7 +380,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
gem = File.join @tempdir, "gems", "#{spec.full_name}.gem"
unless File.exists? gem
unless File.exist? gem then
use_ui Gem::MockGemUi.new do
Dir.chdir @tempdir do
Gem::Package.build spec
@ -503,28 +505,11 @@ class Gem::TestCase < MiniTest::Unit::TestCase
return spec
end
def quick_spec name, version = '2'
# TODO: deprecate
require 'rubygems/specification'
##
# TODO: remove in RubyGems 3.0
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = name
s.version = version
s.author = 'A User'
s.email = 'example@example.com'
s.homepage = 'http://example.com'
s.summary = "this is a summary"
s.description = "This is a test description"
yield(s) if block_given?
end
spec.loaded_from = spec.spec_file
Gem::Specification.add_spec spec
return spec
def quick_spec name, version = '2' # :nodoc:
util_spec name, version
end
##
@ -561,7 +546,9 @@ class Gem::TestCase < MiniTest::Unit::TestCase
def util_clear_gems
FileUtils.rm_rf File.join(@gemhome, "gems") # TODO: use Gem::Dirs
FileUtils.mkdir File.join(@gemhome, "gems")
FileUtils.rm_rf File.join(@gemhome, "specifications")
FileUtils.mkdir File.join(@gemhome, "specifications")
Gem::Specification.reset
end
@ -612,10 +599,11 @@ class Gem::TestCase < MiniTest::Unit::TestCase
end
##
# Create a new spec (or gem if passed an array of files) and set it
# up properly. Use this instead of util_spec and util_gem.
# new_spec is deprecated as it is never used.
#
# TODO: remove in RubyGems 3.0
def new_spec name, version, deps = nil, *files
def new_spec name, version, deps = nil, *files # :nodoc:
require 'rubygems/specification'
spec = Gem::Specification.new do |s|
@ -656,7 +644,8 @@ class Gem::TestCase < MiniTest::Unit::TestCase
end
def new_default_spec(name, version, deps = nil, *files)
spec = new_spec(name, version, deps)
spec = util_spec name, version, deps
spec.loaded_from = File.join(@default_spec_dir, spec.spec_name)
spec.files = files
@ -674,24 +663,38 @@ class Gem::TestCase < MiniTest::Unit::TestCase
end
##
# Creates a spec with +name+, +version+ and +deps+.
# Creates a spec with +name+, +version+. +deps+ can specify the dependency
# or a +block+ can be given for full customization of the specification.
def util_spec(name, version, deps = nil, &block)
# TODO: deprecate
raise "deps or block, not both" if deps and block
def util_spec name, version = 2, deps = nil # :yields: specification
raise "deps or block, not both" if deps and block_given?
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = name
s.version = version
s.author = 'A User'
s.email = 'example@example.com'
s.homepage = 'http://example.com'
s.summary = "this is a summary"
s.description = "This is a test description"
yield s if block_given?
end
if deps then
block = proc do |s|
# Since Hash#each is unordered in 1.8, sort
# the keys and iterate that way so the tests are
# deteriminstic on all implementations.
deps.keys.sort.each do |n|
s.add_dependency n, (deps[n] || '>= 0')
end
# Since Hash#each is unordered in 1.8, sort the keys and iterate that
# way so the tests are deterministic on all implementations.
deps.keys.sort.each do |n|
spec.add_dependency n, (deps[n] || '>= 0')
end
end
quick_spec(name, version, &block)
spec.loaded_from = spec.spec_file
Gem::Specification.add_spec spec
return spec
end
##
@ -1132,38 +1135,8 @@ Also, a list:
# end
def spec_fetcher
gems = {}
fetcher = Object.new
fetcher.instance_variable_set :@test, self
fetcher.instance_variable_set :@gems, gems
def fetcher.gem name, version, dependencies = nil, &block
spec, gem = @test.util_gem name, version, dependencies, &block
@gems[spec] = gem
spec
end
def fetcher.spec name, version, dependencies = nil, &block
spec = @test.util_spec name, version, dependencies, &block
@gems[spec] = nil
spec
end
yield fetcher
util_setup_fake_fetcher unless @fetcher
util_setup_spec_fetcher(*gems.keys)
gems.each do |spec, gem|
next unless gem
@fetcher.data["http://gems.example.com/gems/#{spec.file_name}"] =
Gem.read_binary(gem)
Gem::TestCase::SpecFetcherSetup.declare self do |spec_fetcher_setup|
yield spec_fetcher_setup if block_given?
end
end
@ -1318,3 +1291,6 @@ Also, a list:
end if defined?(OpenSSL::SSL)
end
require 'rubygems/test_utilities'

View file

@ -159,6 +159,164 @@ class Gem::RemoteFetcher
end
# :startdoc:
##
# The SpecFetcherSetup allows easy setup of a remote source in RubyGems tests:
#
# spec_fetcher do |f|
# f.gem 'a', 1
# f.spec 'a', 2
# f.gem 'b', 1' 'a' => '~> 1.0'
# f.clear
# end
#
# The above declaration creates two gems, a-1 and b-1, with a dependency from
# b to a. The declaration creates an additional spec a-2, but no gem for it
# (so it cannot be installed).
#
# After the gems are created they are removed from Gem.dir.
class Gem::TestCase::SpecFetcherSetup
##
# Executes a SpecFetcher setup block. Yields an instance then creates the
# gems and specifications defined in the instance.
def self.declare test
setup = new test
yield setup
setup.execute
end
def initialize test # :nodoc:
@test = test
@gems = {}
@installed = []
@operations = []
end
##
# Removes any created gems or specifications from Gem.dir (the default
# install location).
def clear
@operations << [:clear]
end
def created_specs
created = {}
@gems.keys.each do |spec|
created[spec.full_name] = spec
end
created
end
##
# Creates any defined gems or specifications
def execute # :nodoc:
execute_operations
setup_fetcher
created_specs
end
def execute_operations # :nodoc:
@operations.each do |operation, *arguments|
case operation
when :clear then
@test.util_clear_gems
@installed.clear
when :gem then
spec, gem = @test.util_gem(*arguments, &arguments.pop)
write_spec spec
@gems[spec] = gem
@installed << spec
when :spec then
spec = @test.util_spec(*arguments, &arguments.pop)
write_spec spec
@gems[spec] = nil
@installed << spec
end
end
end
##
# Creates a gem with +name+, +version+ and +deps+. The created gem can be
# downloaded and installed.
#
# The specification will be yielded before gem creation for customization,
# but only the block or the dependencies may be set, not both.
def gem name, version, dependencies = nil, &block
@operations << [:gem, name, version, dependencies, block]
end
##
# Creates a legacy platform spec with the name 'pl' and version 1
def legacy_platform
spec 'pl', 1 do |s|
s.platform = Gem::Platform.new 'i386-linux'
s.instance_variable_set :@original_platform, 'i386-linux'
end
end
def setup_fetcher # :nodoc;
require 'zlib'
require 'socket'
require 'rubygems/remote_fetcher'
@test.fetcher = Gem::FakeFetcher.new
Gem::RemoteFetcher.fetcher = @test.fetcher
Gem::Specification.reset
@test.util_setup_spec_fetcher(*@gems.keys)
# This works around util_setup_spec_fetcher adding all created gems to the
# installed set.
Gem::Specification.reset
Gem::Specification.add_specs(*@installed)
@gems.each do |spec, gem|
next unless gem
@test.fetcher.data["http://gems.example.com/gems/#{spec.file_name}"] =
Gem.read_binary(gem)
FileUtils.cp gem, spec.cache_file
end
end
##
# Creates a spec with +name+, +version+ and +deps+. The created gem can be
# downloaded and installed.
#
# The specification will be yielded before creation for customization,
# but only the block or the dependencies may be set, not both.
def spec name, version, dependencies = nil, &block
@operations << [:spec, name, version, dependencies, block]
end
def write_spec spec # :nodoc:
open spec.spec_file, 'w' do |io|
io.write spec.to_ruby_for_cache
end
end
end
##
# A StringIO duck-typed class that uses Tempfile instead of String as the
# backing store.

View file

@ -10,7 +10,7 @@ class TestRDocRubygemsHook < Gem::TestCase
skip 'requires RubyGems 1.9+' unless
Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.9')
@a = quick_spec 'a' do |s|
@a = util_spec 'a' do |s|
s.rdoc_options = %w[--main MyTitle]
s.extra_rdoc_files = %w[README]
end

View file

@ -116,7 +116,7 @@ class TestGem < Gem::TestCase
end
def test_self_bin_path_nonexistent_binfile
quick_spec 'a', '2' do |s|
util_spec 'a', '2' do |s|
s.executables = ['exec']
end
assert_raises(Gem::GemNotFoundException) do
@ -125,7 +125,7 @@ class TestGem < Gem::TestCase
end
def test_self_bin_path_no_bin_file
quick_spec 'a', '1'
util_spec 'a', '1'
assert_raises(ArgumentError) do
Gem.bin_path('a', nil, '1')
end
@ -139,7 +139,7 @@ class TestGem < Gem::TestCase
def test_self_bin_path_bin_file_gone_in_latest
util_exec_gem
quick_spec 'a', '10' do |s|
util_spec 'a', '10' do |s|
s.executables = []
end
# Should not find a-10's non-abin (bug)
@ -183,7 +183,7 @@ class TestGem < Gem::TestCase
fp.puts 'blah'
end
foo = quick_spec 'foo' do |s| s.files = %w[data/foo.txt] end
foo = util_spec 'foo' do |s| s.files = %w[data/foo.txt] end
install_gem foo
end
@ -420,17 +420,15 @@ class TestGem < Gem::TestCase
end
def test_self_latest_spec_for
a2 = nil
spec_fetcher do |fetcher|
gems = spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', '3.a'
a2 = fetcher.spec 'a', 2
fetcher.spec 'a', 2
end
spec = Gem.latest_spec_for 'a'
assert_equal a2, spec
assert_equal gems['a-2'], spec
end
def test_self_latest_rubygems_version
@ -458,7 +456,7 @@ class TestGem < Gem::TestCase
end
def test_self_loaded_specs
foo = quick_spec 'foo'
foo = util_spec 'foo'
install_gem foo
foo.activate
@ -959,13 +957,13 @@ class TestGem < Gem::TestCase
fp.puts "class TestGem; PLUGINS_LOADED << 'plugin'; end"
end
foo1 = quick_spec 'foo', '1' do |s|
foo1 = util_spec 'foo', '1' do |s|
s.files << plugin_path
end
install_gem foo1
foo2 = quick_spec 'foo', '2' do |s|
foo2 = util_spec 'foo', '2' do |s|
s.files << plugin_path
end
@ -1275,7 +1273,7 @@ class TestGem < Gem::TestCase
end
def util_exec_gem
spec, _ = quick_spec 'a', '4' do |s|
spec, _ = util_spec 'a', '4' do |s|
s.executables = ['exec', 'abin']
end

View file

@ -7,7 +7,7 @@ class TestGemCommandsBuildCommand < Gem::TestCase
def setup
super
@gem = quick_spec 'some_gem' do |s|
@gem = util_spec 'some_gem' do |s|
s.rubyforge_project = 'example'
end

View file

@ -8,8 +8,8 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
@cmd = Gem::Commands::CleanupCommand.new
@a_1 = quick_spec 'a', 1
@a_2 = quick_spec 'a', 2
@a_1 = util_spec 'a', 1
@a_2 = util_spec 'a', 2
install_gem @a_1
install_gem @a_2
@ -39,8 +39,8 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
end
def test_execute_all_dependencies
@b_1 = quick_spec 'b', 1 do |s| s.add_dependency 'a', '1' end
@b_2 = quick_spec 'b', 2 do |s| s.add_dependency 'a', '2' end
@b_1 = util_spec 'b', 1 do |s| s.add_dependency 'a', '1' end
@b_2 = util_spec 'b', 2 do |s| s.add_dependency 'a', '2' end
install_gem @b_1
install_gem @b_2
@ -60,8 +60,8 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
Gem.use_paths @gemhome, gemhome2
@b_1 = quick_spec 'b', 1
@b_2 = quick_spec 'b', 2
@b_1 = util_spec 'b', 1
@b_2 = util_spec 'b', 2
install_gem @b_1
install_gem @b_2
@ -78,7 +78,7 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
end
def test_execute_all_user
@a_1_1 = quick_spec 'a', '1.1'
@a_1_1 = util_spec 'a', '1.1'
@a_1_1 = install_gem_user @a_1_1 # pick up user install path
Gem::Specification.dirs = [Gem.dir, Gem.user_dir]
@ -97,7 +97,7 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
def test_execute_all_user_no_sudo
FileUtils.chmod 0555, @gemhome
@a_1_1 = quick_spec 'a', '1.1'
@a_1_1 = util_spec 'a', '1.1'
@a_1_1 = install_gem_user @a_1_1 # pick up user install path
Gem::Specification.dirs = [Gem.dir, Gem.user_dir]
@ -125,10 +125,10 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
end
def test_execute_keeps_older_versions_with_deps
@b_1 = quick_spec 'b', 1
@b_2 = quick_spec 'b', 2
@b_1 = util_spec 'b', 1
@b_2 = util_spec 'b', 2
@c = quick_spec 'c', 1 do |s|
@c = util_spec 'c', 1 do |s|
s.add_dependency 'b', '1'
end
@ -146,9 +146,9 @@ class TestGemCommandsCleanupCommand < Gem::TestCase
def test_execute_ignore_default_gem_verbose
Gem.configuration.verbose = :really
@b_1 = quick_spec 'b', 1
@b_1 = util_spec 'b', 1
@b_default = new_default_spec "b", "2"
@b_2 = quick_spec 'b', 3
@b_2 = util_spec 'b', 3
install_gem @b_1
install_default_specs @b_default

View file

@ -8,8 +8,6 @@ class TestGemCommandsDependencyCommand < Gem::TestCase
@cmd = Gem::Commands::DependencyCommand.new
@cmd.options[:domain] = :local
util_setup_fake_fetcher true
end
def test_execute
@ -30,6 +28,13 @@ class TestGemCommandsDependencyCommand < Gem::TestCase
end
def test_execute_no_args
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', '2.a'
fetcher.spec 'dep_x', 1, 'x' => '>= 1'
fetcher.legacy_platform
end
@cmd.options[:args] = []
use_ui @ui do
@ -41,23 +46,11 @@ Gem a-1
Gem a-2.a
Gem a-2
Gem a-3.a
Gem a_evil-9
Gem b-2
Gem c-1.2
Gem dep_x-1
x (>= 1)
Gem pl-1-x86-linux
Gem x-1
EOF
assert_equal expected, @ui.output
@ -78,7 +71,7 @@ Gem x-1
end
def test_execute_pipe_format
quick_spec 'foo' do |gem|
util_spec 'foo' do |gem|
gem.add_dependency 'bar', '> 1'
end
@ -94,6 +87,13 @@ Gem x-1
end
def test_execute_regexp
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', '2.a'
fetcher.spec 'a_evil', 9
fetcher.spec 'b', 2
end
@cmd.options[:args] = %w[/[ab]/]
use_ui @ui do
@ -105,10 +105,6 @@ Gem a-1
Gem a-2.a
Gem a-2
Gem a-3.a
Gem a_evil-9
Gem b-2
@ -187,7 +183,10 @@ ERROR: Only reverse dependencies for local gems are supported.
@fetcher = Gem::FakeFetcher.new
Gem::RemoteFetcher.fetcher = @fetcher
util_setup_spec_fetcher @a1, @a2
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', 2
end
@cmd.options[:args] = %w[a]
@cmd.options[:domain] = :remote
@ -202,11 +201,9 @@ ERROR: Only reverse dependencies for local gems are supported.
end
def test_execute_prerelease
@fetcher = Gem::FakeFetcher.new
Gem::RemoteFetcher.fetcher = @fetcher
util_clear_gems
util_setup_spec_fetcher @a2_pre
spec_fetcher do |fetcher|
fetcher.spec 'a', '2.a'
end
@cmd.options[:args] = %w[a]
@cmd.options[:domain] = :remote

View file

@ -12,15 +12,13 @@ class TestGemCommandsFetchCommand < Gem::TestCase
end
def test_execute
util_setup_fake_fetcher
util_setup_spec_fetcher @a2
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
File.read(@a2.cache_file)
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 2
end
refute_path_exists File.join(@tempdir, 'cache'), 'sanity check'
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
Dir.chdir @tempdir do
@ -28,24 +26,23 @@ class TestGemCommandsFetchCommand < Gem::TestCase
end
end
assert_path_exists(File.join(@tempdir, @a2.file_name),
"#{@a2.full_name} not fetched")
a2 = specs['a-2']
assert_path_exists(File.join(@tempdir, a2.file_name),
"#{a2.full_name} not fetched")
refute_path_exists File.join(@tempdir, 'cache'),
'gem repository directories must not be created'
end
def test_execute_latest
util_setup_fake_fetcher
util_setup_spec_fetcher @a1, @a2
@fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] =
File.read(@a1.cache_file)
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
File.read(@a2.cache_file)
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 1
fetcher.gem 'a', 2
end
refute_path_exists File.join(@tempdir, 'cache'), 'sanity check'
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
@cmd.options[:version] = req('>= 0.1')
use_ui @ui do
@ -54,23 +51,20 @@ class TestGemCommandsFetchCommand < Gem::TestCase
end
end
assert_path_exists(File.join(@tempdir, @a2.file_name),
"#{@a2.full_name} not fetched")
a2 = specs['a-2']
assert_path_exists(File.join(@tempdir, a2.file_name),
"#{a2.full_name} not fetched")
refute_path_exists File.join(@tempdir, 'cache'),
'gem repository directories must not be created'
end
def test_execute_prerelease
util_setup_fake_fetcher true
util_clear_gems
util_setup_spec_fetcher @a2, @a2_pre
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 2
fetcher.gem 'a', '2.a'
end
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
File.read(@a2.cache_file)
@fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] =
File.read(@a2_pre.cache_file)
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
@cmd.options[:prerelease] = true
use_ui @ui do
@ -79,21 +73,19 @@ class TestGemCommandsFetchCommand < Gem::TestCase
end
end
assert_path_exists(File.join(@tempdir, @a2.file_name),
"#{@a2.full_name} not fetched")
a2 = specs['a-2']
assert_path_exists(File.join(@tempdir, a2.file_name),
"#{a2.full_name} not fetched")
end
def test_execute_specific_prerelease
util_setup_fake_fetcher true
util_clear_gems
util_setup_spec_fetcher @a2, @a2_pre
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 2
fetcher.gem 'a', '2.a'
end
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
File.read(@a2.cache_file)
@fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] =
File.read(@a2_pre.cache_file)
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
@cmd.options[:prerelease] = true
@cmd.options[:version] = "2.a"
@ -103,18 +95,19 @@ class TestGemCommandsFetchCommand < Gem::TestCase
end
end
assert_path_exists(File.join(@tempdir, @a2_pre.file_name),
"#{@a2_pre.full_name} not fetched")
a2_pre = specs['a-2.a']
assert_path_exists(File.join(@tempdir, a2_pre.file_name),
"#{a2_pre.full_name} not fetched")
end
def test_execute_version
util_setup_fake_fetcher
util_setup_spec_fetcher @a1, @a2
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 1
fetcher.gem 'a', 2
end
@fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] =
File.read(@a1.cache_file)
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
@cmd.options[:version] = Gem::Requirement.new '1'
use_ui @ui do
@ -123,8 +116,10 @@ class TestGemCommandsFetchCommand < Gem::TestCase
end
end
assert_path_exists(File.join(@tempdir, @a1.file_name),
"#{@a1.full_name} not fetched")
a1 = specs['a-1']
assert_path_exists(File.join(@tempdir, a1.file_name),
"#{a1.full_name} not fetched")
end
end

View file

@ -27,15 +27,12 @@ class TestGemCommandsInstallCommand < Gem::TestCase
end
def test_execute_exclude_prerelease
util_setup_fake_fetcher :prerelease
util_setup_spec_fetcher
spec_fetcher do |fetcher|
fetcher.gem 'a', 2
fetcher.gem 'a', '2.pre'
end
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
read_binary(@a2.cache_file)
@fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] =
read_binary(@a2_pre.cache_file)
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
@ -47,18 +44,17 @@ class TestGemCommandsInstallCommand < Gem::TestCase
end
def test_execute_explicit_version_includes_prerelease
util_setup_fake_fetcher :prerelease
util_setup_spec_fetcher
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 2
fetcher.gem 'a', '2.a'
end
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
read_binary(@a2.cache_file)
@fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] =
read_binary(@a2_pre.cache_file)
a2_pre = specs['a-2.a']
@cmd.handle_options [@a2_pre.name, '--version', @a2_pre.version.to_s,
@cmd.handle_options [a2_pre.name, '--version', a2_pre.version.to_s,
"--no-ri", "--no-rdoc"]
assert @cmd.options[:prerelease]
assert @cmd.options[:version].satisfied_by?(@a2_pre.version)
assert @cmd.options[:version].satisfied_by?(a2_pre.version)
use_ui @ui do
assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
@ -70,12 +66,15 @@ class TestGemCommandsInstallCommand < Gem::TestCase
end
def test_execute_local
util_setup_fake_fetcher
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 2
end
@cmd.options[:domain] = :local
FileUtils.mv @a2.cache_file, @tempdir
FileUtils.mv specs['a-2'].cache_file, @tempdir
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
orig_dir = Dir.pwd
@ -97,12 +96,15 @@ class TestGemCommandsInstallCommand < Gem::TestCase
def test_execute_no_user_install
skip 'skipped on MS Windows (chmod has no effect)' if win_platform?
util_setup_fake_fetcher
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 2
end
@cmd.options[:user_install] = false
FileUtils.mv @a2.cache_file, @tempdir
FileUtils.mv specs['a-2'].cache_file, @tempdir
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
orig_dir = Dir.pwd
@ -122,7 +124,8 @@ class TestGemCommandsInstallCommand < Gem::TestCase
end
def test_execute_local_missing
util_setup_fake_fetcher
spec_fetcher
@cmd.options[:domain] = :local
@cmd.options[:args] = %w[no_such_gem]
@ -147,8 +150,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase
end
def test_execute_nonexistent
util_setup_fake_fetcher
util_setup_spec_fetcher
spec_fetcher
@cmd.options[:args] = %w[nonexistent]
@ -163,8 +165,7 @@ class TestGemCommandsInstallCommand < Gem::TestCase
end
def test_execute_bad_source
util_setup_fake_fetcher
util_setup_spec_fetcher
spec_fetcher
# This is needed because we need to exercise the cache path
# within SpecFetcher
@ -197,8 +198,9 @@ class TestGemCommandsInstallCommand < Gem::TestCase
misspelled = "nonexistent_with_hint"
correctly_spelled = "non_existent_with_hint"
util_setup_fake_fetcher
util_setup_spec_fetcher quick_spec(correctly_spelled, '2')
spec_fetcher do |fetcher|
fetcher.spec correctly_spelled, 2
end
@cmd.options[:args] = [misspelled]
@ -221,8 +223,10 @@ ERROR: Possible alternatives: non_existent_with_hint
misspelled = "non-existent_with-hint"
correctly_spelled = "nonexistent-with_hint"
util_setup_fake_fetcher
util_setup_spec_fetcher quick_spec(correctly_spelled, '2')
spec_fetcher do |fetcher|
fetcher.spec correctly_spelled, 2
fetcher.clear
end
@cmd.options[:args] = [misspelled]
@ -257,17 +261,13 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_prerelease_skipped_when_no_flag_set
util_setup_fake_fetcher :prerelease
util_clear_gems
util_setup_spec_fetcher @a1, @a2_pre
@fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] =
read_binary(@a1.cache_file)
@fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] =
read_binary(@a2_pre.cache_file)
spec_fetcher do |fetcher|
fetcher.gem 'a', 1
fetcher.gem 'a', '3.a'
end
@cmd.options[:prerelease] = false
@cmd.options[:args] = [@a2_pre.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
@ -279,17 +279,14 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_prerelease_wins_over_previous_ver
util_setup_fake_fetcher :prerelease
util_clear_gems
util_setup_spec_fetcher @a1, @a2_pre
@fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] =
read_binary(@a1.cache_file)
@fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] =
read_binary(@a2_pre.cache_file)
spec_fetcher do |fetcher|
fetcher.gem 'a', 1
fetcher.gem 'a', '2.a'
fetcher.clear
end
@cmd.options[:prerelease] = true
@cmd.options[:args] = [@a2_pre.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
@ -301,17 +298,13 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_prerelease_skipped_when_non_pre_available
util_setup_fake_fetcher :prerelease
util_clear_gems
util_setup_spec_fetcher @a2, @a2_pre
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
read_binary(@a2.cache_file)
@fetcher.data["#{@gem_repo}gems/#{@a2_pre.file_name}"] =
read_binary(@a2_pre.cache_file)
spec_fetcher do |fetcher|
fetcher.gem 'a', '2.pre'
fetcher.gem 'a', 2
end
@cmd.options[:prerelease] = true
@cmd.options[:args] = [@a2_pre.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
@ -323,16 +316,19 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_rdoc
util_setup_fake_fetcher
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 2
end
Gem.done_installing(&Gem::RDoc.method(:generation_hook))
@cmd.options[:document] = %w[rdoc ri]
@cmd.options[:domain] = :local
FileUtils.mv @a2.cache_file, @tempdir
a2 = specs['a-2']
FileUtils.mv a2.cache_file, @tempdir
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
# Don't use Dir.chdir with a block, it warnings a lot because
@ -351,22 +347,25 @@ ERROR: Possible alternatives: non_existent_with_hint
wait_for_child_process_to_exit
assert_path_exists File.join(@a2.doc_dir, 'ri')
assert_path_exists File.join(@a2.doc_dir, 'rdoc')
assert_path_exists File.join(a2.doc_dir, 'ri')
assert_path_exists File.join(a2.doc_dir, 'rdoc')
end
def test_execute_saves_build_args
util_setup_fake_fetcher
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 2
end
args = %w!--with-awesome=true --more-awesome=yes!
Gem::Command.build_args = args
a2 = specs['a-2']
FileUtils.mv a2.cache_file, @tempdir
@cmd.options[:domain] = :local
FileUtils.mv @a2.cache_file, @tempdir
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
# Don't use Dir.chdir with a block, it warnings a lot because
@ -383,21 +382,19 @@ ERROR: Possible alternatives: non_existent_with_hint
end
end
path = @a2.build_info_file
path = a2.build_info_file
assert_path_exists path
assert_equal args, @a2.build_args
assert_equal args, a2.build_args
end
def test_execute_remote
util_setup_fake_fetcher
util_setup_spec_fetcher
spec_fetcher do |fetcher|
fetcher.gem 'a', 2
end
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
read_binary(@a2.cache_file)
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
@ -411,17 +408,22 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_remote_ignores_files
util_setup_fake_fetcher
util_setup_spec_fetcher
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 1
fetcher.gem 'a', 2
end
@cmd.options[:domain] = :remote
FileUtils.mv @a2.cache_file, @tempdir
a1 = specs['a-1']
a2 = specs['a-2']
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
read_binary(@a1.cache_file)
FileUtils.mv a2.cache_file, @tempdir
@cmd.options[:args] = [@a2.name]
@fetcher.data["#{@gem_repo}gems/#{a2.file_name}"] =
read_binary(a1.cache_file)
@cmd.options[:args] = [a2.name]
gemdir = File.join @gemhome, 'specifications'
@ -451,14 +453,17 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_two
util_setup_fake_fetcher
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 2
fetcher.gem 'b', 2
end
FileUtils.mv specs['a-2'].cache_file, @tempdir
FileUtils.mv specs['b-2'].cache_file, @tempdir
@cmd.options[:domain] = :local
FileUtils.mv @a2.cache_file, @tempdir
FileUtils.mv @b2.cache_file, @tempdir
@cmd.options[:args] = [@a2.name, @b2.name]
@cmd.options[:args] = %w[a b]
use_ui @ui do
orig_dir = Dir.pwd
@ -498,17 +503,17 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_conservative
util_setup_fake_fetcher
util_setup_spec_fetcher
spec_fetcher do |fetcher|
fetcher.gem 'b', 2
@fetcher.data["#{@gem_repo}gems/#{@b2.file_name}"] =
read_binary(@b2.cache_file)
fetcher.clear
uninstall_gem(@b2)
fetcher.gem 'a', 2
end
@cmd.options[:conservative] = true
@cmd.options[:args] = [@a2.name, @b2.name]
@cmd.options[:args] = %w[a b]
use_ui @ui do
orig_dir = Dir.pwd
@ -529,14 +534,14 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_parses_requirement_from_gemname
util_setup_fake_fetcher
spec_fetcher do |fetcher|
fetcher.gem 'a', 2
fetcher.gem 'b', 2
end
@cmd.options[:domain] = :local
FileUtils.mv @a2.cache_file, @tempdir
FileUtils.mv @b2.cache_file, @tempdir
req = "#{@a2.name}:10.0"
req = "a:10.0"
@cmd.options[:args] = [req]
@ -581,15 +586,14 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_show_source_problems_even_on_success
util_setup_fake_fetcher
util_setup_spec_fetcher
spec_fetcher do |fetcher|
fetcher.gem 'a', 2
fetcher.clear
end
Gem.sources << "http://nonexistent.example"
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
read_binary(@a2.cache_file)
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
assert_raises Gem::MockGemUi::SystemExitException, @ui.error do
@ -608,11 +612,9 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_uses_from_a_gemdeps
util_setup_fake_fetcher
util_setup_spec_fetcher
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
read_binary(@a2.cache_file)
spec_fetcher do |fetcher|
fetcher.gem 'a', 2
end
File.open @gemdeps, "w" do |f|
f << "gem 'a'"
@ -632,12 +634,10 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_installs_from_a_gemdeps
util_setup_fake_fetcher
util_setup_spec_fetcher @a2
util_clear_gems
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] =
read_binary(@a2.cache_file)
spec_fetcher do |fetcher|
fetcher.gem 'a', 2
fetcher.clear
end
File.open @gemdeps, "w" do |f|
f << "gem 'a'"
@ -657,15 +657,11 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_installs_deps_a_gemdeps
q, q_gem = util_gem 'q', '1.0'
r, r_gem = util_gem 'r', '2.0', 'q' => nil
util_setup_fake_fetcher
util_setup_spec_fetcher q, r
util_clear_gems
add_to_fetcher q, q_gem
add_to_fetcher r, r_gem
spec_fetcher do |fetcher|
fetcher.gem 'q', '1.0'
fetcher.gem 'r', '2.0', 'q' => nil
fetcher.clear
end
File.open @gemdeps, "w" do |f|
f << "gem 'r'"
@ -688,16 +684,13 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_uses_deps_a_gemdeps
q, _ = util_gem 'q', '1.0'
r, r_gem = util_gem 'r', '2.0', 'q' => nil
spec_fetcher do |fetcher|
fetcher.gem 'r', '2.0', 'q' => nil
util_setup_fake_fetcher
util_setup_spec_fetcher q, r
util_clear_gems
fetcher.clear
add_to_fetcher r, r_gem
Gem::Specification.add_specs q
fetcher.spec 'q', '1.0'
end
File.open @gemdeps, "w" do |f|
f << "gem 'r'"
@ -720,15 +713,11 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_installs_deps_a_gemdeps_into_a_path
q, q_gem = util_gem 'q', '1.0'
r, r_gem = util_gem 'r', '2.0', 'q' => nil
util_setup_fake_fetcher
util_setup_spec_fetcher q, r
util_clear_gems
add_to_fetcher q, q_gem
add_to_fetcher r, r_gem
spec_fetcher do |fetcher|
fetcher.gem 'q', '1.0'
fetcher.gem 'r', '2.0', 'q' => nil
fetcher.clear
end
File.open @gemdeps, "w" do |f|
f << "gem 'r'"
@ -755,17 +744,13 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_with_gemdeps_path_ignores_system
q, q_gem = util_gem 'q', '1.0'
r, r_gem = util_gem 'r', '2.0', 'q' => nil
specs = spec_fetcher do |fetcher|
fetcher.gem 'q', '1.0'
fetcher.gem 'r', '2.0', 'q' => nil
fetcher.clear
end
util_setup_fake_fetcher
util_setup_spec_fetcher q, r
util_clear_gems
add_to_fetcher q, q_gem
add_to_fetcher r, r_gem
Gem::Specification.add_specs q
Gem::Specification.add_specs specs['q-1.0']
File.open @gemdeps, "w" do |f|
f << "gem 'r'"
@ -792,16 +777,12 @@ ERROR: Possible alternatives: non_existent_with_hint
end
def test_execute_uses_deps_a_gemdeps_with_a_path
q, q_gem = util_gem 'q', '1.0'
r, r_gem = util_gem 'r', '2.0', 'q' => nil
specs = spec_fetcher do |fetcher|
fetcher.gem 'q', '1.0'
fetcher.gem 'r', '2.0', 'q' => nil
end
util_setup_fake_fetcher
util_setup_spec_fetcher q, r
util_clear_gems
add_to_fetcher r, r_gem
i = Gem::Installer.new q_gem, :install_dir => "gf-path"
i = Gem::Installer.new specs['q-1.0'].cache_file, :install_dir => "gf-path"
i.install
assert File.file?("gf-path/specifications/q-1.0.gemspec"), "not installed"

View file

@ -8,9 +8,9 @@ class TestGemCommandsListCommand < Gem::TestCase
@cmd = Gem::Commands::ListCommand.new
util_setup_fake_fetcher
@si = util_setup_spec_fetcher @a1, @a2, @pl1
spec_fetcher do |fetcher|
fetcher.spec 'c', 1
end
@fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] = proc do
raise Gem::RemoteFetcher::FetchError

View file

@ -17,13 +17,11 @@ class TestGemCommandsOutdatedCommand < Gem::TestCase
spec_fetcher do |fetcher|
fetcher.spec 'foo', '1.0'
fetcher.spec 'foo', '2.0'
fetcher.clear
fetcher.gem 'foo', '0.1'
fetcher.gem 'foo', '0.2'
end
quick_gem 'foo', '0.1'
quick_gem 'foo', '0.2'
Gem::Specification.reset
use_ui @ui do
@cmd.execute
end

View file

@ -9,7 +9,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
end
def test_execute
a = quick_spec 'a' do |s|
a = util_spec 'a' do |s|
s.executables = %w[foo]
s.files = %w[bin/foo lib/a.rb]
end
@ -51,7 +51,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
end
def test_execute_all
a = quick_spec 'a' do |s| s.executables = %w[foo] end
a = util_spec 'a' do |s| s.executables = %w[foo] end
write_file File.join(@tempdir, 'bin', 'foo') do |fp|
fp.puts "#!/usr/bin/ruby"
end
@ -81,7 +81,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
end
def test_execute_env_shebang
a = quick_spec 'a' do |s|
a = util_spec 'a' do |s|
s.executables = %w[foo]
s.files = %w[bin/foo]
end
@ -111,7 +111,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
end
def test_execute_extensions_explicit
a = quick_spec 'a' do |s| s.extensions << 'ext/a/extconf.rb' end
a = util_spec 'a' do |s| s.extensions << 'ext/a/extconf.rb' end
ext_path = File.join @tempdir, 'ext', 'a', 'extconf.rb'
write_file ext_path do |io|
@ -124,7 +124,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
RUBY
end
b = quick_spec 'b'
b = util_spec 'b'
install_gem a
install_gem b
@ -147,7 +147,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
end
def test_execute_no_extension
a = quick_spec 'a' do |s| s.extensions << 'ext/a/extconf.rb' end
a = util_spec 'a' do |s| s.extensions << 'ext/a/extconf.rb' end
ext_path = File.join @tempdir, 'ext', 'a', 'extconf.rb'
write_file ext_path do |io|
@ -172,7 +172,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
end
def test_execute_with_extension_with_build_args
a = quick_spec 'a' do |s| s.extensions << 'ext/a/extconf.rb' end
a = util_spec 'a' do |s| s.extensions << 'ext/a/extconf.rb' end
ext_path = File.join @tempdir, 'ext', 'a', 'extconf.rb'
write_file ext_path do |io|
@ -205,8 +205,8 @@ class TestGemCommandsPristineCommand < Gem::TestCase
end
def test_execute_many
a = quick_spec 'a'
b = quick_spec 'b'
a = util_spec 'a'
b = util_spec 'b'
install_gem a
install_gem b
@ -226,14 +226,14 @@ class TestGemCommandsPristineCommand < Gem::TestCase
end
def test_execute_many_multi_repo
a = quick_spec 'a'
a = util_spec 'a'
install_gem a
Gem.clear_paths
gemhome2 = File.join @tempdir, 'gemhome2'
Gem.paths = { "GEM_PATH" => [gemhome2, @gemhome], "GEM_HOME" => gemhome2 }
b = quick_spec 'b'
b = util_spec 'b'
install_gem b
@cmd.options[:args] = %w[a b]
@ -256,24 +256,14 @@ class TestGemCommandsPristineCommand < Gem::TestCase
end
def test_execute_missing_cache_gem
a_2 = quick_spec 'a', 2
a_3 = quick_spec 'a', 3
install_gem a_2
install_gem a_3
a_2_data = nil
open File.join(@gemhome, 'cache', a_2.file_name), 'rb' do |fp|
a_2_data = fp.read
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 1
fetcher.gem 'a', 2
fetcher.gem 'a', 3
fetcher.gem 'a', '3.a'
end
util_setup_fake_fetcher
util_setup_spec_fetcher a_2
url = "http://gems.example.com/gems/#{a_2.file_name}"
Gem::RemoteFetcher.fetcher.data[url] = a_2_data
FileUtils.rm a_2.cache_file
FileUtils.rm specs['a-2'].cache_file
@cmd.options[:args] = %w[a]
@ -310,7 +300,7 @@ class TestGemCommandsPristineCommand < Gem::TestCase
end
def test_execute_only_executables
a = quick_spec 'a' do |s|
a = util_spec 'a' do |s|
s.executables = %w[foo]
s.files = %w[bin/foo lib/a.rb]
end

View file

@ -8,9 +8,11 @@ class TestGemCommandsQueryCommand < Gem::TestCase
@cmd = Gem::Commands::QueryCommand.new
util_setup_fake_fetcher
util_clear_gems
util_setup_spec_fetcher @a1, @a2, @pl1, @a3a
@specs = spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', 2
fetcher.spec 'a', '3.a'
end
@fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] = proc do
raise Gem::RemoteFetcher::FetchError
@ -18,6 +20,10 @@ class TestGemCommandsQueryCommand < Gem::TestCase
end
def test_execute
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.handle_options %w[-r]
use_ui @ui do
@ -37,13 +43,18 @@ pl (1 i386-linux)
end
def test_execute_platform
@a1r = @a1.dup
spec_fetcher do |fetcher|
fetcher.clear
@a1.platform = 'x86-linux'
@a2.platform = 'universal-darwin'
fetcher.spec 'a', 1
fetcher.spec 'a', 1 do |s|
s.platform = 'x86-linux'
end
util_clear_gems
util_setup_spec_fetcher @a1, @a1r, @a2, @b2, @pl1
fetcher.spec 'a', 2 do |s|
s.platform = 'universal-darwin'
end
end
@cmd.handle_options %w[-r -a]
@ -56,8 +67,6 @@ pl (1 i386-linux)
*** REMOTE GEMS ***
a (2 universal-darwin, 1 ruby x86-linux)
b (2)
pl (1 i386-linux)
EOF
assert_equal expected, @ui.output
@ -65,6 +74,10 @@ pl (1 i386-linux)
end
def test_execute_all
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.handle_options %w[-r --all]
use_ui @ui do
@ -84,6 +97,10 @@ pl (1 i386-linux)
end
def test_execute_all_prerelease
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.handle_options %w[-r --all --prerelease]
use_ui @ui do
@ -103,12 +120,15 @@ pl (1 i386-linux)
end
def test_execute_details
@a2.summary = 'This is a lot of text. ' * 4
@a2.authors = ['Abraham Lincoln', 'Hirohito']
@a2.homepage = 'http://a.example.com/'
spec_fetcher do |fetcher|
fetcher.spec 'a', 2 do |s|
s.summary = 'This is a lot of text. ' * 4
s.authors = ['Abraham Lincoln', 'Hirohito']
s.homepage = 'http://a.example.com/'
end
util_clear_gems
util_setup_spec_fetcher @a1, @a2, @pl1
fetcher.legacy_platform
end
@cmd.handle_options %w[-r -d]
@ -140,15 +160,22 @@ pl (1)
end
def test_execute_details_platform
@a1.platform = 'x86-linux'
spec_fetcher do |fetcher|
fetcher.clear
@a2.summary = 'This is a lot of text. ' * 4
@a2.authors = ['Abraham Lincoln', 'Hirohito']
@a2.homepage = 'http://a.example.com/'
@a2.platform = 'universal-darwin'
fetcher.spec 'a', 1 do |s|
s.platform = 'x86-linux'
end
util_clear_gems
util_setup_spec_fetcher @a1, @a2, @pl1
fetcher.spec 'a', 2 do |s|
s.summary = 'This is a lot of text. ' * 4
s.authors = ['Abraham Lincoln', 'Hirohito']
s.homepage = 'http://a.example.com/'
s.platform = 'universal-darwin'
end
fetcher.legacy_platform
end
@cmd.handle_options %w[-r -d]
@ -282,6 +309,10 @@ pl (1)
end
def test_execute_local
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.options[:domain] = :local
use_ui @ui do
@ -301,6 +332,10 @@ pl (1 i386-linux)
end
def test_execute_local_notty
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.handle_options %w[]
@ui.outs.tty = false
@ -319,6 +354,10 @@ pl (1 i386-linux)
end
def test_execute_local_quiet
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.options[:domain] = :local
Gem.configuration.verbose = false
@ -336,6 +375,10 @@ pl (1 i386-linux)
end
def test_execute_no_versions
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.handle_options %w[-r --no-versions]
use_ui @ui do
@ -355,6 +398,10 @@ pl
end
def test_execute_notty
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.handle_options %w[-r]
@ui.outs.tty = false
@ -391,6 +438,10 @@ a (3.a)
end
def test_execute_prerelease_local
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.handle_options %w[-l --prerelease]
use_ui @ui do
@ -410,6 +461,10 @@ pl (1 i386-linux)
end
def test_execute_remote
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.options[:domain] = :remote
use_ui @ui do
@ -429,6 +484,10 @@ pl (1 i386-linux)
end
def test_execute_remote_notty
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.handle_options %w[]
@ui.outs.tty = false
@ -447,6 +506,10 @@ pl (1 i386-linux)
end
def test_execute_remote_quiet
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.options[:domain] = :remote
Gem.configuration.verbose = false
@ -464,15 +527,22 @@ pl (1 i386-linux)
end
def test_execute_local_details
@a1.platform = 'x86-linux'
spec_fetcher do |fetcher|
fetcher.clear
@a2.summary = 'This is a lot of text. ' * 4
@a2.authors = ['Abraham Lincoln', 'Hirohito']
@a2.homepage = 'http://a.example.com/'
@a2.platform = 'universal-darwin'
fetcher.spec 'a', 1 do |s|
s.platform = 'x86-linux'
end
util_clear_gems
util_setup_spec_fetcher @a1, @a2, @pl1
fetcher.spec 'a', 2 do |s|
s.summary = 'This is a lot of text. ' * 4
s.authors = ['Abraham Lincoln', 'Hirohito']
s.homepage = 'http://a.example.com/'
s.platform = 'universal-darwin'
end
fetcher.legacy_platform
end
@cmd.handle_options %w[-l -d]
@ -486,6 +556,7 @@ pl (1 i386-linux)
str.gsub!(/at: [^\n]*/, "at: -")
expected = <<-EOF
*** LOCAL GEMS ***
a (2, 1)
@ -500,7 +571,7 @@ a (2, 1)
This is a lot of text. This is a lot of text. This is a lot of text.
This is a lot of text.
pl \(1\)
pl (1)
Platform: i386-linux
Author: A User
Homepage: http://example.com
@ -509,13 +580,18 @@ pl \(1\)
this is a summary
EOF
assert_match expected, @ui.output
assert_equal expected, @ui.output
end
def test_execute_default_details
default_gem_dir = Gem::Specification.default_specifications_dir
@a1.loaded_from =
File.join default_gem_dir, @a1.spec_name
spec_fetcher do |fetcher|
fetcher.clear
fetcher.spec 'a', 2
end
a1 = new_default_spec 'a', 1
install_default_specs a1
@cmd.handle_options %w[-l -d]
@ -527,20 +603,11 @@ pl \(1\)
*** LOCAL GEMS ***
a (3.a, 2, 1)
a (2, 1)
Author: A User
Homepage: http://example.com
Installed at (3.a): #{@gemhome}
(2): #{@gemhome}
(1, default): #{@a1.base_dir}
this is a summary
pl \(1\)
Platform: i386-linux
Author: A User
Homepage: http://example.com
Installed at: #{@gemhome}
Installed at (2): #{@gemhome}
(1, default): #{a1.base_dir}
this is a summary
EOF
@ -549,15 +616,18 @@ pl \(1\)
end
def test_make_entry
@fetcher.data.delete \
"#{@gem_repo}quick/Marshal.#{Gem.marshal_version}/#{@a2.original_name}.gemspec.rz"
a_2_name = @specs['a-2'].original_name
@fetcher.data.delete \
"#{@gem_repo}quick/Marshal.#{Gem.marshal_version}/#{a_2_name}.gemspec.rz"
a2 = @specs['a-2']
entry_tuples = [
[Gem::NameTuple.new(@a2.name, @a2.version, @a2.platform),
[Gem::NameTuple.new(a2.name, a2.version, a2.platform),
Gem.sources.first],
]
platforms = { @a2.version => [@a2.platform] }
platforms = { a2.version => [a2.platform] }
entry = @cmd.send :make_entry, entry_tuples, platforms
@ -566,6 +636,10 @@ pl \(1\)
# Test for multiple args handling!
def test_execute_multiple_args
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
@cmd.handle_options %w[a pl]
use_ui @ui do

View file

@ -6,7 +6,7 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
def setup
super
util_setup_fake_fetcher
spec_fetcher
@cmd = Gem::Commands::SourcesCommand.new
@ -18,7 +18,6 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
end
def test_execute
util_setup_spec_fetcher
@cmd.handle_options []
use_ui @ui do
@ -36,9 +35,9 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
end
def test_execute_add
util_setup_fake_fetcher
install_specs @a1
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
end
specs = Gem::Specification.map { |spec|
[spec.name, spec.version, spec.original_platform]
@ -54,8 +53,6 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
@cmd.handle_options %W[--add #{@new_repo}]
util_setup_spec_fetcher
use_ui @ui do
@cmd.execute
end
@ -71,19 +68,13 @@ class TestGemCommandsSourcesCommand < Gem::TestCase
end
def test_execute_add_nonexistent_source
util_setup_fake_fetcher
uri = "http://beta-gems.example.com/specs.#{@marshal_version}.gz"
@fetcher.data[uri] = proc do
raise Gem::RemoteFetcher::FetchError.new('it died', uri)
end
Gem::RemoteFetcher.fetcher = @fetcher
@cmd.handle_options %w[--add http://beta-gems.example.com]
util_setup_spec_fetcher
use_ui @ui do
assert_raises Gem::MockGemUi::TermError do
@cmd.execute
@ -102,8 +93,6 @@ Error fetching http://beta-gems.example.com:
def test_execute_add_redundant_source
@cmd.handle_options %W[--add #{@gem_repo}]
util_setup_spec_fetcher
use_ui @ui do
@cmd.execute
end
@ -120,9 +109,10 @@ source #{@gem_repo} already present in the cache
def test_execute_add_http_rubygems_org
http_rubygems_org = 'http://rubygems.org'
util_setup_fake_fetcher
install_specs @a1
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
end
specs = Gem::Specification.map { |spec|
[spec.name, spec.version, spec.original_platform]
@ -138,8 +128,6 @@ source #{@gem_repo} already present in the cache
@cmd.handle_options %W[--add #{http_rubygems_org}]
util_setup_spec_fetcher
ui = Gem::MockGemUi.new "n"
use_ui ui do
@ -160,8 +148,6 @@ source #{@gem_repo} already present in the cache
def test_execute_add_bad_uri
@cmd.handle_options %w[--add beta-gems.example.com]
util_setup_spec_fetcher
use_ui @ui do
assert_raises Gem::MockGemUi::TermError do
@cmd.execute
@ -181,8 +167,6 @@ beta-gems.example.com is not a URI
def test_execute_clear_all
@cmd.handle_options %w[--clear-all]
util_setup_spec_fetcher
use_ui @ui do
@cmd.execute
end
@ -218,8 +202,6 @@ beta-gems.example.com is not a URI
def test_execute_remove
@cmd.handle_options %W[--remove #{@gem_repo}]
util_setup_spec_fetcher
use_ui @ui do
@cmd.execute
end
@ -233,8 +215,6 @@ beta-gems.example.com is not a URI
def test_execute_remove_no_network
@cmd.handle_options %W[--remove #{@gem_repo}]
util_setup_fake_fetcher
@fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] = proc do
raise Gem::RemoteFetcher::FetchError
end
@ -252,22 +232,9 @@ beta-gems.example.com is not a URI
def test_execute_update
@cmd.handle_options %w[--update]
util_setup_fake_fetcher
util_setup_spec_fetcher @a1
specs = Gem::Specification.map { |spec|
[spec.name, spec.version, spec.original_platform]
}
@fetcher.data["#{@gem_repo}specs.#{Gem.marshal_version}.gz"] =
util_gzip Marshal.dump(specs)
latest_specs = Gem::Specification.latest_specs.map { |spec|
[spec.name, spec.version, spec.original_platform]
}
@fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] =
util_gzip Marshal.dump(latest_specs)
spec_fetcher do |fetcher|
fetcher.gem 'a', 1
end
use_ui @ui do
@cmd.execute

View file

@ -10,7 +10,7 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
end
def test_execute
foo = quick_spec 'foo'
foo = util_spec 'foo'
install_specs foo
@ -26,8 +26,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
end
def test_execute_all
quick_spec 'foo', '0.0.1'
quick_spec 'foo', '0.0.2'
util_spec 'foo', '0.0.1'
util_spec 'foo', '0.0.2'
@cmd.options[:args] = %w[foo]
@cmd.options[:all] = true
@ -44,8 +44,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
end
def test_execute_all_conflicts_with_version
quick_spec 'foo', '0.0.1'
quick_spec 'foo', '0.0.2'
util_spec 'foo', '0.0.1'
util_spec 'foo', '0.0.2'
@cmd.options[:args] = %w[foo]
@cmd.options[:all] = true
@ -89,8 +89,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
end
def test_execute_exact_match
quick_spec 'foo'
quick_spec 'foo_bar'
util_spec 'foo'
util_spec 'foo_bar'
@cmd.options[:args] = %w[foo]
@ -118,7 +118,7 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
end
def test_execute_file
foo = quick_spec 'foo' do |s|
foo = util_spec 'foo' do |s|
s.files = %w[lib/code.rb]
end
@ -188,10 +188,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
def test_execute_remote_without_prerelease
spec_fetcher do |fetcher|
foo = fetcher.spec 'foo', '2.0.0'
foo_pre = fetcher.spec 'foo', '2.0.1.pre'
install_specs foo, foo_pre
fetcher.spec 'foo', '2.0.0'
fetcher.spec 'foo', '2.0.1.pre'
end
@cmd.options[:args] = %w[foo]
@ -211,10 +209,8 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
def test_execute_remote_with_prerelease
spec_fetcher do |fetcher|
foo = fetcher.spec 'foo', '2.0.0'
foo_pre = fetcher.spec 'foo', '2.0.1.pre'
install_specs foo, foo_pre
fetcher.spec 'foo', '2.0.0'
fetcher.spec 'foo', '2.0.1.pre'
end
@cmd.options[:args] = %w[foo]
@ -234,7 +230,7 @@ class TestGemCommandsSpecificationCommand < Gem::TestCase
end
def test_execute_ruby
foo = quick_spec 'foo'
foo = util_spec 'foo'
install_specs foo

View file

@ -10,11 +10,11 @@ class TestGemCommandsStaleCommand < Gem::TestCase
def test_execute_sorts
files = %w[lib/foo_bar.rb Rakefile]
foo_bar = quick_spec 'foo_bar' do |gem|
foo_bar = util_spec 'foo_bar' do |gem|
gem.files = files
end
bar_baz = quick_spec 'bar_baz' do |gem|
bar_baz = util_spec 'bar_baz' do |gem|
gem.files = files
end

View file

@ -24,7 +24,7 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
gemhome2 = "#{@gemhome}2"
a_4 = quick_spec 'a', 4
a_4 = util_spec 'a', 4
install_gem a_4, :install_dir => gemhome2
Gem::Specification.dirs = [@gemhome, gemhome2]
@ -126,7 +126,7 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
end
def test_execute_prerelease
@spec = quick_spec "pre", "2.b"
@spec = util_spec "pre", "2.b"
@gem = File.join @tempdir, @spec.file_name
FileUtils.touch @gem
@ -213,7 +213,7 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
gemhome2 = "#{@gemhome}2"
a_4 = quick_spec 'a', 4
a_4 = util_spec 'a', 4
install_gem a_4, :install_dir => gemhome2
Gem::Specification.dirs = [@gemhome, gemhome2]

View file

@ -22,31 +22,22 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
end
def test_get_path
util_setup_fake_fetcher
util_clear_gems
util_setup_spec_fetcher @a1
a1_data = nil
open @a1.cache_file, 'rb' do |fp|
a1_data = fp.read
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 1
end
Gem::RemoteFetcher.fetcher.data['http://gems.example.com/gems/a-1.gem'] =
a1_data
dep = Gem::Dependency.new(@a1.name, @a1.version)
dep = Gem::Dependency.new 'a', 1
assert_equal(
@cmd.get_path(dep),
@a1.cache_file,
specs['a-1'].cache_file,
'fetches a-1 and returns the cache path'
)
FileUtils.rm @a1.cache_file
FileUtils.rm specs['a-1'].cache_file
assert_equal(
@cmd.get_path(dep),
@a1.cache_file,
specs['a-1'].cache_file,
'when removed from cache, refetches a-1'
)
end
@ -67,8 +58,9 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
end
def test_execute_gem_path
util_setup_fake_fetcher
util_setup_spec_fetcher
spec_fetcher do |fetcher|
fetcher.gem 'a', '3.a'
end
Gem.clear_paths
@ -88,8 +80,7 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
end
def test_execute_gem_path_missing
util_setup_fake_fetcher
util_setup_spec_fetcher
spec_fetcher
Gem.clear_paths
@ -109,18 +100,13 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
end
def test_execute_remote
util_setup_fake_fetcher
util_setup_spec_fetcher @a1, @a2
util_clear_gems
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.gem 'a', 2
a2_data = nil
open @a2.cache_file, 'rb' do |fp|
a2_data = fp.read
fetcher.clear
end
Gem::RemoteFetcher.fetcher.data['http://gems.example.com/gems/a-2.gem'] =
a2_data
Gem.configuration.verbose = :really
@cmd.options[:args] = %w[a]
@ -186,8 +172,8 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
end
def test_execute_exact_match
foo_spec = quick_spec 'foo'
foo_bar_spec = quick_spec 'foo_bar'
foo_spec = util_spec 'foo'
foo_bar_spec = util_spec 'foo_bar'
use_ui @ui do
Dir.chdir @tempdir do

View file

@ -17,26 +17,27 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
@cmd.options[:document] = []
util_setup_fake_fetcher(true)
util_clear_gems
util_setup_spec_fetcher @a1, @a2, @a3a
@specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 1
fetcher.gem 'a', 2
fetcher.gem 'a', '3.a'
@a1_path = @a1.cache_file
@a2_path = @a2.cache_file
@a3a_path = @a3a.cache_file
fetcher.clear
end
@fetcher.data["#{@gem_repo}gems/#{File.basename @a1_path}"] =
read_binary @a1_path
@fetcher.data["#{@gem_repo}gems/#{File.basename @a2_path}"] =
read_binary @a2_path
@fetcher.data["#{@gem_repo}gems/#{File.basename @a3a_path}"] =
read_binary @a3a_path
@a1_path = @specs['a-1'].cache_file
@a2_path = @specs['a-1'].cache_file
@a3a_path = @specs['a-3.a'].cache_file
end
def test_execute
util_clear_gems
spec_fetcher do |fetcher|
fetcher.gem 'a', 2
Gem::Installer.new(@a1_path).install
fetcher.clear
fetcher.spec 'a', 1
end
@cmd.options[:args] = []
@ -46,48 +47,17 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
out = @ui.output.split "\n"
assert_equal "Updating installed gems", out.shift
assert_equal "Updating #{@a2.name}", out.shift
assert_equal "Gems updated: #{@a2.name}", out.shift
assert_equal "Updating a", out.shift
assert_equal "Gems updated: a", out.shift
assert_empty out
end
def util_setup_rubygem version
gem = quick_spec('rubygems-update', version.to_s) do |s|
s.files = %w[setup.rb]
end
write_file File.join(*%W[gems #{gem.original_name} setup.rb])
util_build_gem gem
util_setup_spec_fetcher gem
gem
end
def util_setup_rubygem8
@rubygem8 = util_setup_rubygem 8
end
def util_setup_rubygem9
@rubygem9 = util_setup_rubygem 9
end
def util_setup_rubygem_current
@rubygem_current = util_setup_rubygem Gem::VERSION
end
def util_add_to_fetcher *specs
specs.each do |spec|
gem_file = spec.cache_file
file_name = File.basename gem_file
@fetcher.data["http://gems.example.com/gems/#{file_name}"] =
Gem.read_binary gem_file
end
end
def test_execute_system
util_clear_gems
util_setup_rubygem9
util_setup_spec_fetcher @rubygem9
util_add_to_fetcher @rubygem9
spec_fetcher do |fetcher|
fetcher.gem 'rubygems-update', 9 do |s| s.files = %w[setup.rb] end
fetcher.clear
end
@cmd.options[:args] = []
@cmd.options[:system] = true
@ -105,10 +75,13 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
end
def test_execute_system_at_latest
util_clear_gems
util_setup_rubygem_current
util_setup_spec_fetcher @rubygem_current
util_add_to_fetcher @rubygem_current
spec_fetcher do |fetcher|
fetcher.gem 'rubygems-update', Gem::VERSION do |s|
s.files = %w[setup.rb]
end
fetcher.clear
end
@cmd.options[:args] = []
@cmd.options[:system] = true
@ -125,11 +98,12 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
end
def test_execute_system_multiple
util_clear_gems
util_setup_rubygem9
util_setup_rubygem8
util_setup_spec_fetcher @rubygem8, @rubygem9
util_add_to_fetcher @rubygem8, @rubygem9
spec_fetcher do |fetcher|
fetcher.gem 'rubygems-update', 8 do |s| s.files = %w[setup.rb] end
fetcher.gem 'rubygems-update', 9 do |s| s.files = %w[setup.rb] end
fetcher.clear
end
@cmd.options[:args] = []
@cmd.options[:system] = true
@ -147,11 +121,12 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
end
def test_execute_system_specific
util_clear_gems
util_setup_rubygem9
util_setup_rubygem8
util_setup_spec_fetcher @rubygem8, @rubygem9
util_add_to_fetcher @rubygem8, @rubygem9
spec_fetcher do |fetcher|
fetcher.gem 'rubygems-update', 8 do |s| s.files = %w[setup.rb] end
fetcher.gem 'rubygems-update', 9 do |s| s.files = %w[setup.rb] end
fetcher.clear
end
@cmd.options[:args] = []
@cmd.options[:system] = "8"
@ -169,11 +144,12 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
end
def test_execute_system_specifically_to_latest_version
util_clear_gems
util_setup_rubygem9
util_setup_rubygem8
util_setup_spec_fetcher @rubygem8, @rubygem9
util_add_to_fetcher @rubygem8, @rubygem9
spec_fetcher do |fetcher|
fetcher.gem 'rubygems-update', 8 do |s| s.files = %w[setup.rb] end
fetcher.gem 'rubygems-update', 9 do |s| s.files = %w[setup.rb] end
fetcher.clear
end
@cmd.options[:args] = []
@cmd.options[:system] = "9"
@ -212,37 +188,17 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
# a2 -> c2
def test_execute_dependencies
@a1.add_dependency 'c', '1.2'
spec_fetcher do |fetcher|
fetcher.gem 'a', 2, 'b' => 2, 'c' => 2
fetcher.gem 'b', 2
fetcher.gem 'c', 2
@c2 = quick_spec 'c', '2' do |s|
s.files = %w[lib/code.rb]
s.require_paths = %w[lib]
fetcher.clear
fetcher.spec 'a', 1, 'c' => '1.2'
fetcher.spec 'c', '1.2'
end
@a2.add_dependency 'c', '2'
@a2.add_dependency 'b', '2'
@b2_path = @b2.cache_file
@c1_2_path = @c1_2.cache_file
@c2_path = @c2.cache_file
install_specs @a1, @a2, @b2, @c1_2, @c2
util_build_gem @a1
util_build_gem @a2
util_build_gem @c2
@fetcher.data["#{@gem_repo}gems/#{@a1.file_name}"] = read_binary @a1_path
@fetcher.data["#{@gem_repo}gems/#{@a2.file_name}"] = read_binary @a2_path
@fetcher.data["#{@gem_repo}gems/#{@b2.file_name}"] = read_binary @b2_path
@fetcher.data["#{@gem_repo}gems/#{@c1_2.file_name}"] = read_binary @c1_2_path
@fetcher.data["#{@gem_repo}gems/#{@c2.file_name}"] = read_binary @c2_path
util_setup_spec_fetcher @a1, @a2, @b2, @c1_2, @c2
Gem::Installer.new(@c1_2_path).install
Gem::Installer.new(@a1_path).install
Gem::Specification.reset
@cmd.options[:args] = []
@ -253,23 +209,27 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
out = @ui.output.split "\n"
assert_equal "Updating installed gems", out.shift
assert_equal "Updating #{@a2.name}", out.shift
assert_equal "Gems updated: #{@a2.name} #{@b2.name} #{@c2.name}",
assert_equal "Updating a", out.shift
assert_equal "Gems updated: a b c",
out.shift
assert_empty out
end
def test_execute_rdoc
spec_fetcher do |fetcher|
fetcher.gem 'a', 2
fetcher.clear
fetcher.spec 'a', 1
end
Gem.done_installing(&Gem::RDoc.method(:generation_hook))
@cmd.options[:document] = %w[rdoc ri]
util_clear_gems
Gem::Installer.new(@a1_path).install
@cmd.options[:args] = [@a1.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
@cmd.execute
@ -277,16 +237,22 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
wait_for_child_process_to_exit
assert_path_exists File.join(@a2.doc_dir, 'ri')
assert_path_exists File.join(@a2.doc_dir, 'rdoc')
a2 = @specs['a-2']
assert_path_exists File.join(a2.doc_dir, 'ri')
assert_path_exists File.join(a2.doc_dir, 'rdoc')
end
def test_execute_named
util_clear_gems
spec_fetcher do |fetcher|
fetcher.gem 'a', 2
Gem::Installer.new(@a1_path).install
fetcher.clear
@cmd.options[:args] = [@a1.name]
fetcher.spec 'a', 1
end
@cmd.options[:args] = %w[a]
use_ui @ui do
@cmd.execute
@ -294,18 +260,18 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
out = @ui.output.split "\n"
assert_equal "Updating installed gems", out.shift
assert_equal "Updating #{@a2.name}", out.shift
assert_equal "Gems updated: #{@a2.name}", out.shift
assert_equal "Updating a", out.shift
assert_equal "Gems updated: a", out.shift
assert_empty out
end
def test_execute_named_up_to_date
util_clear_gems
spec_fetcher do |fetcher|
fetcher.spec 'a', 2
end
Gem::Installer.new(@a2_path).install
@cmd.options[:args] = [@a2.name]
@cmd.options[:args] = %w[a]
use_ui @ui do
@cmd.execute
@ -319,11 +285,15 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
end
def test_execute_named_up_to_date_prerelease
util_clear_gems
spec_fetcher do |fetcher|
fetcher.gem 'a', '3.a'
Gem::Installer.new(@a2_path).install
fetcher.clear
@cmd.options[:args] = [@a2.name]
fetcher.gem 'a', 2
end
@cmd.options[:args] = %w[a]
@cmd.options[:prerelease] = true
use_ui @ui do
@ -332,16 +302,16 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
out = @ui.output.split "\n"
assert_equal "Updating installed gems", out.shift
assert_equal "Updating #{@a3a.name}", out.shift
assert_equal "Gems updated: #{@a3a.name}", out.shift
assert_equal "Updating a", out.shift
assert_equal "Gems updated: a", out.shift
assert_empty out
end
def test_execute_up_to_date
util_clear_gems
Gem::Installer.new(@a2_path).install
spec_fetcher do |fetcher|
fetcher.gem 'a', 2
end
@cmd.options[:args] = []
@ -357,9 +327,13 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
end
def test_execute_user_install
util_clear_gems
spec_fetcher do |fetcher|
fetcher.gem 'a', 2
Gem::Installer.new(@a1_path).install
fetcher.clear
fetcher.spec 'a', 1
end
@cmd.handle_options %w[--user-install]
@ -374,37 +348,51 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
end
def test_fetch_remote_gems
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 1
fetcher.gem 'a', 2
end
expected = [
[Gem::NameTuple.new('a', v(2), Gem::Platform::RUBY),
Gem::Source.new(@gem_repo)],
]
assert_equal expected, @cmd.fetch_remote_gems(@a1)
assert_equal expected, @cmd.fetch_remote_gems(specs['a-1'])
end
def test_fetch_remote_gems_error
Gem.sources.replace %w[http://nonexistent.example]
assert_raises Gem::RemoteFetcher::FetchError do
@cmd.fetch_remote_gems @a1
@cmd.fetch_remote_gems @specs['a-1']
end
end
def test_fetch_remote_gems_mismatch
platform = Gem::Platform.new 'x86-freebsd9'
a2_p = quick_spec 'a', 2 do |s| s.platform = platform end
util_setup_spec_fetcher @a2, a2_p
specs = spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', 2
fetcher.spec 'a', 2 do |s| s.platform = platform end
end
expected = [
[Gem::NameTuple.new('a', v(2), Gem::Platform::RUBY),
Gem::Source.new(@gem_repo)],
]
assert_equal expected, @cmd.fetch_remote_gems(@a1)
assert_equal expected, @cmd.fetch_remote_gems(specs['a-1'])
end
def test_fetch_remote_gems_prerelease
specs = spec_fetcher do |fetcher|
fetcher.gem 'a', 1
fetcher.gem 'a', 2
fetcher.gem 'a', '3.a'
end
@cmd.options[:prerelease] = true
expected = [
@ -414,7 +402,7 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
Gem::Source.new(@gem_repo)],
]
assert_equal expected, @cmd.fetch_remote_gems(@a1)
assert_equal expected, @cmd.fetch_remote_gems(specs['a-1'])
end
def test_handle_options_system

View file

@ -68,7 +68,7 @@ class TestGemCommandsWhichCommand < Gem::TestCase
def util_foo_bar
files = %w[lib/foo_bar.rb lib/directory/baz.rb Rakefile]
@foo_bar = quick_spec 'foo_bar' do |gem|
@foo_bar = util_spec 'foo_bar' do |gem|
gem.files = files
end

View file

@ -11,17 +11,17 @@ class TestGemDependencyList < Gem::TestCase
@deplist = Gem::DependencyList.new
# TODO: switch to new_spec
@a1 = quick_spec 'a', '1'
@a2 = quick_spec 'a', '2'
@a3 = quick_spec 'a', '3'
@a1 = util_spec 'a', '1'
@a2 = util_spec 'a', '2'
@a3 = util_spec 'a', '3'
@b1 = quick_spec 'b', '1' do |s| s.add_dependency 'a', '>= 1' end
@b2 = quick_spec 'b', '2' do |s| s.add_dependency 'a', '>= 1' end
@b1 = util_spec 'b', '1' do |s| s.add_dependency 'a', '>= 1' end
@b2 = util_spec 'b', '2' do |s| s.add_dependency 'a', '>= 1' end
@c1 = quick_spec 'c', '1' do |s| s.add_dependency 'b', '>= 1' end
@c2 = quick_spec 'c', '2'
@c1 = util_spec 'c', '1' do |s| s.add_dependency 'b', '>= 1' end
@c2 = util_spec 'c', '2'
@d1 = quick_spec 'd', '1' do |s| s.add_dependency 'c', '>= 1' end
@d1 = util_spec 'd', '1' do |s| s.add_dependency 'c', '>= 1' end
end
def test_active_count
@ -57,9 +57,9 @@ class TestGemDependencyList < Gem::TestCase
end
def test_dependency_order_development
e1 = quick_spec 'e', '1'
f1 = quick_spec 'f', '1'
g1 = quick_spec 'g', '1'
e1 = util_spec 'e', '1'
f1 = util_spec 'f', '1'
g1 = util_spec 'g', '1'
@a1.add_dependency 'e'
@a1.add_dependency 'f'
@ -85,7 +85,7 @@ class TestGemDependencyList < Gem::TestCase
def test_dependency_order_diamond
util_diamond
e1 = quick_spec 'e', '1'
e1 = util_spec 'e', '1'
@deplist.add e1
@a1.add_dependency 'e', '>= 1'
@ -161,13 +161,13 @@ class TestGemDependencyList < Gem::TestCase
end
def test_ok_eh_mismatch
a1 = quick_spec 'a', '1'
a2 = quick_spec 'a', '2'
a1 = util_spec 'a', '1'
a2 = util_spec 'a', '2'
b = quick_spec 'b', '1' do |s| s.add_dependency 'a', '= 1' end
c = quick_spec 'c', '1' do |s| s.add_dependency 'a', '= 2' end
b = util_spec 'b', '1' do |s| s.add_dependency 'a', '= 1' end
c = util_spec 'c', '1' do |s| s.add_dependency 'a', '= 2' end
d = quick_spec 'd', '1' do |s|
d = util_spec 'd', '1' do |s|
s.add_dependency 'b'
s.add_dependency 'c'
end

View file

@ -7,7 +7,7 @@ class TestGemDependencyResolutionError < Gem::TestCase
@DR = Gem::DependencyResolver
@spec = quick_spec 'a', 2
@spec = util_spec 'a', 2
@a1_req = @DR::DependencyRequest.new dep('a', '= 1'), nil
@a2_req = @DR::DependencyRequest.new dep('a', '= 2'), nil

View file

@ -510,9 +510,9 @@ class TestGemDependencyResolver < Gem::TestCase
def test_select_local_platforms
r = Gem::DependencyResolver.new nil, nil
a1 = quick_spec 'a', 1
a1_p1 = quick_spec 'a', 1 do |s| s.platform = Gem::Platform.local end
a1_p2 = quick_spec 'a', 1 do |s| s.platform = 'unknown' end
a1 = util_spec 'a', 1
a1_p1 = util_spec 'a', 1 do |s| s.platform = Gem::Platform.local end
a1_p2 = util_spec 'a', 1 do |s| s.platform = 'unknown' end
selected = r.select_local_platforms [a1, a1_p1, a1_p2]

View file

@ -23,7 +23,7 @@ class TestGemDependencyResolverDependencyConflict < Gem::TestCase
def test_explanation_user_request
@DR = Gem::DependencyResolver
spec = quick_spec 'a', 2
spec = util_spec 'a', 2
a1_req = @DR::DependencyRequest.new dep('a', '= 1'), nil
a2_req = @DR::DependencyRequest.new dep('a', '= 2'), nil

View file

@ -31,11 +31,9 @@ class TestGemDependencyResolverIndexSpecification < Gem::TestCase
end
def test_spec
a_2_p = nil
spec_fetcher do |fetcher|
specs = spec_fetcher do |fetcher|
fetcher.spec 'a', 2
a_2_p = fetcher.spec 'a', 2 do |s| s.platform = Gem::Platform.local end
fetcher.spec 'a', 2 do |s| s.platform = Gem::Platform.local end
end
source = Gem::Source.new @gem_repo
@ -47,11 +45,11 @@ class TestGemDependencyResolverIndexSpecification < Gem::TestCase
spec = i_spec.spec
assert_equal a_2_p.full_name, spec.full_name
assert_equal specs["a-2-#{Gem::Platform.local}"].full_name, spec.full_name
end
def test_spec_local
a_2_p = quick_spec 'a', 2 do |s| s.platform = Gem::Platform.local end
a_2_p = util_spec 'a', 2 do |s| s.platform = Gem::Platform.local end
Gem::Package.build a_2_p
source = Gem::Source::Local.new

View file

@ -6,7 +6,7 @@ class TestGemDependencyResolverInstalledSpecification < Gem::TestCase
def test_initialize
set = Gem::DependencyResolver::CurrentSet.new
source_spec = quick_spec 'a'
source_spec = util_spec 'a'
spec = Gem::DependencyResolver::InstalledSpecification.new set, source_spec

View file

@ -4,11 +4,9 @@ require 'rubygems/dependency_resolver'
class TestGemDependencyResolverInstallerSet < Gem::TestCase
def test_load_spec
a_2_p = nil
spec_fetcher do |fetcher|
specs = spec_fetcher do |fetcher|
fetcher.spec 'a', 2
a_2_p = fetcher.spec 'a', 2 do |s| s.platform = Gem::Platform.local end
fetcher.spec 'a', 2 do |s| s.platform = Gem::Platform.local end
end
source = Gem::Source.new @gem_repo
@ -18,7 +16,7 @@ class TestGemDependencyResolverInstallerSet < Gem::TestCase
spec = set.load_spec 'a', version, Gem::Platform.local, source
assert_equal a_2_p.full_name, spec.full_name
assert_equal specs["a-2-#{Gem::Platform.local}"].full_name, spec.full_name
end
end

View file

@ -157,7 +157,7 @@ This directory does not appear to be a RubyGems repository, skipping
refute doctor.gem_repository?, 'no gems installed'
quick_spec 'a'
util_spec 'a'
doctor = Gem::Doctor.new @gemhome

View file

@ -15,7 +15,7 @@ class TestGemExtBuilder < Gem::TestCase
@orig_DESTDIR = ENV['DESTDIR']
@spec = quick_spec 'a'
@spec = util_spec 'a'
@builder = Gem::Ext::Builder.new @spec, ''
end

View file

@ -13,15 +13,15 @@ class TestGemIndexer < Gem::TestCase
util_clear_gems
util_make_gems
@d2_0 = quick_spec 'd', '2.0' do |s|
@d2_0 = util_spec 'd', '2.0' do |s|
s.date = Gem::Specification::TODAY - 86400 * 3
end
util_build_gem @d2_0
@d2_0_a = quick_spec 'd', '2.0.a'
@d2_0_a = util_spec 'd', '2.0.a'
util_build_gem @d2_0_a
@d2_0_b = quick_spec 'd', '2.0.b'
@d2_0_b = util_spec 'd', '2.0.b'
util_build_gem @d2_0_b
@default = new_default_spec 'default', 2
@ -292,7 +292,7 @@ class TestGemIndexer < Gem::TestCase
def with_system_gems
Gem::Specification.reset
sys_gem = quick_spec 'systemgem', '1.0'
sys_gem = util_spec 'systemgem', '1.0'
util_build_gem sys_gem
Gem::Specification.add_spec sys_gem
yield
@ -311,11 +311,11 @@ class TestGemIndexer < Gem::TestCase
assert File.directory?(quickdir)
assert File.directory?(marshal_quickdir)
@d2_1 = quick_spec 'd', '2.1'
@d2_1 = util_spec 'd', '2.1'
util_build_gem @d2_1
@d2_1_tuple = [@d2_1.name, @d2_1.version, @d2_1.original_platform]
@d2_1_a = quick_spec 'd', '2.2.a'
@d2_1_a = util_spec 'd', '2.2.a'
util_build_gem @d2_1_a
@d2_1_a_tuple = [@d2_1_a.name, @d2_1_a.version, @d2_1_a.original_platform]

View file

@ -185,7 +185,7 @@ gem 'other', version
end unless Gem.win_platform?
def test_ensure_dependency
quick_spec 'a'
util_spec 'a'
dep = Gem::Dependency.new 'a', '>= 2'
assert @installer.ensure_dependency(@spec, dep)
@ -606,7 +606,7 @@ gem 'other', version
end
def test_initialize
spec = quick_spec 'a' do |s| s.platform = Gem::Platform.new 'mswin32' end
spec = util_spec 'a' do |s| s.platform = Gem::Platform.new 'mswin32' end
gem = File.join @tempdir, spec.file_name
Dir.mkdir util_inst_bindir
@ -1044,7 +1044,7 @@ gem 'other', version
end
def test_installation_satisfies_dependency_eh
quick_spec 'a'
util_spec 'a'
dep = Gem::Dependency.new 'a', '>= 2'
assert @installer.installation_satisfies_dependency?(dep)
@ -1113,7 +1113,7 @@ gem 'other', version
end
def test_pre_install_checks_wrong_rubygems_version
spec = quick_spec 'old_rubygems_required', '1' do |s|
spec = util_spec 'old_rubygems_required', '1' do |s|
s.required_rubygems_version = '< 0'
end
@ -1400,7 +1400,7 @@ gem 'other', version
end
def old_ruby_required
spec = quick_spec 'old_ruby_required', '1' do |s|
spec = util_spec 'old_ruby_required', '1' do |s|
s.required_ruby_version = '= 1.4.6'
end
@ -1410,7 +1410,7 @@ gem 'other', version
end
def util_execless
@spec = quick_spec 'z'
@spec = util_spec 'z'
util_build_gem @spec
@installer = util_installer @spec, @gemhome

View file

@ -40,7 +40,7 @@ class TestGemLocalRemoteOptions < Gem::TestCase
end
def test_clear_sources_option_idiot_proof
util_setup_fake_fetcher
spec_fetcher
@cmd.add_local_remote_options
@cmd.handle_options %W[--clear-sources]

View file

@ -9,7 +9,7 @@ class TestGemRDoc < Gem::TestCase
def setup
super
@a = quick_spec 'a' do |s|
@a = util_spec 'a' do |s|
s.rdoc_options = %w[--main MyTitle]
s.extra_rdoc_files = %w[README]
end

View file

@ -160,6 +160,37 @@ class TestGemRequestSet < Gem::TestCase
assert_equal %w!c-2 b-2 a-2!, names
end
def test_install
spec_fetcher do |fetcher|
fetcher.gem "a", "1", "b" => "= 1"
fetcher.gem "b", "1"
fetcher.clear
end
rs = Gem::RequestSet.new
rs.gem 'a'
rs.resolve
reqs = []
installers = []
installed = rs.install({}) do |req, installer|
reqs << req
installers << installer
end
assert_equal %w[b-1 a-1], reqs.map { |req| req.full_name }
assert_equal %w[b-1 a-1],
installers.map { |installer| installer.spec.full_name }
assert_path_exists File.join @gemhome, 'specifications', 'a-1.gemspec'
assert_path_exists File.join @gemhome, 'specifications', 'b-1.gemspec'
assert_equal %w[b-1 a-1], installed.map { |s| s.full_name }
end
def test_install_into
spec_fetcher do |fetcher|
fetcher.gem "a", "1", "b" => "= 1"
@ -173,8 +204,8 @@ class TestGemRequestSet < Gem::TestCase
installed = rs.install_into @tempdir
assert File.exists?(File.join(@tempdir, "specifications", "a-1.gemspec"))
assert File.exists?(File.join(@tempdir, "specifications", "b-1.gemspec"))
assert_path_exists File.join @tempdir, 'specifications', 'a-1.gemspec'
assert_path_exists File.join @tempdir, 'specifications', 'b-1.gemspec'
assert_equal %w!b-1 a-1!, installed.map { |s| s.full_name }
end

View file

@ -89,11 +89,15 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
end
def test_gem_platforms
win_platform, Gem.win_platform = Gem.win_platform?, false
with_engine_version 'ruby', '2.0.0' do
@gda.gem 'a', :platforms => :ruby
refute_empty @set.dependencies
end
ensure
Gem.win_platform = win_platform
end
def test_gem_platforms_bundler_ruby
@ -145,6 +149,8 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
end
def test_gem_platforms_maglev
win_platform, Gem.win_platform = Gem.win_platform?, false
with_engine_version 'maglev', '1.0.0' do
set = Gem::RequestSet.new
gda = @GDA.new set, 'gem.deps.rb'
@ -158,6 +164,8 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
refute_empty set.dependencies
end
ensure
Gem.win_platform = win_platform
end
def test_gem_platforms_multiple
@ -308,19 +316,35 @@ end
end
def test_platform_mswin
win_platform, Gem.win_platform = Gem.win_platform?, false
@gda.platform :mswin do
@gda.gem 'a'
end
assert_empty @set.dependencies
Gem.win_platform = true
@gda.platform :mswin do
@gda.gem 'a'
end
refute_empty @set.dependencies
ensure
Gem.win_platform = win_platform
end
def test_platform_ruby
win_platform, Gem.win_platform = Gem.win_platform?, false
@gda.platform :ruby do
@gda.gem 'a'
end
assert_equal [dep('a')], @set.dependencies
ensure
Gem.win_platform = win_platform
end
def test_platforms

View file

@ -89,7 +89,7 @@ class TestGemServer < Gem::TestCase
data = StringIO.new "GET /latest_specs.#{Gem.marshal_version} HTTP/1.0\r\n\r\n"
dir = "#{@gemhome}2"
spec = quick_spec 'z', 9
spec = util_spec 'z', 9
specs_dir = File.join dir, 'specifications'
FileUtils.mkdir_p specs_dir
@ -156,7 +156,7 @@ class TestGemServer < Gem::TestCase
assert_equal 404, @res.status
spec = quick_spec 'z', 9
spec = util_spec 'z', 9
specs_dir = File.join dir, 'specifications'
@ -249,7 +249,7 @@ class TestGemServer < Gem::TestCase
data = StringIO.new "GET / HTTP/1.0\r\n\r\n"
dir = "#{@gemhome}2"
spec = quick_spec 'z', 9
spec = util_spec 'z', 9
specs_dir = File.join dir, 'specifications'
FileUtils.mkdir_p specs_dir
@ -287,7 +287,7 @@ class TestGemServer < Gem::TestCase
data = StringIO.new "GET /specs.#{Gem.marshal_version} HTTP/1.0\r\n\r\n"
dir = "#{@gemhome}2"
spec = quick_spec 'z', 9
spec = util_spec 'z', 9
specs_dir = File.join dir, 'specifications'
FileUtils.mkdir_p specs_dir

View file

@ -10,43 +10,14 @@ class TestGemSource < Gem::TestCase
def setup
super
util_setup_fake_fetcher
@a_pre = new_spec 'a', '1.a'
install_specs @a_pre
@specs = spec_fetcher do |fetcher|
fetcher.spec 'a', '1.a'
fetcher.gem 'a', 1
fetcher.spec 'a', 2
fetcher.spec 'b', 2
end
@source = Gem::Source.new(@gem_repo)
Gem::Specification.remove_spec @b2
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|
Gem::NameTuple.new(spec.name, spec.version, spec.original_platform)
}
v = Gem.marshal_version
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
@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_api_uri
@ -83,59 +54,60 @@ class TestGemSource < Gem::TestCase
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))
a1 = @specs['a-1']
spec_uri = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{a1.spec_name}"
spec = @source.fetch_spec tuple('a', Gem::Version.new(1), 'ruby')
assert_equal @a1.full_name, spec.full_name
assert_equal a1.full_name, spec.full_name
cache_dir = @source.cache_dir URI.parse(spec_uri)
cache_file = File.join cache_dir, @a1.spec_name
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}"
a1 = @specs['a-1']
spec_uri = "#{@gem_repo}/#{Gem::MARSHAL_SPEC_DIR}#{a1.spec_name}"
@fetcher.data["#{spec_uri}.rz"] = nil
cache_dir = @source.cache_dir URI.parse(spec_uri)
FileUtils.mkdir_p cache_dir
cache_file = File.join cache_dir, @a1.spec_name
cache_file = File.join cache_dir, a1.spec_name
open cache_file, 'wb' do |io|
Marshal.dump @a1, io
Marshal.dump a1, io
end
spec = @source.fetch_spec tuple('a', Gem::Version.new(1), 'ruby')
assert_equal @a1.full_name, spec.full_name
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))
specs = spec_fetcher do |fetcher|
fetcher.legacy_platform
end
spec = @source.fetch_spec tuple('pl', Gem::Version.new(1), 'i386-linux')
assert_equal @pl1.full_name, spec.full_name
assert_equal specs['pl-1-x86-linux'].full_name, spec.full_name
end
def test_fetch_spec_platform_ruby
@fetcher.data["#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{@a1.spec_name}.rz"] =
util_zip(Marshal.dump(@a1))
spec = @source.fetch_spec tuple('a', Gem::Version.new(1), nil)
assert_equal @a1.full_name, spec.full_name
assert_equal @specs['a-1'].full_name, spec.full_name
spec = @source.fetch_spec tuple('a', Gem::Version.new(1), '')
assert_equal @a1.full_name, spec.full_name
assert_equal @specs['a-1'].full_name, spec.full_name
end
def test_load_specs
expected = @released
assert_equal expected, @source.load_specs(:released)
released = @source.load_specs(:released).map { |spec| spec.full_name }
assert_equal %W[a-2 a-1 b-2], released
cache_dir = File.join Gem.spec_cache_dir, 'gems.example.com%80'
assert File.exist?(cache_dir), "#{cache_dir} does not exist"
@ -145,12 +117,14 @@ class TestGemSource < Gem::TestCase
end
def test_load_specs_cached
latest_specs = @source.load_specs :latest
# Make sure the cached version is actually different:
@latest_specs << Gem::NameTuple.new('cached', Gem::Version.new('1.0.0'), 'ruby')
latest_specs << Gem::NameTuple.new('cached', Gem::Version.new('1.0.0'), 'ruby')
@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
' ' * Marshal.dump(latest_specs).length
cache_dir = File.join Gem.spec_cache_dir, 'gems.example.com%80'
@ -159,20 +133,22 @@ class TestGemSource < Gem::TestCase
cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}"
open cache_file, 'wb' do |io|
Marshal.dump @latest_specs, io
Marshal.dump latest_specs, io
end
latest_specs = @source.load_specs :latest
cached_specs = @source.load_specs :latest
assert_equal @latest_specs, latest_specs
assert_equal latest_specs, cached_specs
end
def test_load_specs_cached_empty
latest_specs = @source.load_specs :latest
# Make sure the cached version is actually different:
@latest_specs << Gem::NameTuple.new('fixed', Gem::Version.new('1.0.0'), 'ruby')
latest_specs << Gem::NameTuple.new('fixed', Gem::Version.new('1.0.0'), 'ruby')
# Setup valid data on the 'remote'
@fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] =
util_gzip(Marshal.dump(@latest_specs))
util_gzip(Marshal.dump(latest_specs))
cache_dir = File.join Gem.spec_cache_dir, 'gems.example.com%80'
@ -182,12 +158,12 @@ class TestGemSource < Gem::TestCase
open cache_file, 'wb' do |io|
# Setup invalid data in the cache:
io.write Marshal.dump(@latest_specs)[0, 10]
io.write Marshal.dump(latest_specs)[0, 10]
end
latest_specs = @source.load_specs :latest
fixed_specs = @source.load_specs :latest
assert_equal @latest_specs, latest_specs
assert_equal latest_specs, fixed_specs
end
def test_load_specs_from_unavailable_uri
@ -200,7 +176,7 @@ class TestGemSource < Gem::TestCase
def test_spaceship
remote = @source
specific = Gem::Source::SpecificFile.new(@a1.cache_file)
specific = Gem::Source::SpecificFile.new @specs['a-1'].cache_file
installed = Gem::Source::Installed.new
local = Gem::Source::Local.new

View file

@ -13,43 +13,7 @@ class TestGemSpecFetcher < Gem::TestCase
@uri = URI.parse @gem_repo
@source = Gem::Source.new(@uri)
util_setup_fake_fetcher
@a_pre = new_spec 'a', '1.a'
install_specs @a_pre
Gem::Specification.remove_spec @b2
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|
Gem::NameTuple.new(spec.name, spec.version, spec.original_platform)
}
v = Gem.marshal_version
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_initialize
@ -86,11 +50,12 @@ class TestGemSpecFetcher < Gem::TestCase
end
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))
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', '2.a'
fetcher.spec 'a', 2
fetcher.spec 'a', '3.a'
end
dep = Gem::Dependency.new 'a', ">= 1"
@ -100,7 +65,7 @@ class TestGemSpecFetcher < Gem::TestCase
[spec.full_name, source_uri]
end
expected = [[@a1.full_name, @source], [@a2.full_name, @source]]
expected = [['a-1', @source], ['a-2', @source]]
assert_equal expected, spec_names
@ -108,10 +73,11 @@ class TestGemSpecFetcher < Gem::TestCase
end
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))
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', 2
fetcher.spec 'a', '3.a'
end
dep = Gem::Dependency.new 'a'
specs_and_sources, _ = @sf.spec_for_dependency dep
@ -120,14 +86,15 @@ class TestGemSpecFetcher < Gem::TestCase
[spec.full_name, source_uri]
end
assert_equal [[@a2.full_name, Gem::Source.new(@gem_repo)]], spec_names
assert_equal [['a-2', Gem::Source.new(@gem_repo)]],
spec_names
end
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))
spec_fetcher do |fetcher|
fetcher.spec 'a', '1.a'
fetcher.spec 'a', 1
end
specs_and_sources, _ = @sf.spec_for_dependency dep('a', '1.a')
@ -135,14 +102,15 @@ class TestGemSpecFetcher < Gem::TestCase
[spec.full_name, source_uri]
end
assert_equal [[@a_pre.full_name, Gem::Source.new(@gem_repo)]], spec_names
assert_equal [['a-1.a', Gem::Source.new(@gem_repo)]], spec_names
end
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))
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
dep = Gem::Dependency.new 'pl', 1
specs_and_sources, _ = @sf.spec_for_dependency dep
@ -151,14 +119,16 @@ class TestGemSpecFetcher < Gem::TestCase
[spec.full_name, source_uri]
end
assert_equal [[@pl1.full_name, Gem::Source.new(@gem_repo)]], spec_names
assert_equal [['pl-1-x86-linux', Gem::Source.new(@gem_repo)]],
spec_names
end
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))
spec_fetcher do |fetcher|
fetcher.legacy_platform
end
dep = Gem::Dependency.new 'pl', 1
specs_and_sources, errors = @sf.spec_for_dependency dep
@ -179,11 +149,12 @@ class TestGemSpecFetcher < Gem::TestCase
Gem.sources.replace [src]
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))
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', '2.a'
fetcher.spec 'a', 2
fetcher.spec 'a', '3.a'
end
dep = Gem::Dependency.new 'a', ">= 1"
@ -198,31 +169,70 @@ class TestGemSpecFetcher < Gem::TestCase
end
def test_available_specs_latest
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', 2
fetcher.spec 'a', '3.a'
fetcher.legacy_platform
end
specs, _ = @sf.available_specs(:latest)
assert_equal [@source], specs.keys
assert_equal @latest_specs, specs[@source]
expected = Gem::NameTuple.from_list \
[['a', v(2), Gem::Platform::RUBY],
['pl', v(1), 'i386-linux']]
assert_equal expected, specs[@source]
end
def test_available_specs_released
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.legacy_platform
end
specs, _ = @sf.available_specs(:released)
assert_equal [@source], specs.keys
assert_equal @released, specs[@source]
expected = Gem::NameTuple.from_list \
[['a', v(1), Gem::Platform::RUBY],
['pl', v(1), 'i386-linux']]
assert_equal expected, specs[@source]
end
def test_available_specs_complete
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', '2.a'
fetcher.spec 'b', 2
fetcher.legacy_platform
end
specs, _ = @sf.available_specs(:complete)
assert_equal [@source], specs.keys
expected = (@prerelease_specs + @released).sort
expected = Gem::NameTuple.from_list \
[['a', v(1), Gem::Platform::RUBY],
['a', v('2.a'), Gem::Platform::RUBY],
['b', v(2), Gem::Platform::RUBY],
['pl', v(1), 'i386-linux']]
assert_equal expected, specs[@source]
end
def test_available_specs_complete_handles_no_prerelease
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', '2.a'
fetcher.spec 'b', 2
fetcher.legacy_platform
end
v = Gem.marshal_version
@fetcher.data.delete "#{@gem_repo}prerelease_specs.#{v}.gz"
@ -230,10 +240,19 @@ class TestGemSpecFetcher < Gem::TestCase
assert_equal [@source], specs.keys
assert_equal @released, specs[@source]
expected = Gem::NameTuple.from_list \
[['a', v(1), Gem::Platform::RUBY],
['b', v(2), Gem::Platform::RUBY],
['pl', v(1), 'i386-linux']]
assert_equal expected, specs[@source]
end
def test_available_specs_cache
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
end
specs, _ = @sf.available_specs(:latest)
refute specs[@source].empty?
@ -246,6 +265,13 @@ class TestGemSpecFetcher < Gem::TestCase
end
def test_available_specs_cache_released
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', '2.a'
fetcher.spec 'b', 2
fetcher.legacy_platform
end
specs, _ = @sf.available_specs(:released)
refute specs[@source].empty?
@ -258,9 +284,17 @@ class TestGemSpecFetcher < Gem::TestCase
end
def test_available_specs_prerelease
spec_fetcher do |fetcher|
fetcher.spec 'a', 1
fetcher.spec 'a', '2.a'
end
specs, _ = @sf.available_specs(:prerelease)
assert_equal @prerelease_specs, specs[@source]
expected = Gem::NameTuple.from_list \
[['a', v('2.a'), Gem::Platform::RUBY]]
assert_equal expected, specs[@source]
end
def test_available_specs_with_bad_source

View file

@ -41,7 +41,7 @@ end
EOF
def make_spec_c1
@c1 = quick_spec 'a', '1' do |s|
@c1 = util_spec 'a', '1' do |s|
s.executable = 'exec'
s.extensions << 'ext/a/extconf.rb'
s.test_file = 'test/suite.rb'
@ -59,7 +59,7 @@ end
end
def ext_spec
@ext = quick_spec 'ext', '1' do |s|
@ext = util_spec 'ext', '1' do |s|
s.executable = 'exec'
s.test_file = 'test/suite.rb'
s.extensions = %w[ext/extconf.rb]
@ -74,7 +74,7 @@ end
def setup
super
@a1 = quick_spec 'a', '1' do |s|
@a1 = util_spec 'a', '1' do |s|
s.executable = 'exec'
s.test_file = 'test/suite.rb'
s.requirements << 'A working computer'
@ -85,11 +85,11 @@ end
s.files = %w[lib/code.rb]
end
@a2 = quick_spec 'a', '2' do |s|
@a2 = util_spec 'a', '2' do |s|
s.files = %w[lib/code.rb]
end
@a3 = quick_spec 'a', '3' do |s|
@a3 = util_spec 'a', '3' do |s|
s.metadata['allowed_push_host'] = "https://privategemserver.com"
end
@ -840,37 +840,34 @@ dependencies: []
end
def test_self_outdated
util_clear_gems
util_setup_fake_fetcher true
spec_fetcher do |fetcher|
fetcher.spec 'a', 4
a4 = quick_gem @a1.name, '4'
util_build_gem a4
util_setup_spec_fetcher @a1, @a2, @a3a, a4
fetcher.clear
Gem::Specification.remove_spec @a1
Gem::Specification.remove_spec @a2
Gem::Specification.remove_spec a4
fetcher.spec 'a', 3
end
assert_equal %w[a], Gem::Specification.outdated
end
def test_self_outdated_and_latest_remotes
util_clear_gems
util_setup_fake_fetcher true
specs = spec_fetcher do |fetcher|
fetcher.spec 'a', 4
fetcher.spec 'b', 3
a4 = quick_gem @a1.name, '4'
util_build_gem a4
b3 = quick_gem @b2.name, '3'
util_build_gem b3
util_setup_spec_fetcher @a1, @a2, @a3a, a4, @b2, b3
fetcher.clear
Gem::Specification.remove_spec @a1
Gem::Specification.remove_spec @a2
Gem::Specification.remove_spec a4
Gem::Specification.remove_spec b3
fetcher.spec 'a', '3.a'
fetcher.spec 'b', 2
end
assert_equal [[@a3a, a4.version], [@b2, b3.version]],
Gem::Specification.outdated_and_latest_version.to_a
expected = [
[specs['a-3.a'], v(4)],
[specs['b-2'], v(3)],
]
assert_equal expected, Gem::Specification.outdated_and_latest_version.to_a
end
def test_self_remove_spec
@ -1062,7 +1059,7 @@ dependencies: []
end
def test_add_dependency_with_type
gem = quick_spec "awesome", "1.0" do |awesome|
gem = util_spec "awesome", "1.0" do |awesome|
awesome.add_dependency true
awesome.add_dependency :gem_name
end
@ -1071,7 +1068,7 @@ dependencies: []
end
def test_add_dependency_with_type_explicit
gem = quick_spec "awesome", "1.0" do |awesome|
gem = util_spec "awesome", "1.0" do |awesome|
awesome.add_development_dependency "monkey"
end
@ -1370,7 +1367,7 @@ dependencies: []
assert_empty @gem.dependent_gems
bonobo = quick_spec 'bonobo'
bonobo = util_spec 'bonobo'
expected = [
[@gem, @bonobo, [bonobo]],
@ -1719,7 +1716,7 @@ dependencies: []
end
def test_prerelease_spec_adds_required_rubygems_version
@prerelease = quick_spec('tardis', '2.2.0.a')
@prerelease = util_spec('tardis', '2.2.0.a')
refute @prerelease.required_rubygems_version.satisfied_by?(Gem::Version.new('1.3.1'))
assert @prerelease.required_rubygems_version.satisfied_by?(Gem::Version.new('1.4.0'))
end
@ -2649,48 +2646,30 @@ WARNING: licenses is empty. Use a license abbreviation from:
# KEEP a-3-x86-other_platform-1
def test_latest_specs
util_clear_gems
util_setup_fake_fetcher
spec_fetcher do |fetcher|
fetcher.spec 'a', 1 do |s|
s.platform = Gem::Platform.new 'x86-my_platform1'
end
quick_spec 'p', '1'
fetcher.spec 'a', 2
p1_curr = quick_spec 'p', '1' do |spec|
spec.platform = Gem::Platform::CURRENT
fetcher.spec 'a', 2 do |s|
s.platform = Gem::Platform.new 'x86-my_platform1'
end
fetcher.spec 'a', 2 do |s|
s.platform = Gem::Platform.new 'x86-other_platform1'
end
fetcher.spec 'a', 3 do |s|
s.platform = Gem::Platform.new 'x86-other_platform1'
end
end
quick_spec @a1.name, @a1.version do |s|
s.platform = Gem::Platform.new 'x86-my_platform1'
end
quick_spec @a1.name, @a1.version do |s|
s.platform = Gem::Platform.new 'x86-third_platform1'
end
quick_spec @a2.name, @a2.version do |s|
s.platform = Gem::Platform.new 'x86-my_platform1'
end
quick_spec @a2.name, @a2.version do |s|
s.platform = Gem::Platform.new 'x86-other_platform1'
end
quick_spec @a2.name, @a2.version.bump do |s|
s.platform = Gem::Platform.new 'x86-other_platform1'
end
Gem::Specification.remove_spec @b2
Gem::Specification.remove_spec @pl1
expected = %W[
a-2
a-2-x86-my_platform-1
a-3-x86-other_platform-1
a_evil-9
c-1.2
dep_x-1
p-1
#{p1_curr.full_name}
x-1
]
latest_specs = Gem::Specification.latest_specs.map(&:full_name).sort
@ -2857,7 +2836,7 @@ end
end
def util_setup_deps
@gem = quick_spec "awesome", "1.0" do |awesome|
@gem = util_spec "awesome", "1.0" do |awesome|
awesome.add_runtime_dependency "bonobo", []
awesome.add_development_dependency "monkey", []
end

View file

@ -27,7 +27,7 @@ class TestGemUninstaller < Gem::InstallerTestCase
end
def test_ask_if_ok
c = quick_spec 'c'
c = util_spec 'c'
uninstaller = Gem::Uninstaller.new nil