aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2020-06-30 21:23:37 +0900
committernagachika <nagachika@ruby-lang.org>2020-09-15 20:55:40 +0900
commit7d76314885be3532999684356657ce36da84d04e (patch)
treeaae23ff9ce30ff03c1f0867c0bc46ea968e8e324 /test
parent3590f082442afc4506250f5274a7877371a112de (diff)
downloadruby-7d76314885be3532999684356657ce36da84d04e.tar.gz
Merge RubyGems 3.1.4
Diffstat (limited to 'test')
-rw-r--r--test/rubygems/specifications/rubyforge-0.0.1.gemspec14
-rw-r--r--test/rubygems/test_gem.rb117
-rw-r--r--test/rubygems/test_gem_commands_build_command.rb19
-rw-r--r--test/rubygems/test_gem_commands_sources_command.rb40
-rw-r--r--test/rubygems/test_gem_commands_uninstall_command.rb1
-rw-r--r--test/rubygems/test_gem_package.rb11
-rw-r--r--test/rubygems/test_gem_package_tar_writer.rb5
-rw-r--r--test/rubygems/test_gem_request_set.rb52
-rw-r--r--test/rubygems/test_gem_specification.rb32
-rw-r--r--test/rubygems/test_gem_stub_specification.rb1
10 files changed, 241 insertions, 51 deletions
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"