From 7d76314885be3532999684356657ce36da84d04e Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Tue, 30 Jun 2020 21:23:37 +0900 Subject: Merge RubyGems 3.1.4 --- .../specifications/rubyforge-0.0.1.gemspec | 14 +++ test/rubygems/test_gem.rb | 117 +++++++++++++++------ test/rubygems/test_gem_commands_build_command.rb | 19 +++- test/rubygems/test_gem_commands_sources_command.rb | 40 ++++++- .../test_gem_commands_uninstall_command.rb | 1 + test/rubygems/test_gem_package.rb | 11 +- test/rubygems/test_gem_package_tar_writer.rb | 5 + test/rubygems/test_gem_request_set.rb | 52 +++++++++ test/rubygems/test_gem_specification.rb | 32 ++++-- test/rubygems/test_gem_stub_specification.rb | 1 - 10 files changed, 241 insertions(+), 51 deletions(-) create mode 100644 test/rubygems/specifications/rubyforge-0.0.1.gemspec (limited to 'test/rubygems') diff --git a/test/rubygems/specifications/rubyforge-0.0.1.gemspec b/test/rubygems/specifications/rubyforge-0.0.1.gemspec new file mode 100644 index 0000000000..0df2c4c379 --- /dev/null +++ b/test/rubygems/specifications/rubyforge-0.0.1.gemspec @@ -0,0 +1,14 @@ +# -*- encoding: utf-8 -*- + +Gem::Specification.new do |s| + s.name = "rubyforge" + s.version = "0.0.1" + s.platform = "ruby" + s.require_paths = ["lib"] + s.summary = "A very bar gem" + s.authors = ["unknown"] + s.license = 'MIT' + s.homepage = 'http://example.com' + s.files = ['README.md'] + s.rubyforge_project = 'abc' +end diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index 6d223b7d69..b5d399f972 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb @@ -161,10 +161,8 @@ class TestGem < Gem::TestCase def test_self_install_permissions_with_format_executable_and_non_standard_ruby_install_name Gem::Installer.exec_format = nil - with_clean_path_to_ruby do - ruby_install_name 'ruby27' do - assert_self_install_permissions(format_executable: true) - end + ruby_install_name 'ruby27' do + assert_self_install_permissions(format_executable: true) end ensure Gem::Installer.exec_format = nil @@ -310,6 +308,21 @@ class TestGem < Gem::TestCase assert_equal %w(a-1 b-2 c-1), loaded_spec_names end + def test_activate_bin_path_in_debug_mode + a1 = util_spec 'a', '1' do |s| + s.executables = ['exec'] + end + + install_specs a1 + + output, status = Open3.capture2e( + { "GEM_HOME" => Gem.paths.home, "DEBUG_RESOLVER" => "1" }, + Gem.ruby, "-I", File.expand_path("../../lib", __dir__), "-e", "\"Gem.activate_bin_path('a', 'exec', '>= 0')\"" + ) + + assert status.success?, output + end + def test_activate_bin_path_gives_proper_error_for_bundler bundler = util_spec 'bundler', '2' do |s| s.executables = ['bundle'] @@ -1024,21 +1037,17 @@ class TestGem < Gem::TestCase end def test_self_ruby_escaping_spaces_in_path - with_clean_path_to_ruby do - with_bindir_and_exeext("C:/Ruby 1.8/bin", ".exe") do - ruby_install_name "ruby" do - assert_equal "\"C:/Ruby 1.8/bin/ruby.exe\"", Gem.ruby - end + with_bindir_and_exeext("C:/Ruby 1.8/bin", ".exe") do + ruby_install_name "ruby" do + assert_equal "\"C:/Ruby 1.8/bin/ruby.exe\"", Gem.ruby end end end def test_self_ruby_path_without_spaces - with_clean_path_to_ruby do - with_bindir_and_exeext("C:/Ruby18/bin", ".exe") do - ruby_install_name "ruby" do - assert_equal "C:/Ruby18/bin/ruby.exe", Gem.ruby - end + with_bindir_and_exeext("C:/Ruby18/bin", ".exe") do + ruby_install_name "ruby" do + assert_equal "C:/Ruby18/bin/ruby.exe", Gem.ruby end end end @@ -1090,7 +1099,7 @@ class TestGem < Gem::TestCase util_restore_RUBY_VERSION end - def test_self_ruby_version_with_prerelease + def test_self_ruby_version_with_svn_prerelease util_set_RUBY_VERSION '2.6.0', -1, 63539, 'ruby 2.6.0preview2 (2018-05-31 trunk 63539) [x86_64-linux]' assert_equal Gem::Version.new('2.6.0.preview2'), Gem.ruby_version @@ -1098,6 +1107,14 @@ class TestGem < Gem::TestCase util_restore_RUBY_VERSION end + def test_self_ruby_version_with_git_prerelease + util_set_RUBY_VERSION '2.7.0', -1, 'b563439274a402e33541f5695b1bfd4ac1085638', 'ruby 2.7.0preview3 (2019-11-23 master b563439274) [x86_64-linux]' + + assert_equal Gem::Version.new('2.7.0.preview3'), Gem.ruby_version + ensure + util_restore_RUBY_VERSION + end + def test_self_ruby_version_with_non_mri_implementations_with_mri_prerelase_compatibility util_set_RUBY_VERSION '2.6.0', -1, 63539, 'weirdjruby 9.2.0.0 (2.6.0preview2) 2018-05-24 81156a8 OpenJDK 64-Bit Server VM 25.171-b11 on 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11 [linux-x86_64]', 'weirdjruby', '9.2.0.0' @@ -1106,7 +1123,7 @@ class TestGem < Gem::TestCase util_restore_RUBY_VERSION end - def test_self_ruby_version_with_trunk + def test_self_ruby_version_with_svn_trunk util_set_RUBY_VERSION '1.9.2', -1, 23493, 'ruby 1.9.2dev (2009-05-20 trunk 23493) [x86_64-linux]' assert_equal Gem::Version.new('1.9.2.dev'), Gem.ruby_version @@ -1114,6 +1131,14 @@ class TestGem < Gem::TestCase util_restore_RUBY_VERSION end + def test_self_ruby_version_with_git_master + util_set_RUBY_VERSION '2.7.0', -1, '5de284ec78220e75643f89b454ce999da0c1c195', 'ruby 2.7.0dev (2019-12-23T01:37:30Z master 5de284ec78) [x86_64-linux]' + + assert_equal Gem::Version.new('2.7.0.dev'), Gem.ruby_version + ensure + util_restore_RUBY_VERSION + end + def test_self_rubygems_version assert_equal Gem::Version.new(Gem::VERSION), Gem.rubygems_version end @@ -1731,6 +1756,18 @@ class TestGem < Gem::TestCase assert_nil Gem.find_unresolved_default_spec("README") end + def test_register_default_spec_old_style_with_folder_starting_with_lib + Gem.clear_default_specs + + old_style = Gem::Specification.new do |spec| + spec.files = ["libexec/bundle", "foo.rb", "bar.rb"] + end + + Gem.register_default_spec old_style + + assert_equal old_style, Gem.find_unresolved_default_spec("foo.rb") + end + def test_use_gemdeps gem_deps_file = 'gem.deps.rb'.tap(&Gem::UNTAINT) spec = util_spec 'a', 1 @@ -1903,16 +1940,38 @@ You may need to `gem install -g` to install missing gems assert platform_defaults.is_a? Hash end - def ruby_install_name(name) - orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name'] - RbConfig::CONFIG['ruby_install_name'] = name + # Ensure that `Gem.source_date_epoch` is consistent even if + # $SOURCE_DATE_EPOCH has not been set. + def test_default_source_date_epoch_doesnt_change + old_epoch = ENV['SOURCE_DATE_EPOCH'] + ENV['SOURCE_DATE_EPOCH'] = nil - yield + # Unfortunately, there is no real way to test this aside from waiting + # enough for `Time.now.to_i` to change -- which is a whole second. + # + # Fortunately, we only need to do this once. + a = Gem.source_date_epoch + sleep 1 + b = Gem.source_date_epoch + assert_equal a, b ensure - if orig_RUBY_INSTALL_NAME - RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME - else - RbConfig::CONFIG.delete 'ruby_install_name' + ENV['SOURCE_DATE_EPOCH'] = old_epoch + end + + def ruby_install_name(name) + with_clean_path_to_ruby do + orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name'] + RbConfig::CONFIG['ruby_install_name'] = name + + begin + yield + ensure + if orig_RUBY_INSTALL_NAME + RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME + else + RbConfig::CONFIG.delete 'ruby_install_name' + end + end end end @@ -1924,16 +1983,6 @@ You may need to `gem install -g` to install missing gems end end - def with_clean_path_to_ruby - orig_ruby = Gem.ruby - - Gem.instance_variable_set :@ruby, nil - - yield - ensure - Gem.instance_variable_set :@ruby, orig_ruby - end - def with_plugin(path) test_plugin_path = File.expand_path("test/rubygems/plugin/#{path}", PROJECT_DIR) diff --git a/test/rubygems/test_gem_commands_build_command.rb b/test/rubygems/test_gem_commands_build_command.rb index 50c447e2eb..309e15f859 100644 --- a/test/rubygems/test_gem_commands_build_command.rb +++ b/test/rubygems/test_gem_commands_build_command.rb @@ -122,6 +122,23 @@ class TestGemCommandsBuildCommand < Gem::TestCase util_test_build_gem @gem end + def test_execute_rubyforge_project_warning + rubyforge_gemspec = File.join SPECIFICATIONS, "rubyforge-0.0.1.gemspec" + + @cmd.options[:args] = [rubyforge_gemspec] + + use_ui @ui do + Dir.chdir @tempdir do + @cmd.execute + end + end + + error = @ui.error.split("\n") + assert_equal "WARNING: rubyforge_project= is deprecated and ignored. Please remove this from your gemspec to ensure that your gem continues to build in the future.", error.shift + assert_equal "WARNING: See https://guides.rubygems.org/specification-reference/ for help", error.shift + assert_equal [], error + end + def test_execute_strict_with_warnings bad_gem = util_spec 'some_bad_gem' do |s| s.files = ['README.md'] @@ -147,7 +164,7 @@ class TestGemCommandsBuildCommand < Gem::TestCase error = @ui.error.split "\n" assert_equal "WARNING: licenses is empty, but is recommended. Use a license identifier from", error.shift assert_equal "http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.", error.shift - assert_equal "WARNING: See http://guides.rubygems.org/specification-reference/ for help", error.shift + assert_equal "WARNING: See https://guides.rubygems.org/specification-reference/ for help", error.shift assert_equal [], error gem_file = File.join @tempdir, File.basename(@gem.cache_file) diff --git a/test/rubygems/test_gem_commands_sources_command.rb b/test/rubygems/test_gem_commands_sources_command.rb index b63fbce81f..3a0899245b 100644 --- a/test/rubygems/test_gem_commands_sources_command.rb +++ b/test/rubygems/test_gem_commands_sources_command.rb @@ -247,7 +247,7 @@ source http://gems.example.com/ already present in the cache end def test_execute_add_http_rubygems_org - http_rubygems_org = 'http://rubygems.org' + http_rubygems_org = 'http://rubygems.org/' spec_fetcher do |fetcher| fetcher.spec 'a', 1 @@ -284,6 +284,44 @@ source http://gems.example.com/ already present in the cache assert_empty @ui.error end + def test_execute_add_https_rubygems_org + https_rubygems_org = 'https://rubygems.org/' + + spec_fetcher do |fetcher| + fetcher.spec 'a', 1 + end + + specs = Gem::Specification.map do |spec| + [spec.name, spec.version, spec.original_platform] + end + + specs_dump_gz = StringIO.new + Zlib::GzipWriter.wrap specs_dump_gz do |io| + Marshal.dump specs, io + end + + @fetcher.data["#{https_rubygems_org}/specs.#{@marshal_version}.gz"] = + specs_dump_gz.string + + @cmd.handle_options %W[--add #{https_rubygems_org}] + + ui = Gem::MockGemUi.new "n" + + use_ui ui do + assert_raises Gem::MockGemUi::TermError do + @cmd.execute + end + end + + assert_equal [@gem_repo], Gem.sources + + expected = <<-EXPECTED + EXPECTED + + assert_equal expected, @ui.output + assert_empty @ui.error + end + def test_execute_add_bad_uri @cmd.handle_options %w[--add beta-gems.example.com] diff --git a/test/rubygems/test_gem_commands_uninstall_command.rb b/test/rubygems/test_gem_commands_uninstall_command.rb index 927a241203..c3582390f9 100644 --- a/test/rubygems/test_gem_commands_uninstall_command.rb +++ b/test/rubygems/test_gem_commands_uninstall_command.rb @@ -361,6 +361,7 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase end assert_equal %w[default-1], Gem::Specification.all_names.sort + assert_equal "INFO: Uninstalled all gems in #{@gemhome}", @ui.output.split("\n").last end def test_execute_outside_gem_home diff --git a/test/rubygems/test_gem_package.rb b/test/rubygems/test_gem_package.rb index 5da247e141..64ceda39b2 100644 --- a/test/rubygems/test_gem_package.rb +++ b/test/rubygems/test_gem_package.rb @@ -106,7 +106,7 @@ class TestGemPackage < Gem::Package::TarTestCase assert_equal expected, YAML.load(checksums) end - def test_build_time_source_date_epoch + def test_build_time_uses_source_date_epoch epoch = ENV["SOURCE_DATE_EPOCH"] ENV["SOURCE_DATE_EPOCH"] = "123456789" @@ -124,12 +124,10 @@ class TestGemPackage < Gem::Package::TarTestCase ENV["SOURCE_DATE_EPOCH"] = epoch end - def test_build_time_source_date_epoch_automatically_set + def test_build_time_without_source_date_epoch epoch = ENV["SOURCE_DATE_EPOCH"] ENV["SOURCE_DATE_EPOCH"] = nil - start_time = Time.now.utc.to_i - spec = Gem::Specification.new 'build', '1' spec.summary = 'build' spec.authors = 'build' @@ -138,14 +136,11 @@ class TestGemPackage < Gem::Package::TarTestCase package = Gem::Package.new spec.file_name - end_time = Time.now.utc.to_i - assert_kind_of Time, package.build_time build_time = package.build_time.to_i - assert_operator(start_time, :<=, build_time) - assert_operator(build_time, :<=, end_time) + assert_equal Gem.source_date_epoch.to_i, build_time ensure ENV["SOURCE_DATE_EPOCH"] = epoch end diff --git a/test/rubygems/test_gem_package_tar_writer.rb b/test/rubygems/test_gem_package_tar_writer.rb index 81661da45a..903d681c7e 100644 --- a/test/rubygems/test_gem_package_tar_writer.rb +++ b/test/rubygems/test_gem_package_tar_writer.rb @@ -8,6 +8,11 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase def setup super + # Setting `@default_source_date_epoch` to `nil` effectively resets the + # value used for `Gem.source_date_epoch` whenever `$SOURCE_DATE_EPOCH` + # is not set. + Gem.instance_variable_set(:'@default_source_date_epoch', nil) + @data = 'abcde12345' @io = TempIO.new @tar_writer = Gem::Package::TarWriter.new @io diff --git a/test/rubygems/test_gem_request_set.rb b/test/rubygems/test_gem_request_set.rb index ac344015e7..fb71829471 100644 --- a/test/rubygems/test_gem_request_set.rb +++ b/test/rubygems/test_gem_request_set.rb @@ -183,6 +183,58 @@ DEPENDENCIES assert_path_exists File.join @gemhome, 'specifications', 'b-1.gemspec' end + def test_install_from_gemdeps_complex_dependencies + quick_gem("z", 1) + quick_gem("z", "1.0.1") + quick_gem("z", "1.0.2") + quick_gem("z", "1.0.3") + quick_gem("z", 2) + + spec_fetcher do |fetcher| + fetcher.download "z", 1 + end + + rs = Gem::RequestSet.new + installed = [] + + File.open 'Gemfile.lock', 'w' do |io| + io.puts <<-LOCKFILE +GEM + remote: #{@gem_repo} + specs: + z (1) + +PLATFORMS + #{Gem::Platform::RUBY} + +DEPENDENCIES + z (~> 1.0, >= 1.0.1) + LOCKFILE + end + + File.open 'testo.gemspec', 'w' do |io| + io.puts <<-LOCKFILE +Gem::Specification.new do |spec| + spec.name = 'testo' + spec.version = '1.0.0' + spec.add_dependency('z', '~> 1.0', '>= 1.0.1') +end + LOCKFILE + end + + File.open 'Gemfile', 'w' do |io| + io.puts("gemspec") + end + + rs.install_from_gemdeps :gemdeps => 'Gemfile' do |req, installer| + installed << req.full_name + end + + assert_includes installed, 'z-1.0.3' + + assert_path_exists File.join @gemhome, 'specifications', 'z-1.0.3.gemspec' + end + def test_install_from_gemdeps_version_mismatch spec_fetcher do |fetcher| fetcher.gem 'a', 2 diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index dbd45a31fd..39a483378a 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -83,6 +83,11 @@ end def setup super + # Setting `@default_source_date_epoch` to `nil` effectively resets the + # value used for `Gem.source_date_epoch` whenever `$SOURCE_DATE_EPOCH` + # is not set. + Gem.instance_variable_set(:'@default_source_date_epoch', nil) + @a1 = util_spec 'a', '1' do |s| s.executable = 'exec' s.test_file = 'test/suite.rb' @@ -939,7 +944,7 @@ dependencies: [] assert_equal File.join(@tempdir, 'a-2.gemspec'), spec.loaded_from end - if RUBY_VERSION < '2.7' + if RUBY_ENGINE == 'ruby' and RUBY_VERSION < '2.7' def test_self_load_tainted full_path = @a2.spec_file write_file full_path do |io| @@ -2784,7 +2789,7 @@ end add_runtime_dependency 'l', '~> 1.2', '> 1.2.3' #{w}: open-ended dependency on o (>= 0) is not recommended use a bounded requirement, such as '~> x.y' -#{w}: See http://guides.rubygems.org/specification-reference/ for help +#{w}: See https://guides.rubygems.org/specification-reference/ for help EXPECTED assert_equal expected, @ui.error, 'warning' @@ -2816,7 +2821,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use: end assert_equal <<-EXPECTED, @ui.error -#{w}: See http://guides.rubygems.org/specification-reference/ for help +#{w}: See https://guides.rubygems.org/specification-reference/ for help EXPECTED end end @@ -2927,7 +2932,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use: end end - assert_match 'See http://guides.rubygems.org/specification-reference/ for help', @ui.error + assert_match 'See https://guides.rubygems.org/specification-reference/ for help', @ui.error end def test_validate_executables @@ -3100,7 +3105,7 @@ Please report a bug if this causes problems. assert_equal '"ftp://rubygems.org" is not a valid HTTP URI', e.message - @a1.homepage = 'http://rubygems.org' + @a1.homepage = 'https://rubygems.org/' assert_equal true, @a1.validate @a1.homepage = 'https://rubygems.org' @@ -3123,6 +3128,21 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license. warning end + def test_removed_methods + assert_equal Gem::Specification::REMOVED_METHODS, [:rubyforge_project=] + end + + def test_validate_removed_rubyforge_project + util_setup_validate + + use_ui @ui do + @a1.rubyforge_project = 'invalid-attribute' + @a1.validate + end + + assert_match "rubyforge_project= is deprecated", @ui.error + end + def test_validate_license_values util_setup_validate @@ -3430,7 +3450,7 @@ Did you mean 'Ruby'? @a1.validate end - assert_match 'See http://guides.rubygems.org/specification-reference/ for help', @ui.error + assert_match 'See https://guides.rubygems.org/specification-reference/ for help', @ui.error end def test_version diff --git a/test/rubygems/test_gem_stub_specification.rb b/test/rubygems/test_gem_stub_specification.rb index 8553194c44..91a46d7842 100644 --- a/test/rubygems/test_gem_stub_specification.rb +++ b/test/rubygems/test_gem_stub_specification.rb @@ -4,7 +4,6 @@ require "rubygems/stub_specification" class TestStubSpecification < Gem::TestCase - SPECIFICATIONS = File.expand_path(File.join("..", "specifications"), __FILE__) FOO = File.join SPECIFICATIONS, "foo-0.0.1-x86-mswin32.gemspec" BAR = File.join SPECIFICATIONS, "bar-0.0.2.gemspec" -- cgit v1.2.3