mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00

A default gem does not always live in the same place. For example,
Bundler may be installed to `site_dir` when RubyGems have been upgraded.
A more reliable way seems to actually activate the default gem, so that
we can know for sure where it lives.
c69f6dfb18
269 lines
5.5 KiB
Ruby
269 lines
5.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative "helper"
|
|
require "rubygems/commands/contents_command"
|
|
|
|
class TestGemCommandsContentsCommand < Gem::TestCase
|
|
def setup
|
|
super
|
|
|
|
@cmd = Gem::Commands::ContentsCommand.new
|
|
end
|
|
|
|
def gem(name, version = 2)
|
|
spec = quick_gem name, version do |gem|
|
|
gem.files = %W[lib/#{name}.rb Rakefile]
|
|
end
|
|
write_file File.join(*%W[gems #{spec.full_name} lib #{name}.rb])
|
|
write_file File.join(*%W[gems #{spec.full_name} Rakefile])
|
|
end
|
|
|
|
def test_execute
|
|
@cmd.options[:args] = %w[foo]
|
|
|
|
gem "foo"
|
|
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
|
|
assert_match %r{lib/foo\.rb}, @ui.output
|
|
assert_match(/Rakefile/, @ui.output)
|
|
assert_equal "", @ui.error
|
|
end
|
|
|
|
def test_execute_all
|
|
@cmd.options[:all] = true
|
|
|
|
gem "foo"
|
|
gem "bar"
|
|
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
|
|
assert_match %r{lib/foo\.rb}, @ui.output
|
|
assert_match %r{lib/bar\.rb}, @ui.output
|
|
assert_match(/Rakefile/, @ui.output)
|
|
assert_equal "", @ui.error
|
|
end
|
|
|
|
def test_execute_bad_gem
|
|
@cmd.options[:args] = %w[foo]
|
|
|
|
assert_raise Gem::MockGemUi::TermError do
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
end
|
|
|
|
assert_match(/Unable to find gem 'foo' in default gem paths/, @ui.output)
|
|
assert_match(/Directories searched:/, @ui.output)
|
|
assert_equal "", @ui.error
|
|
end
|
|
|
|
def test_execute_exact_match
|
|
@cmd.options[:args] = %w[foo]
|
|
gem "foo"
|
|
gem "bar"
|
|
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
|
|
assert_match %r{lib/foo\.rb}, @ui.output
|
|
assert_match(/Rakefile/, @ui.output)
|
|
assert_equal "", @ui.error
|
|
end
|
|
|
|
def test_execute_lib_only
|
|
@cmd.options[:args] = %w[foo]
|
|
@cmd.options[:lib_only] = true
|
|
|
|
gem "foo"
|
|
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
|
|
assert_match %r{lib/foo\.rb}, @ui.output
|
|
refute_match(/Rakefile/, @ui.output)
|
|
|
|
assert_equal "", @ui.error
|
|
end
|
|
|
|
def test_execute_missing_single
|
|
@cmd.options[:args] = %w[foo]
|
|
|
|
assert_raise Gem::MockGemUi::TermError do
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
end
|
|
|
|
assert_match "Unable to find gem 'foo'", @ui.output
|
|
assert_empty @ui.error
|
|
end
|
|
|
|
def test_execute_missing_version
|
|
@cmd.options[:args] = %w[foo]
|
|
@cmd.options[:version] = Gem::Requirement.new "= 2"
|
|
|
|
gem "foo", 1
|
|
|
|
assert_raise Gem::MockGemUi::TermError do
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
end
|
|
|
|
assert_match "Unable to find gem 'foo'", @ui.output
|
|
assert_empty @ui.error
|
|
end
|
|
|
|
def test_execute_missing_multiple
|
|
@cmd.options[:args] = %w[foo bar]
|
|
|
|
gem "foo"
|
|
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
|
|
assert_match "lib/foo.rb", @ui.output
|
|
assert_match "Unable to find gem 'bar'", @ui.output
|
|
|
|
assert_empty @ui.error
|
|
end
|
|
|
|
def test_execute_multiple
|
|
@cmd.options[:args] = %w[foo bar]
|
|
|
|
gem "foo"
|
|
gem "bar"
|
|
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
|
|
assert_match %r{lib/foo\.rb}, @ui.output
|
|
assert_match %r{lib/bar\.rb}, @ui.output
|
|
assert_match(/Rakefile/, @ui.output)
|
|
assert_equal "", @ui.error
|
|
end
|
|
|
|
def test_execute_show_install_dir
|
|
@cmd.options[:args] = %w[foo]
|
|
@cmd.options[:show_install_dir] = true
|
|
|
|
gem "foo"
|
|
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
|
|
expected = File.join @gemhome, "gems", "foo-2"
|
|
|
|
assert_equal "#{expected}\n", @ui.output
|
|
assert_equal "", @ui.error
|
|
end
|
|
|
|
def test_execute_show_install_dir_latest_version
|
|
@cmd.options[:args] = %w[foo]
|
|
@cmd.options[:show_install_dir] = true
|
|
|
|
gem "foo", 1
|
|
gem "foo", 2
|
|
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
|
|
expected = File.join @gemhome, "gems", "foo-2"
|
|
|
|
assert_equal "#{expected}\n", @ui.output
|
|
assert_equal "", @ui.error
|
|
end
|
|
|
|
def test_execute_show_install_dir_version
|
|
@cmd.options[:args] = %w[foo]
|
|
@cmd.options[:show_install_dir] = true
|
|
@cmd.options[:version] = Gem::Requirement.new "= 1"
|
|
|
|
gem "foo", 1
|
|
gem "foo", 2
|
|
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
|
|
expected = File.join @gemhome, "gems", "foo-1"
|
|
|
|
assert_equal "#{expected}\n", @ui.output
|
|
assert_equal "", @ui.error
|
|
end
|
|
|
|
def test_execute_no_prefix
|
|
@cmd.options[:args] = %w[foo]
|
|
@cmd.options[:prefix] = false
|
|
|
|
gem "foo"
|
|
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
|
|
expected = <<-EOF
|
|
Rakefile
|
|
lib/foo.rb
|
|
EOF
|
|
|
|
assert_equal expected, @ui.output
|
|
|
|
assert_equal "", @ui.error
|
|
end
|
|
|
|
def test_execute_default_gem
|
|
default_gem_spec = new_default_spec("default", "2.0.0.0",
|
|
nil, "default/gem.rb")
|
|
default_gem_spec.executables = ["default_command"]
|
|
install_default_gems(default_gem_spec)
|
|
|
|
@cmd.options[:args] = %w[default]
|
|
|
|
use_ui @ui do
|
|
@cmd.execute
|
|
end
|
|
|
|
expected = [
|
|
[File.join(@gemhome, "bin"), "default_command"],
|
|
[File.join(@tempdir, "default_gems", "lib"), "default/gem.rb"],
|
|
].sort.map {|a|File.join a }.join "\n"
|
|
|
|
assert_equal expected, @ui.output.chomp
|
|
assert_equal "", @ui.error
|
|
end
|
|
|
|
def test_handle_options
|
|
refute @cmd.options[:lib_only]
|
|
assert @cmd.options[:prefix]
|
|
assert_empty @cmd.options[:specdirs]
|
|
assert_nil @cmd.options[:version]
|
|
refute @cmd.options[:show_install_dir]
|
|
|
|
@cmd.send :handle_options, %w[
|
|
-l
|
|
-s
|
|
foo
|
|
--version 0.0.2
|
|
--no-prefix
|
|
--show-install-dir
|
|
]
|
|
|
|
assert @cmd.options[:lib_only]
|
|
refute @cmd.options[:prefix]
|
|
assert_equal %w[foo], @cmd.options[:specdirs]
|
|
assert_equal Gem::Requirement.new("0.0.2"), @cmd.options[:version]
|
|
assert @cmd.options[:show_install_dir]
|
|
end
|
|
end
|