diff options
author | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-11-10 17:51:40 +0000 |
---|---|---|
committer | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-11-10 17:51:40 +0000 |
commit | 4f6779bac7b4e294bc473782d60cbd071f0d0f8d (patch) | |
tree | d37b54da20f8c0adf2d98e810aacc8259b0602ff /test/rubygems/test_gem_request_set_gem_dependency_api.rb | |
parent | 31d355aaa9436e2b24efd5e6501cabd876267c46 (diff) | |
download | ruby-4f6779bac7b4e294bc473782d60cbd071f0d0f8d.tar.gz |
* lib/rubygems: Update to RubyGems master 4bdc4f2. Important changes
in this commit:
RubyGems now chooses the test server port reliably. Patch by akr.
Partial implementation of bundler's Gemfile format.
Refactorings to improve the new resolver.
Fixes bugs in the resolver.
* test/rubygems: Tests for the above.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43643 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rubygems/test_gem_request_set_gem_dependency_api.rb')
-rw-r--r-- | test/rubygems/test_gem_request_set_gem_dependency_api.rb | 332 |
1 files changed, 296 insertions, 36 deletions
diff --git a/test/rubygems/test_gem_request_set_gem_dependency_api.rb b/test/rubygems/test_gem_request_set_gem_dependency_api.rb index 5c35484421..367f3ba20a 100644 --- a/test/rubygems/test_gem_request_set_gem_dependency_api.rb +++ b/test/rubygems/test_gem_request_set_gem_dependency_api.rb @@ -16,20 +16,56 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase @gda.instance_variable_set :@vendor_set, @vendor_set end + def with_engine_version name, version + engine = RUBY_ENGINE if Object.const_defined? :RUBY_ENGINE + engine_version_const = "#{Gem.ruby_engine.upcase}_VERSION" + engine_version = Object.const_get engine_version_const + + Object.send :remove_const, :RUBY_ENGINE if engine + Object.send :remove_const, engine_version_const if name == 'ruby' and + Object.const_defined? engine_version_const + + new_engine_version_const = "#{name.upcase}_VERSION" + Object.const_set :RUBY_ENGINE, name if name + Object.const_set new_engine_version_const, version if version + + Gem.instance_variable_set :@ruby_version, Gem::Version.new(version) + + yield + + ensure + Object.send :remove_const, :RUBY_ENGINE if name + Object.send :remove_const, new_engine_version_const if version + + Object.send :remove_const, engine_version_const if name == 'ruby' and + Object.const_defined? engine_version_const + + Object.const_set :RUBY_ENGINE, engine if engine + Object.const_set engine_version_const, engine_version unless + Object.const_defined? engine_version_const + + Gem.send :remove_instance_variable, :@ruby_version if + Gem.instance_variables.include? :@ruby_version + end + def test_gem @gda.gem 'a' assert_equal [dep('a')], @set.dependencies + + assert_equal %w[a], @gda.requires['a'] end def test_gem_group @gda.gem 'a', :group => :test - expected = { - :test => [['a']], - } + assert_equal [dep('a')], @set.dependencies + end - assert_equal expected, @gda.dependency_groups + def test_gem_group_without + @gda.without_groups << :test + + @gda.gem 'a', :group => :test assert_empty @set.dependencies end @@ -37,14 +73,7 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase def test_gem_groups @gda.gem 'a', :groups => [:test, :development] - expected = { - :development => [['a']], - :test => [['a']], - } - - assert_equal expected, @gda.dependency_groups - - assert_empty @set.dependencies + assert_equal [dep('a')], @set.dependencies end def test_gem_path @@ -59,6 +88,133 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase assert_equal "#{name}-#{version}", loaded.full_name end + def test_gem_platforms + with_engine_version 'ruby', '2.0.0' do + @gda.gem 'a', :platforms => :ruby + + refute_empty @set.dependencies + end + end + + def test_gem_platforms_bundler_ruby + win_platform, Gem.win_platform = Gem.win_platform?, false + + with_engine_version 'ruby', '2.0.0' do + set = Gem::RequestSet.new + gda = @GDA.new set, 'gem.deps.rb' + gda.gem 'a', :platforms => :ruby + + refute_empty set.dependencies + end + + with_engine_version 'rbx', '2.0.0' do + set = Gem::RequestSet.new + gda = @GDA.new set, 'gem.deps.rb' + gda.gem 'a', :platforms => :ruby + + refute_empty set.dependencies + end + + with_engine_version 'jruby', '1.7.6' do + set = Gem::RequestSet.new + gda = @GDA.new set, 'gem.deps.rb' + gda.gem 'a', :platforms => :ruby + + assert_empty set.dependencies + end + + Gem.win_platform = true + + with_engine_version 'ruby', '2.0.0' do + set = Gem::RequestSet.new + gda = @GDA.new set, 'gem.deps.rb' + gda.gem 'a', :platforms => :ruby + + assert_empty set.dependencies + end + + Gem.win_platform = win_platform + end + + def test_gem_platforms_engine + with_engine_version 'jruby', '1.7.6' do + @gda.gem 'a', :platforms => :mri + + assert_empty @set.dependencies + end + end + + def test_gem_platforms_maglev + with_engine_version 'maglev', '1.0.0' do + set = Gem::RequestSet.new + gda = @GDA.new set, 'gem.deps.rb' + gda.gem 'a', :platforms => :ruby + + refute_empty set.dependencies + + set = Gem::RequestSet.new + gda = @GDA.new set, 'gem.deps.rb' + gda.gem 'a', :platforms => :maglev + + refute_empty set.dependencies + end + end + + def test_gem_platforms_multiple + win_platform, Gem.win_platform = Gem.win_platform?, false + + with_engine_version 'ruby', '2.0.0' do + @gda.gem 'a', :platforms => [:mswin, :jruby] + + assert_empty @set.dependencies + end + + ensure + Gem.win_platform = win_platform + end + + def test_gem_platforms_version + with_engine_version 'ruby', '2.0.0' do + @gda.gem 'a', :platforms => :ruby_18 + + assert_empty @set.dependencies + end + end + + def test_gem_platforms_unknown + e = assert_raises ArgumentError do + @gda.gem 'a', :platforms => :unknown + end + + assert_equal 'unknown platform :unknown', e.message + end + + def test_gem_require + @gda.gem 'a', :require => %w[b c] + + assert_equal [dep('a')], @set.dependencies + + assert_equal %w[b c], @gda.requires['a'] + end + + def test_gem_require_false + @gda.gem 'a', :require => false + + assert_equal [dep('a')], @set.dependencies + + assert_empty @gda.requires + end + + def test_gem_require_without_group + @gda.without_groups << :test + + @gda.gem 'a', :group => :test + + assert_empty @set.dependencies + + assert_empty @gda.requires['a'] + end + def test_gem_requirement @gda.gem 'a', '~> 1.0' @@ -77,6 +233,31 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase assert_equal [dep('c')], @set.dependencies end + def test_gem_source_mismatch + name, _, directory = vendor_gem + + gda = @GDA.new @set, nil + gda.gem name + + e = assert_raises ArgumentError do + gda.gem name, :path => directory + end + + assert_equal "duplicate source path: #{directory} for gem #{name}", + e.message + + gda = @GDA.new @set, nil + gda.instance_variable_set :@vendor_set, @vendor_set + gda.gem name, :path => directory + + e = assert_raises ArgumentError do + gda.gem name + end + + assert_equal "duplicate source (default) for gem #{name}", + e.message + end + def test_gem_deps_file assert_equal 'gem.deps.rb', @gda.gem_deps_file @@ -85,25 +266,22 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase assert_equal 'Gemfile', gda.gem_deps_file end - def test_group - @gda.group :test do - @gda.gem 'a' - end + def test_gem_group_method + groups = [] - assert_equal [['a']], @gda.dependency_groups[:test] + @gda.group :a do + groups = @gda.send :gem_group, 'a', :group => :b, :groups => [:c, :d] + end - assert_empty @set.dependencies + assert_equal [:a, :b, :c, :d], groups.sort_by { |group| group.to_s } end - def test_group_multiple - @gda.group :a do - @gda.gem 'a', :group => :b, :groups => [:c, :d] + def test_group + @gda.group :test do + @gda.gem 'a' end - assert_equal [['a']], @gda.dependency_groups[:a] - assert_equal [['a']], @gda.dependency_groups[:b] - assert_equal [['a']], @gda.dependency_groups[:c] - assert_equal [['a']], @gda.dependency_groups[:d] + assert_equal [dep('a')], @set.dependencies end def test_load @@ -121,18 +299,12 @@ end gda.load - expected = { - :test => [['b']], - } - - assert_equal expected, gda.dependency_groups - - assert_equal [dep('a')], @set.dependencies + assert_equal [dep('a'), dep('b')], @set.dependencies end end def test_name_typo - assert_same @GDA, Gem::RequestSet::DepedencyAPI + assert_same @GDA, Gem::RequestSet::GemDepedencyAPI end def test_platform_mswin @@ -152,11 +324,30 @@ end end def test_platforms + win_platform, Gem.win_platform = Gem.win_platform?, false + @gda.platforms :ruby do @gda.gem 'a' end assert_equal [dep('a')], @set.dependencies + + @gda.platforms :mswin do + @gda.gem 'b' + end + + assert_equal [dep('a')], @set.dependencies + + Gem.win_platform = true + + @gda.platforms :mswin do + @gda.gem 'c' + end + + assert_equal [dep('a'), dep('c')], @set.dependencies + + ensure + Gem.win_platform = win_platform end def test_ruby @@ -164,8 +355,42 @@ end end def test_ruby_engine - assert @gda.ruby RUBY_VERSION, - :engine => 'jruby', :engine_version => '1.7.4' + with_engine_version 'jruby', '1.7.6' do + assert @gda.ruby RUBY_VERSION, + :engine => 'jruby', :engine_version => '1.7.6' + + end + end + + def test_ruby_engine_mismatch_engine + with_engine_version 'ruby', '2.0.0' do + e = assert_raises Gem::RubyVersionMismatch do + @gda.ruby RUBY_VERSION, :engine => 'jruby', :engine_version => '1.7.4' + end + + assert_equal 'Your ruby engine is ruby, but your gem.deps.rb requires jruby', + e.message + end + end + + def test_ruby_engine_mismatch_version + with_engine_version 'jruby', '1.7.6' do + e = assert_raises Gem::RubyVersionMismatch do + @gda.ruby RUBY_VERSION, :engine => 'jruby', :engine_version => '1.7.4' + end + + assert_equal 'Your ruby engine version is jruby 1.7.6, but your gem.deps.rb requires jruby 1.7.4', + e.message + end + end + + def test_ruby_engine_no_engine_version + e = assert_raises ArgumentError do + @gda.ruby RUBY_VERSION, :engine => 'jruby' + end + + assert_equal 'you must specify engine_version along with the ruby engine', + e.message end def test_ruby_mismatch @@ -173,7 +398,42 @@ end @gda.ruby '1.8.0' end - assert_equal "Your Ruby version is #{RUBY_VERSION}, but your gem.deps.rb specified 1.8.0", e.message + assert_equal "Your Ruby version is #{RUBY_VERSION}, but your gem.deps.rb requires 1.8.0", e.message + end + + def test_source + sources = Gem.sources + + @gda.source 'http://first.example' + + assert_equal %w[http://first.example], Gem.sources + + assert_same sources, Gem.sources + + @gda.source 'http://second.example' + + assert_equal %w[http://first.example http://second.example], Gem.sources + end + + def test_with_engine_version + version = RUBY_VERSION + engine = Gem.ruby_engine + + engine_version_const = "#{Gem.ruby_engine.upcase}_VERSION" + engine_version = Object.const_get engine_version_const + + with_engine_version 'other', '1.2.3' do + assert_equal 'other', Gem.ruby_engine + assert_equal '1.2.3', OTHER_VERSION + + assert_equal version, RUBY_VERSION if engine + end + + assert_equal version, RUBY_VERSION + assert_equal engine, Gem.ruby_engine + + assert_equal engine_version, Object.const_get(engine_version_const) if + engine end end |