summaryrefslogtreecommitdiff
path: root/jni/ruby/test/rubygems/test_gem_commands_unpack_command.rb
diff options
context:
space:
mode:
Diffstat (limited to 'jni/ruby/test/rubygems/test_gem_commands_unpack_command.rb')
-rw-r--r--jni/ruby/test/rubygems/test_gem_commands_unpack_command.rb210
1 files changed, 210 insertions, 0 deletions
diff --git a/jni/ruby/test/rubygems/test_gem_commands_unpack_command.rb b/jni/ruby/test/rubygems/test_gem_commands_unpack_command.rb
new file mode 100644
index 0000000..59f6cc6
--- /dev/null
+++ b/jni/ruby/test/rubygems/test_gem_commands_unpack_command.rb
@@ -0,0 +1,210 @@
+require 'rubygems/test_case'
+require 'rubygems/commands/unpack_command'
+
+class TestGemCommandsUnpackCommand < Gem::TestCase
+
+ def setup
+ super
+
+ Dir.chdir @tempdir do
+ @cmd = Gem::Commands::UnpackCommand.new
+ end
+ end
+
+ def test_find_in_cache
+ util_make_gems
+
+ assert_equal(
+ @cmd.find_in_cache(File.basename @a1.cache_file),
+ @a1.cache_file,
+ 'found a-1.gem in the cache'
+ )
+ end
+
+ def test_get_path
+ specs = spec_fetcher do |fetcher|
+ fetcher.gem 'a', 1
+ end
+
+ dep = Gem::Dependency.new 'a', 1
+ assert_equal(
+ @cmd.get_path(dep),
+ specs['a-1'].cache_file,
+ 'fetches a-1 and returns the cache path'
+ )
+
+ FileUtils.rm specs['a-1'].cache_file
+
+ assert_equal(
+ @cmd.get_path(dep),
+ specs['a-1'].cache_file,
+ 'when removed from cache, refetches a-1'
+ )
+ end
+
+ def test_execute
+ util_make_gems
+
+ @cmd.options[:args] = %w[a b]
+
+ use_ui @ui do
+ Dir.chdir @tempdir do
+ @cmd.execute
+ end
+ end
+
+ assert File.exist?(File.join(@tempdir, 'a-3.a')), 'a should be unpacked'
+ assert File.exist?(File.join(@tempdir, 'b-2')), 'b should be unpacked'
+ end
+
+ def test_execute_gem_path
+ spec_fetcher do |fetcher|
+ fetcher.gem 'a', '3.a'
+ end
+
+ Gem.clear_paths
+
+ gemhome2 = File.join @tempdir, 'gemhome2'
+
+ Gem.paths = { "GEM_PATH" => [gemhome2, @gemhome], "GEM_HOME" => gemhome2 }
+
+ @cmd.options[:args] = %w[a]
+
+ use_ui @ui do
+ Dir.chdir @tempdir do
+ @cmd.execute
+ end
+ end
+
+ assert File.exist?(File.join(@tempdir, 'a-3.a'))
+ end
+
+ def test_execute_gem_path_missing
+ spec_fetcher
+
+ Gem.clear_paths
+
+ gemhome2 = File.join @tempdir, 'gemhome2'
+
+ Gem.paths = { "GEM_PATH" => [gemhome2, @gemhome], "GEM_HOME" => gemhome2 }
+
+ @cmd.options[:args] = %w[z]
+
+ use_ui @ui do
+ Dir.chdir @tempdir do
+ @cmd.execute
+ end
+ end
+
+ assert_equal '', @ui.output
+ end
+
+ def test_execute_remote
+ spec_fetcher do |fetcher|
+ fetcher.spec 'a', 1
+ fetcher.gem 'a', 2
+
+ fetcher.clear
+ end
+
+ Gem.configuration.verbose = :really
+ @cmd.options[:args] = %w[a]
+
+ use_ui @ui do
+ Dir.chdir @tempdir do
+ @cmd.execute
+ end
+ end
+
+ assert File.exist?(File.join(@tempdir, 'a-2')), 'a should be unpacked'
+ end
+
+ def test_execute_spec
+ util_make_gems
+
+ @cmd.options[:args] = %w[a b]
+ @cmd.options[:spec] = true
+
+ use_ui @ui do
+ Dir.chdir @tempdir do
+ @cmd.execute
+ end
+ end
+
+ assert File.exist?(File.join(@tempdir, 'a-3.a.gemspec'))
+ assert File.exist?(File.join(@tempdir, 'b-2.gemspec'))
+ end
+
+ def test_execute_sudo
+ skip 'Cannot perform this test on windows (chmod)' if win_platform?
+
+ util_make_gems
+
+ FileUtils.chmod 0555, @gemhome
+
+ @cmd.options[:args] = %w[b]
+
+ use_ui @ui do
+ Dir.chdir @tempdir do
+ @cmd.execute
+ end
+ end
+
+ assert File.exist?(File.join(@tempdir, 'b-2')), 'b should be unpacked'
+ ensure
+ FileUtils.chmod 0755, @gemhome
+ end
+
+ def test_execute_with_target_option
+ util_make_gems
+
+ target = 'with_target'
+ @cmd.options[:args] = %w[a]
+ @cmd.options[:target] = target
+
+ use_ui @ui do
+ Dir.chdir @tempdir do
+ @cmd.execute
+ end
+ end
+
+ assert File.exist?(File.join(@tempdir, target, 'a-3.a'))
+ end
+
+ def test_execute_exact_match
+ foo_spec = util_spec 'foo'
+ foo_bar_spec = util_spec 'foo_bar'
+
+ use_ui @ui do
+ Dir.chdir @tempdir do
+ Gem::Package.build foo_spec
+ Gem::Package.build foo_bar_spec
+ end
+ end
+
+ foo_path = File.join(@tempdir, "#{foo_spec.full_name}.gem")
+ foo_bar_path = File.join(@tempdir, "#{foo_bar_spec.full_name}.gem")
+ Gem::Installer.new(foo_path).install
+ Gem::Installer.new(foo_bar_path).install
+
+ @cmd.options[:args] = %w[foo]
+
+ use_ui @ui do
+ Dir.chdir @tempdir do
+ @cmd.execute
+ end
+ end
+
+ assert_path_exists File.join(@tempdir, foo_spec.full_name)
+ end
+
+ def test_handle_options_metadata
+ refute @cmd.options[:spec]
+
+ @cmd.send :handle_options, %w[--spec a]
+
+ assert @cmd.options[:spec]
+ end
+
+end
+