diff options
author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2020-02-06 21:54:23 +0900 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2020-02-06 21:57:18 +0900 |
commit | bd0a02d1433b6d9a9dcde38eb9fb2dbc3b1071e9 (patch) | |
tree | 6aad8ab42a15c62490a26cf24c362ffc76ad9764 /test/rubygems/test_gem_commands_query_command.rb | |
parent | d767da428c28b7b9fec56b383bb32f6f76c6ad26 (diff) |
Revert to remove the query command of rubygems.
The original commit was https://github.com/rubygems/rubygems/pull/3119
Diffstat (limited to 'test/rubygems/test_gem_commands_query_command.rb')
-rw-r--r-- | test/rubygems/test_gem_commands_query_command.rb | 861 |
1 files changed, 861 insertions, 0 deletions
diff --git a/test/rubygems/test_gem_commands_query_command.rb b/test/rubygems/test_gem_commands_query_command.rb new file mode 100644 index 0000000000..a25effb548 --- /dev/null +++ b/test/rubygems/test_gem_commands_query_command.rb @@ -0,0 +1,861 @@ +# frozen_string_literal: true +require 'rubygems/test_case' +require 'rubygems/commands/query_command' + +module TestGemCommandsQueryCommandSetup + def setup + super + + @cmd = Gem::Commands::QueryCommand.new + + @specs = add_gems_to_fetcher + @stub_ui = Gem::MockGemUi.new + @stub_fetcher = Gem::FakeFetcher.new + + @stub_fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] = proc do + raise Gem::RemoteFetcher::FetchError + end + end +end + +class TestGemCommandsQueryCommandWithInstalledGems < Gem::TestCase + + include TestGemCommandsQueryCommandSetup + + def test_execute + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.handle_options %w[-r] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** REMOTE GEMS *** + +a (2) +pl (1 i386-linux) + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_all + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.handle_options %w[-r --all] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** REMOTE GEMS *** + +a (2, 1) +pl (1 i386-linux) + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_all_prerelease + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.handle_options %w[-r --all --prerelease] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** REMOTE GEMS *** + +a (3.a, 2, 1) +pl (1 i386-linux) + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_details + spec_fetcher do |fetcher| + fetcher.spec 'a', 2 do |s| + s.summary = 'This is a lot of text. ' * 4 + s.authors = ['Abraham Lincoln', 'Hirohito'] + s.homepage = 'http://a.example.com/' + end + + fetcher.legacy_platform + end + + @cmd.handle_options %w[-r -d] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** REMOTE GEMS *** + +a (2) + Authors: Abraham Lincoln, Hirohito + Homepage: http://a.example.com/ + + This is a lot of text. This is a lot of text. This is a lot of text. + This is a lot of text. + +pl (1) + Platform: i386-linux + Author: A User + Homepage: http://example.com + + this is a summary + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_details_cleans_text + spec_fetcher do |fetcher| + fetcher.spec 'a', 2 do |s| + s.summary = 'This is a lot of text. ' * 4 + s.authors = ["Abraham Lincoln \x01", "\x02 Hirohito"] + s.homepage = "http://a.example.com/\x03" + end + + fetcher.legacy_platform + end + + @cmd.handle_options %w[-r -d] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** REMOTE GEMS *** + +a (2) + Authors: Abraham Lincoln ., . Hirohito + Homepage: http://a.example.com/. + + This is a lot of text. This is a lot of text. This is a lot of text. + This is a lot of text. + +pl (1) + Platform: i386-linux + Author: A User + Homepage: http://example.com + + this is a summary + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_details_truncates_summary + spec_fetcher do |fetcher| + fetcher.spec 'a', 2 do |s| + s.summary = 'This is a lot of text. ' * 10_000 + s.authors = ["Abraham Lincoln \x01", "\x02 Hirohito"] + s.homepage = "http://a.example.com/\x03" + end + + fetcher.legacy_platform + end + + @cmd.handle_options %w[-r -d] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** REMOTE GEMS *** + +a (2) + Authors: Abraham Lincoln ., . Hirohito + Homepage: http://a.example.com/. + + Truncating the summary for a-2 to 100,000 characters: +#{" This is a lot of text. This is a lot of text. This is a lot of text.\n" * 1449} This is a lot of te + +pl (1) + Platform: i386-linux + Author: A User + Homepage: http://example.com + + this is a summary + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_installed + @cmd.handle_options %w[-n a --installed] + + assert_raises Gem::MockGemUi::SystemExitException do + use_ui @stub_ui do + @cmd.execute + end + end + + assert_equal "true\n", @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_installed_inverse + @cmd.handle_options %w[-n a --no-installed] + + e = assert_raises Gem::MockGemUi::TermError do + use_ui @stub_ui do + @cmd.execute + end + end + + assert_equal "false\n", @stub_ui.output + assert_equal '', @stub_ui.error + + assert_equal 1, e.exit_code + end + + def test_execute_installed_inverse_not_installed + @cmd.handle_options %w[-n not_installed --no-installed] + + assert_raises Gem::MockGemUi::SystemExitException do + use_ui @stub_ui do + @cmd.execute + end + end + + assert_equal "true\n", @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_installed_no_name + @cmd.handle_options %w[--installed] + + e = assert_raises Gem::MockGemUi::TermError do + use_ui @stub_ui do + @cmd.execute + end + end + + assert_equal '', @stub_ui.output + assert_equal "ERROR: You must specify a gem name\n", @stub_ui.error + + assert_equal 4, e.exit_code + end + + def test_execute_installed_not_installed + @cmd.handle_options %w[-n not_installed --installed] + + e = assert_raises Gem::MockGemUi::TermError do + use_ui @stub_ui do + @cmd.execute + end + end + + assert_equal "false\n", @stub_ui.output + assert_equal '', @stub_ui.error + + assert_equal 1, e.exit_code + end + + def test_execute_installed_version + @cmd.handle_options %w[-n a --installed --version 2] + + assert_raises Gem::MockGemUi::SystemExitException do + use_ui @stub_ui do + @cmd.execute + end + end + + assert_equal "true\n", @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_installed_version_not_installed + @cmd.handle_options %w[-n c --installed --version 2] + + e = assert_raises Gem::MockGemUi::TermError do + use_ui @stub_ui do + @cmd.execute + end + end + + assert_equal "false\n", @stub_ui.output + assert_equal '', @stub_ui.error + + assert_equal 1, e.exit_code + end + + def test_execute_local + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.options[:domain] = :local + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** LOCAL GEMS *** + +a (3.a, 2, 1) +pl (1 i386-linux) + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_local_notty + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.handle_options %w[] + + @stub_ui.outs.tty = false + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF +a (3.a, 2, 1) +pl (1 i386-linux) + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_local_quiet + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.options[:domain] = :local + Gem.configuration.verbose = false + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF +a (3.a, 2, 1) +pl (1 i386-linux) + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_no_versions + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.handle_options %w[-r --no-versions] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** REMOTE GEMS *** + +a +pl + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_notty + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.handle_options %w[-r] + + @stub_ui.outs.tty = false + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF +a (2) +pl (1 i386-linux) + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_prerelease + @cmd.handle_options %w[-r --prerelease] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** REMOTE GEMS *** + +a (3.a) + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_prerelease_local + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.handle_options %w[-l --prerelease] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** LOCAL GEMS *** + +a (3.a, 2, 1) +pl (1 i386-linux) + EOF + + assert_equal expected, @stub_ui.output + end + + def test_execute_no_prerelease_local + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.handle_options %w[-l --no-prerelease] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** LOCAL GEMS *** + +a (2, 1) +pl (1 i386-linux) + EOF + + assert_equal expected, @stub_ui.output + end + + def test_execute_remote + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.options[:domain] = :remote + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** REMOTE GEMS *** + +a (2) +pl (1 i386-linux) + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_remote_notty + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.handle_options %w[] + + @stub_ui.outs.tty = false + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF +a (3.a, 2, 1) +pl (1 i386-linux) + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_remote_quiet + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.options[:domain] = :remote + Gem.configuration.verbose = false + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF +a (2) +pl (1 i386-linux) + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_make_entry + a_2_name = @specs['a-2'].original_name + + @stub_fetcher.data.delete \ + "#{@gem_repo}quick/Marshal.#{Gem.marshal_version}/#{a_2_name}.gemspec.rz" + + a2 = @specs['a-2'] + entry_tuples = [ + [Gem::NameTuple.new(a2.name, a2.version, a2.platform), + Gem.sources.first], + ] + + platforms = { a2.version => [a2.platform] } + + entry = @cmd.send :make_entry, entry_tuples, platforms + + assert_equal 'a (2)', entry + end + + # Test for multiple args handling! + def test_execute_multiple_args + spec_fetcher do |fetcher| + fetcher.legacy_platform + end + + @cmd.handle_options %w[a pl] + + use_ui @stub_ui do + @cmd.execute + end + + assert_match %r%^a %, @stub_ui.output + assert_match %r%^pl %, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_show_gems + @cmd.options[:name] = // + @cmd.options[:domain] = :remote + + use_ui @stub_ui do + @cmd.send :show_gems, /a/i + end + + assert_match %r%^a %, @stub_ui.output + refute_match %r%^pl %, @stub_ui.output + assert_empty @stub_ui.error + end + + private + + def add_gems_to_fetcher + spec_fetcher do |fetcher| + fetcher.spec 'a', 1 + fetcher.spec 'a', 2 + fetcher.spec 'a', '3.a' + end + end + +end + +class TestGemCommandsQueryCommandWithoutInstalledGems < Gem::TestCase + + include TestGemCommandsQueryCommandSetup + + def test_execute_platform + spec_fetcher do |fetcher| + fetcher.spec 'a', 1 + fetcher.spec 'a', 1 do |s| + s.platform = 'x86-linux' + end + + fetcher.spec 'a', 2 do |s| + s.platform = 'universal-darwin' + end + end + + @cmd.handle_options %w[-r -a] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** REMOTE GEMS *** + +a (2 universal-darwin, 1 ruby x86-linux) + EOF + + assert_equal expected, @stub_ui.output + assert_equal '', @stub_ui.error + end + + def test_execute_show_default_gems + spec_fetcher { |fetcher| fetcher.spec 'a', 2 } + + a1 = new_default_spec 'a', 1 + install_default_specs a1 + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** LOCAL GEMS *** + +a (2, default: 1) +EOF + + assert_equal expected, @stub_ui.output + end + + def test_execute_show_default_gems_with_platform + a1 = new_default_spec 'a', 1 + a1.platform = 'java' + install_default_specs a1 + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** LOCAL GEMS *** + +a (default: 1 java) +EOF + + assert_equal expected, @stub_ui.output + end + + def test_execute_default_details + spec_fetcher do |fetcher| + fetcher.spec 'a', 2 + end + + a1 = new_default_spec 'a', 1 + install_default_specs a1 + + @cmd.handle_options %w[-l -d] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** LOCAL GEMS *** + +a (2, 1) + Author: A User + Homepage: http://example.com + Installed at (2): #{@gemhome} + (1, default): #{a1.base_dir} + + this is a summary + EOF + + assert_equal expected, @stub_ui.output + end + + def test_execute_local_details + spec_fetcher do |fetcher| + fetcher.spec 'a', 1 do |s| + s.platform = 'x86-linux' + end + + fetcher.spec 'a', 2 do |s| + s.summary = 'This is a lot of text. ' * 4 + s.authors = ['Abraham Lincoln', 'Hirohito'] + s.homepage = 'http://a.example.com/' + s.platform = 'universal-darwin' + end + + fetcher.legacy_platform + end + + @cmd.handle_options %w[-l -d] + + use_ui @stub_ui do + @cmd.execute + end + + str = @stub_ui.output + + str.gsub!(/\(\d\): [^\n]*/, "-") + str.gsub!(/at: [^\n]*/, "at: -") + + expected = <<-EOF + +*** LOCAL GEMS *** + +a (2, 1) + Platforms: + 1: x86-linux + 2: universal-darwin + Authors: Abraham Lincoln, Hirohito + Homepage: http://a.example.com/ + Installed at - + - + + This is a lot of text. This is a lot of text. This is a lot of text. + This is a lot of text. + +pl (1) + Platform: i386-linux + Author: A User + Homepage: http://example.com + Installed at: - + + this is a summary + EOF + + assert_equal expected, @stub_ui.output + end + + def test_execute_exact_remote + spec_fetcher do |fetcher| + fetcher.spec 'coolgem-omg', 3 + fetcher.spec 'coolgem', '4.2.1' + fetcher.spec 'wow_coolgem', 1 + end + + @cmd.handle_options %w[--remote --exact coolgem] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** REMOTE GEMS *** + +coolgem (4.2.1) + EOF + + assert_equal expected, @stub_ui.output + end + + def test_execute_exact_local + spec_fetcher do |fetcher| + fetcher.spec 'coolgem-omg', 3 + fetcher.spec 'coolgem', '4.2.1' + fetcher.spec 'wow_coolgem', 1 + end + + @cmd.handle_options %w[--exact coolgem] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** LOCAL GEMS *** + +coolgem (4.2.1) + EOF + + assert_equal expected, @stub_ui.output + end + + def test_execute_exact_multiple + spec_fetcher do |fetcher| + fetcher.spec 'coolgem-omg', 3 + fetcher.spec 'coolgem', '4.2.1' + fetcher.spec 'wow_coolgem', 1 + + fetcher.spec 'othergem-omg', 3 + fetcher.spec 'othergem', '1.2.3' + fetcher.spec 'wow_othergem', 1 + end + + @cmd.handle_options %w[--exact coolgem othergem] + + use_ui @stub_ui do + @cmd.execute + end + + expected = <<-EOF + +*** LOCAL GEMS *** + +coolgem (4.2.1) + +*** LOCAL GEMS *** + +othergem (1.2.3) + EOF + + assert_equal expected, @stub_ui.output + end + + def test_depprecated + assert @cmd.deprecated? + end + + private + + def add_gems_to_fetcher + spec_fetcher do |fetcher| + fetcher.download 'a', 1 + fetcher.download 'a', 2 + fetcher.download 'a', '3.a' + end + end + +end |