diff options
Diffstat (limited to 'trunk/test/rubygems/test_gem_commands_update_command.rb')
-rw-r--r-- | trunk/test/rubygems/test_gem_commands_update_command.rb | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/trunk/test/rubygems/test_gem_commands_update_command.rb b/trunk/test/rubygems/test_gem_commands_update_command.rb new file mode 100644 index 0000000000..11da1f8a83 --- /dev/null +++ b/trunk/test/rubygems/test_gem_commands_update_command.rb @@ -0,0 +1,165 @@ +require 'test/unit' +require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities') +require 'rubygems/commands/update_command' + +class TestGemCommandsUpdateCommand < RubyGemTestCase + + def setup + super + + @cmd = Gem::Commands::UpdateCommand.new + + util_setup_fake_fetcher + + @a1_path = File.join @gemhome, 'cache', "#{@a1.full_name}.gem" + @a2_path = File.join @gemhome, 'cache', "#{@a2.full_name}.gem" + + util_setup_spec_fetcher @a1, @a2 + + @fetcher.data["#{@gem_repo}gems/#{@a1.full_name}.gem"] = + read_binary @a1_path + @fetcher.data["#{@gem_repo}gems/#{@a2.full_name}.gem"] = + read_binary @a2_path + end + + def test_execute + util_clear_gems + + Gem::Installer.new(@a1_path).install + + @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 #{@a2.name}", out.shift + assert_equal "Successfully installed #{@a2.full_name}", out.shift + assert_equal "Gems updated: #{@a2.name}", out.shift + + assert out.empty?, out.inspect + end + + # before: + # a1 -> c1.2 + # after: + # a2 -> b2 # new dependency + # a2 -> c2 + + def test_execute_dependencies + @a1.add_dependency 'c', '1.2' + + @c2 = quick_gem 'c', '2' do |s| + s.files = %w[lib/code.rb] + s.require_paths = %w[lib] + end + + @a2.add_dependency 'c', '2' + @a2.add_dependency 'b', '2' + + @b2_path = File.join @gemhome, 'cache', "#{@b2.full_name}.gem" + @c1_2_path = File.join @gemhome, 'cache', "#{@c1_2.full_name}.gem" + @c2_path = File.join @gemhome, 'cache', "#{@c2.full_name}.gem" + + @source_index = Gem::SourceIndex.new + @source_index.add_spec @a1 + @source_index.add_spec @a2 + @source_index.add_spec @b2 + @source_index.add_spec @c1_2 + @source_index.add_spec @c2 + + util_build_gem @a1 + util_build_gem @a2 + util_build_gem @c2 + + @fetcher.data["#{@gem_repo}gems/#{@a1.full_name}.gem"] = read_binary @a1_path + @fetcher.data["#{@gem_repo}gems/#{@a2.full_name}.gem"] = read_binary @a2_path + @fetcher.data["#{@gem_repo}gems/#{@b2.full_name}.gem"] = read_binary @b2_path + @fetcher.data["#{@gem_repo}gems/#{@c1_2.full_name}.gem"] = + read_binary @c1_2_path + @fetcher.data["#{@gem_repo}gems/#{@c2.full_name}.gem"] = read_binary @c2_path + + util_setup_spec_fetcher @a1, @a2, @b2, @c1_2, @c2 + util_clear_gems + + Gem::Installer.new(@c1_2_path).install + Gem::Installer.new(@a1_path).install + + @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 #{@a2.name}", out.shift + assert_equal "Successfully installed #{@c2.full_name}", out.shift + assert_equal "Successfully installed #{@b2.full_name}", out.shift + assert_equal "Successfully installed #{@a2.full_name}", out.shift + assert_equal "Gems updated: #{@c2.name}, #{@b2.name}, #{@a2.name}", + out.shift + + assert out.empty?, out.inspect + end + + def test_execute_named + util_clear_gems + + Gem::Installer.new(@a1_path).install + + @cmd.options[:args] = [@a1.name] + + use_ui @ui do + @cmd.execute + end + + out = @ui.output.split "\n" + assert_equal "Updating installed gems", out.shift + assert_equal "Updating #{@a2.name}", out.shift + assert_equal "Successfully installed #{@a2.full_name}", out.shift + assert_equal "Gems updated: #{@a2.name}", out.shift + + assert out.empty?, out.inspect + end + + def test_execute_named_up_to_date + util_clear_gems + + Gem::Installer.new(@a2_path).install + + @cmd.options[:args] = [@a2.name] + + 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 out.empty?, out.inspect + end + + def test_execute_up_to_date + util_clear_gems + + Gem::Installer.new(@a2_path).install + + @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 out.empty?, out.inspect + end + +end + |