diff options
Diffstat (limited to 'jni/ruby/test/rubygems/test_gem_commands_update_command.rb')
-rw-r--r-- | jni/ruby/test/rubygems/test_gem_commands_update_command.rb | 543 |
1 files changed, 543 insertions, 0 deletions
diff --git a/jni/ruby/test/rubygems/test_gem_commands_update_command.rb b/jni/ruby/test/rubygems/test_gem_commands_update_command.rb new file mode 100644 index 0000000..6a32706 --- /dev/null +++ b/jni/ruby/test/rubygems/test_gem_commands_update_command.rb @@ -0,0 +1,543 @@ +require 'rubygems/test_case' +require 'rubygems/commands/update_command' + +begin + gem "rdoc" +rescue Gem::LoadError + # ignore +end + +class TestGemCommandsUpdateCommand < Gem::TestCase + + def setup + super + common_installer_setup + + @cmd = Gem::Commands::UpdateCommand.new + + @cmd.options[:document] = [] + + @specs = spec_fetcher do |fetcher| + fetcher.gem 'a', 1 + fetcher.gem 'a', 2 + fetcher.gem 'a', '3.a' + + fetcher.clear + end + + @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 + spec_fetcher do |fetcher| + fetcher.gem 'a', 2 + + fetcher.clear + + fetcher.spec 'a', 1 + end + + @cmd.options[:args] = [] + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating installed gems", out.shift + assert_equal "Updating a", out.shift + assert_equal "Gems updated: a", out.shift + assert_empty out + end + + def test_execute_multiple + spec_fetcher do |fetcher| + fetcher.gem 'a', 2 + fetcher.gem 'ab', 2 + + fetcher.clear + + fetcher.spec 'a', 1 + fetcher.spec 'ab', 1 + end + + @cmd.options[:args] = %w[a] + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating installed gems", out.shift + assert_equal "Updating a", out.shift + assert_equal "Gems updated: a", out.shift + assert_empty out + end + + def test_execute_system + 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 + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating rubygems-update", out.shift + assert_equal "Installing RubyGems 9", out.shift + assert_equal "RubyGems system software updated", out.shift + + assert_empty out + end + + def test_execute_system_at_latest + 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 + + assert_raises Gem::MockGemUi::SystemExitException do + use_ui @ui do + @cmd.execute + end + end + + out = @ui.output.split "\n" + assert_equal "Latest version currently installed. Aborting.", out.shift + assert_empty out + end + + def test_execute_system_multiple + 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 + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating rubygems-update", out.shift + assert_equal "Installing RubyGems 9", out.shift + assert_equal "RubyGems system software updated", out.shift + + assert_empty out + end + + def test_execute_system_specific + 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" + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating rubygems-update", out.shift + assert_equal "Installing RubyGems 8", out.shift + assert_equal "RubyGems system software updated", out.shift + + assert_empty out + end + + def test_execute_system_specifically_to_latest_version + 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" + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating rubygems-update", out.shift + assert_equal "Installing RubyGems 9", out.shift + assert_equal "RubyGems system software updated", out.shift + + assert_empty out + end + + def test_execute_system_with_gems + @cmd.options[:args] = %w[gem] + @cmd.options[:system] = true + + assert_raises Gem::MockGemUi::TermError do + use_ui @ui do + @cmd.execute + end + end + + assert_empty @ui.output + assert_equal "ERROR: Gem names are not allowed with the --system option\n", + @ui.error + end + + # before: + # a1 -> c1.2 + # after: + # a2 -> b2 # new dependency + # a2 -> c2 + + def test_execute_dependencies + spec_fetcher do |fetcher| + fetcher.gem 'a', 2, 'b' => 2, 'c' => 2 + fetcher.gem 'b', 2 + fetcher.gem 'c', 2 + + fetcher.clear + + fetcher.spec 'a', 1, 'c' => '1.2' + fetcher.spec 'c', '1.2' + end + + Gem::Specification.reset + + @cmd.options[:args] = [] + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating installed gems", out.shift + assert_equal "Updating a", out.shift + assert_equal "Gems updated: a b c", + out.shift + + assert_empty out + end + + def test_execute_rdoc + skip if RUBY_VERSION <= "1.8.7" + 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] + + @cmd.options[:args] = %w[a] + + use_ui @ui do + @cmd.execute + end + + wait_for_child_process_to_exit + + a2 = @specs['a-2'] + + assert_path_exists File.join(a2.doc_dir, 'rdoc') + end + + def test_execute_named + spec_fetcher do |fetcher| + fetcher.gem 'a', 2 + + fetcher.clear + + fetcher.spec 'a', 1 + end + + @cmd.options[:args] = %w[a] + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating installed gems", out.shift + assert_equal "Updating a", out.shift + assert_equal "Gems updated: a", out.shift + + assert_empty out + end + + def test_execute_named_some_up_to_date + spec_fetcher do |fetcher| + fetcher.gem 'a', 2 + fetcher.clear + fetcher.spec 'a', 1 + + fetcher.spec 'b', 2 + end + + @cmd.options[:args] = %w[a b] + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating installed gems", out.shift + assert_equal "Updating a", out.shift + assert_equal "Gems updated: a", out.shift + assert_equal "Gems already up-to-date: b", out.shift + + assert_empty out + end + + def test_execute_named_up_to_date + spec_fetcher do |fetcher| + fetcher.spec 'a', 2 + end + + @cmd.options[:args] = %w[a] + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating installed gems", out.shift + assert_equal "Nothing to update", out.shift + + assert_empty out + end + + def test_execute_named_up_to_date_prerelease + spec_fetcher do |fetcher| + fetcher.gem 'a', '3.a' + + fetcher.clear + + fetcher.gem 'a', 2 + end + + @cmd.options[:args] = %w[a] + @cmd.options[:prerelease] = true + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating installed gems", 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 + spec_fetcher do |fetcher| + fetcher.gem 'a', 2 + end + + @cmd.options[:args] = [] + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating installed gems", out.shift + assert_equal "Nothing to update", out.shift + + assert_empty out + end + + def test_execute_user_install + spec_fetcher do |fetcher| + fetcher.gem 'a', 2 + + fetcher.clear + + fetcher.spec 'a', 1 + end + + @cmd.handle_options %w[--user-install] + + use_ui @ui do + @cmd.execute + end + + installer = @cmd.installer + user_install = installer.instance_variable_get :@user_install + + assert user_install, 'user_install must be set on the installer' + 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(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 @specs['a-1'] + end + end + + def test_fetch_remote_gems_mismatch + platform = Gem::Platform.new 'x86-freebsd9' + + 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(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 = [ + [Gem::NameTuple.new('a', v(2), Gem::Platform::RUBY), + Gem::Source.new(@gem_repo)], + [Gem::NameTuple.new('a', v('3.a'), Gem::Platform::RUBY), + Gem::Source.new(@gem_repo)], + ] + + assert_equal expected, @cmd.fetch_remote_gems(specs['a-1']) + end + + def test_handle_options_system + @cmd.handle_options %w[--system] + + expected = { + :args => [], + :document => %w[rdoc ri], + :force => false, + :system => true, + } + + assert_equal expected, @cmd.options + end + + def test_handle_options_system_non_version + assert_raises ArgumentError do + @cmd.handle_options %w[--system non-version] + end + end + + def test_handle_options_system_specific + @cmd.handle_options %w[--system 1.3.7] + + expected = { + :args => [], + :document => %w[rdoc ri], + :force => false, + :system => "1.3.7", + } + + assert_equal expected, @cmd.options + end + + def test_update_gem_prerelease + spec_fetcher do |fetcher| + fetcher.spec 'a', '1.a' + fetcher.gem 'a', '1.b' + end + + @cmd.update_gem 'a', Gem::Requirement.new('= 1.b') + + refute_empty @cmd.updated + + assert @cmd.installer.instance_variable_get :@prerelease + end + + def test_update_gem_unresolved_dependency + spec_fetcher do |fetcher| + fetcher.spec 'a', 1 + fetcher.gem 'a', 2 do |s| + s.add_dependency 'b', '>= 2' + end + + fetcher.spec 'b', 1 + end + + @cmd.update_gem 'a' + + assert_empty @cmd.updated + end + + def test_update_rubygems_arguments + @cmd.options[:system] = true + + arguments = @cmd.update_rubygems_arguments + + assert_equal '--prefix', arguments.shift + assert_equal Gem.prefix, arguments.shift + assert_equal '--no-rdoc', arguments.shift + assert_equal '--no-ri', arguments.shift + assert_equal '--previous-version', arguments.shift + assert_equal Gem::VERSION, arguments.shift + assert_empty arguments + end + + def test_update_rubygems_arguments_1_8_x + @cmd.options[:system] = '1.8.26' + + arguments = @cmd.update_rubygems_arguments + + assert_equal '--prefix', arguments.shift + assert_equal Gem.prefix, arguments.shift + assert_equal '--no-rdoc', arguments.shift + assert_equal '--no-ri', arguments.shift + assert_empty arguments + end + +end + |