summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_specification.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem_specification.rb')
-rw-r--r--test/rubygems/test_gem_specification.rb1397
1 files changed, 811 insertions, 586 deletions
diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb
index bfd0db347e..9e05649f7c 100644
--- a/test/rubygems/test_gem_specification.rb
+++ b/test/rubygems/test_gem_specification.rb
@@ -1,16 +1,17 @@
# frozen_string_literal: true
-require 'benchmark'
-require_relative 'helper'
-require 'date'
-require 'pathname'
-require 'stringio'
-require 'rubygems/ext'
-require 'rubygems/specification'
-require 'rubygems/installer'
-require 'rubygems/platform'
+
+require "benchmark"
+require_relative "helper"
+require "date"
+require "pathname"
+require "stringio"
+require "rubygems/ext"
+require "rubygems/specification"
+require "rubygems/installer"
+require "rubygems/platform"
class TestGemSpecification < Gem::TestCase
- LEGACY_YAML_SPEC = <<-EOF.freeze
+ LEGACY_YAML_SPEC = <<-EOF
--- !ruby/object:Gem::Specification
rubygems_version: "1.0"
name: keyedlist
@@ -29,7 +30,7 @@ email: flgr@ccan.de
has_rdoc: true
EOF
- LEGACY_RUBY_SPEC = <<-EOF.freeze
+ LEGACY_RUBY_SPEC = <<-EOF
Gem::Specification.new do |s|
s.name = %q{keyedlist}
s.version = %q{0.4.0}
@@ -44,16 +45,16 @@ end
EOF
def make_spec_c1
- @c1 = util_spec 'a', '1' do |s|
- s.executable = 'exec'
- s.extensions << 'ext/a/extconf.rb'
- s.test_file = 'test/suite.rb'
- s.requirements << 'A working computer'
- s.license = 'MIT'
+ @c1 = util_spec "a", "1" do |s|
+ s.executable = "exec"
+ s.extensions << "ext/a/extconf.rb"
+ s.test_file = "test/suite.rb"
+ s.requirements << "A working computer"
+ s.license = "MIT"
- s.add_dependency 'rake', '> 0.4'
- s.add_dependency 'jabber4r', '> 0.0.0'
- s.add_dependency 'pqa', ['> 0.4', '<= 0.6']
+ s.add_dependency "rake", "> 0.4"
+ s.add_dependency "jabber4r", "> 0.0.0"
+ s.add_dependency "pqa", ["> 0.4", "<= 0.6"]
s.mark_version
s.files = %w[lib/code.rb]
@@ -61,16 +62,16 @@ end
end
def ext_spec(platform: Gem::Platform::RUBY)
- @ext = util_spec 'ext', '1' do |s|
- s.executable = 'exec'
- s.test_file = 'test/suite.rb'
+ @ext = util_spec "ext", "1" do |s|
+ s.executable = "exec"
+ s.test_file = "test/suite.rb"
s.extensions = %w[ext/extconf.rb]
- s.license = 'MIT'
+ s.license = "MIT"
s.platform = platform
s.mark_version
s.files = %w[lib/code.rb]
- s.installed_by_version = v('2.2')
+ s.installed_by_version = v("2.2")
end
end
@@ -88,40 +89,41 @@ end
# 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'
- s.requirements << 'A working computer'
- s.license = 'MIT'
+ @a1 = util_spec "a", "1" do |s|
+ s.required_ruby_version = ">= 2.3.0"
+ s.executable = "exec"
+ s.test_file = "test/suite.rb"
+ s.requirements << "A working computer"
+ s.license = "MIT"
s.mark_version
s.files = %w[lib/code.rb]
end
- @a2 = util_spec 'a', '2' do |s|
+ @a2 = util_spec "a", "2" do |s|
s.files = %w[lib/code.rb]
end
- @a3 = util_spec 'a', '3' do |s|
- s.metadata['allowed_push_host'] = "https://privategemserver.com"
+ @a3 = util_spec "a", "3" do |s|
+ s.metadata["allowed_push_host"] = "https://privategemserver.com"
end
@current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
end
def test_self_find_active_stub_by_path
- spec = util_spec('a', '1', nil, 'lib/foo.rb')
+ spec = util_spec("a", "1", nil, "lib/foo.rb")
spec.activated = true
# There used to be a bug (introduced in a9c1aaf) when Gem::Specification
# objects are present in the @stubs collection. This test verifies that
# this scenario works correctly.
Gem::Specification.all = [spec]
- assert_equal spec, Gem::Specification.find_active_stub_by_path('foo')
+ assert_equal spec, Gem::Specification.find_active_stub_by_path("foo")
end
def test_self_activate
- foo = util_spec 'foo', '1'
+ foo = util_spec "foo", "1"
assert_activate %w[foo-1], foo
end
@@ -147,6 +149,7 @@ end
end
def test_find_in_unresolved_tree_is_not_exponentiental
+ pend "currently slower in CI on TruffleRuby" if RUBY_ENGINE == "truffleruby"
num_of_pkg = 7
num_of_version_per_pkg = 3
packages = (0..num_of_pkg).map do |pkgi|
@@ -157,7 +160,7 @@ end
util_spec "pkg#{pkgi}", pkg_version.to_s, deps
end
end
- base = util_spec "pkg_base", "1", {"pkg0" => ">= 0"}
+ base = util_spec "pkg_base", "1", { "pkg0" => ">= 0" }
Gem::Specification.reset
install_specs(*packages.flatten.reverse)
@@ -165,7 +168,7 @@ end
base.activate
tms = Benchmark.measure do
- assert_raise(LoadError) { require 'no_such_file_foo' }
+ assert_raise(LoadError) { require "no_such_file_foo" }
end
assert_operator tms.total, :<=, 10
end
@@ -304,10 +307,10 @@ end
def test_require_should_not_conflict
base = util_spec "0", "1", "A" => ">= 1"
- a1 = util_spec "A", "1", {"c" => ">= 2", "b" => "> 0"}, "lib/a.rb"
- a2 = util_spec "A", "2", {"c" => ">= 2", "b" => "> 0"}, "lib/a.rb"
- b1 = util_spec "b", "1", {"c" => "= 1"}, "lib/d#{$$}.rb"
- b2 = util_spec "b", "2", {"c" => "= 2"}, "lib/d#{$$}.rb"
+ a1 = util_spec "A", "1", { "c" => ">= 2", "b" => "> 0" }, "lib/a.rb"
+ a2 = util_spec "A", "2", { "c" => ">= 2", "b" => "> 0" }, "lib/a.rb"
+ b1 = util_spec "b", "1", { "c" => "= 1" }, "lib/d#{$$}.rb"
+ b2 = util_spec "b", "2", { "c" => "= 2" }, "lib/d#{$$}.rb"
c1 = util_spec "c", "1", {}, "lib/c.rb"
c2 = util_spec "c", "2", {}, "lib/c.rb"
c3 = util_spec "c", "3", {}, "lib/c.rb"
@@ -371,13 +374,13 @@ end
# [B] ~> 1.0 (satisfied by 1.0)
def test_self_activate_checks_dependencies
- a = util_spec 'a', '1.0'
- a.add_dependency 'c', '= 1.0'
- a.add_dependency 'b', '~> 1.0'
+ a = util_spec "a", "1.0"
+ a.add_dependency "c", "= 1.0"
+ a.add_dependency "b", "~> 1.0"
- b1 = util_spec 'b', '1.0'
- b2 = util_spec 'b', '2.0'
- c = util_spec 'c', '1.0', 'b' => '= 2.0'
+ b1 = util_spec "b", "1.0"
+ b2 = util_spec "b", "2.0"
+ c = util_spec "c", "1.0", "b" => "= 2.0"
install_specs b1, b2, c, a
e = assert_raise Gem::LoadError do
@@ -395,10 +398,10 @@ end
# [B] = 2.0
def test_self_activate_divergent
- a = util_spec 'a', '1.0', 'b' => '~> 1.0', 'c' => '= 1.0'
- b1 = util_spec 'b', '1.0'
- b2 = util_spec 'b', '2.0'
- c = util_spec 'c', '1.0', 'b' => '= 2.0'
+ a = util_spec "a", "1.0", "b" => "~> 1.0", "c" => "= 1.0"
+ b1 = util_spec "b", "1.0"
+ b2 = util_spec "b", "2.0"
+ c = util_spec "c", "1.0", "b" => "= 2.0"
install_specs b1, b2, c, a
@@ -414,9 +417,9 @@ end
# DOC
def test_self_activate_old_required
- e1, = util_spec 'e', '1', 'd' => '= 1'
- @d1 = util_spec 'd', '1'
- @d2 = util_spec 'd', '2'
+ e1, = util_spec "e", "1", "d" => "= 1"
+ @d1 = util_spec "d", "1"
+ @d2 = util_spec "d", "2"
install_specs @d1, @d2, e1
@@ -427,17 +430,17 @@ end
# DOC
def test_self_activate_platform_alternate
- @x1_m = util_spec 'x', '1' do |s|
+ @x1_m = util_spec "x", "1" do |s|
s.platform = Gem::Platform.new %w[cpu my_platform 1]
end
- @x1_o = util_spec 'x', '1' do |s|
+ @x1_o = util_spec "x", "1" do |s|
s.platform = Gem::Platform.new %w[cpu other_platform 1]
end
- @w1 = util_spec 'w', '1', 'x' => nil
+ @w1 = util_spec "w", "1", "x" => nil
- util_set_arch 'cpu-my_platform1'
+ util_set_arch "cpu-my_platform1"
install_specs @x1_m, @x1_o, @w1
assert_activate %w[x-1-cpu-my_platform-1 w-1], @w1, @x1_m
@@ -447,13 +450,13 @@ end
# DOC
def test_self_activate_platform_bump
- @y1 = util_spec 'y', '1'
+ @y1 = util_spec "y", "1"
- @y1_1_p = util_spec 'y', '1.1' do |s|
+ @y1_1_p = util_spec "y", "1.1" do |s|
s.platform = Gem::Platform.new %w[cpu my_platform 1]
end
- @z1 = util_spec 'z', '1', 'y' => nil
+ @z1 = util_spec "z", "1", "y" => nil
install_specs @y1, @y1_1_p, @z1
assert_activate %w[y-1 z-1], @z1, @y1
@@ -466,11 +469,11 @@ end
# [A] >= 0 (satisfied by 1.a)
def test_self_activate_prerelease
- @c1_pre = util_spec 'c', '1.a', "a" => "1.a", "b" => "1"
- @a1_pre = util_spec 'a', '1.a'
- @b1 = util_spec 'b', '1' do |s|
- s.add_dependency 'a'
- s.add_development_dependency 'aa'
+ @c1_pre = util_spec "c", "1.a", "a" => "1.a", "b" => "1"
+ @a1_pre = util_spec "a", "1.a"
+ @b1 = util_spec "b", "1" do |s|
+ s.add_dependency "a"
+ s.add_development_dependency "aa"
end
install_specs @a1_pre, @b1, @c1_pre
@@ -532,7 +535,7 @@ end
end
def test_self_activate_loaded
- foo = util_spec 'foo', '1'
+ foo = util_spec "foo", "1"
assert foo.activate
refute foo.activate
@@ -544,9 +547,9 @@ end
# [C] depends on nothing
def test_self_activate_unrelated
- a = util_spec 'a', '1.0', 'b' => '>= 1.0'
- b = util_spec 'b', '1.0'
- c = util_spec 'c', '1.0'
+ a = util_spec "a", "1.0", "b" => ">= 1.0"
+ b = util_spec "b", "1.0"
+ c = util_spec "c", "1.0"
install_specs b, c, a
assert_activate %w[b-1.0 c-1.0 a-1.0], a, c, "b"
@@ -562,11 +565,11 @@ end
# TODO: move these to specification
def test_self_activate_over
- a = util_spec 'a', '1.0', 'b' => '>= 1.0', 'c' => '= 1.0'
- install_specs util_spec 'b', '1.0'
- install_specs util_spec 'b', '1.1'
- install_specs util_spec 'b', '2.0'
- install_specs util_spec 'c', '1.0', 'b' => '~> 1.0'
+ a = util_spec "a", "1.0", "b" => ">= 1.0", "c" => "= 1.0"
+ install_specs util_spec "b", "1.0"
+ install_specs util_spec "b", "1.1"
+ install_specs util_spec "b", "2.0"
+ install_specs util_spec "c", "1.0", "b" => "~> 1.0"
install_specs a
a.activate
@@ -587,10 +590,10 @@ end
# first resolve through a dependency that is later pruned.
def test_self_activate_under
- a = util_spec 'a', '1.0', 'b' => '~> 1.0', 'c' => '= 1.0'
- b1 = util_spec 'b', '1.0'
- b1_1 = util_spec 'b', '1.1'
- c = util_spec 'c', '1.0', 'b' => '= 1.0'
+ a = util_spec "a", "1.0", "b" => "~> 1.0", "c" => "= 1.0"
+ b1 = util_spec "b", "1.0"
+ b1_1 = util_spec "b", "1.1"
+ c = util_spec "c", "1.0", "b" => "= 1.0"
install_specs b1, b1_1, c, a
@@ -606,10 +609,10 @@ end
# [C1] depends on nothing
def test_self_activate_dropped
- a1 = util_spec 'a', '1', 'b' => nil
- b1 = util_spec 'b', '1', 'c' => nil
- b2 = util_spec 'b', '2'
- c1 = util_spec 'c', '1'
+ a1 = util_spec "a", "1", "b" => nil
+ b1 = util_spec "b", "1", "c" => nil
+ b2 = util_spec "b", "2"
+ c1 = util_spec "c", "1"
install_specs c1, b1, b2, a1
assert_activate %w[b-2 a-1], a1, "b"
@@ -626,11 +629,11 @@ end
# resolve.
def test_self_activate_raggi_the_edgecase_generator
- a = util_spec 'a', '1.0', 'b' => '>= 1.0', 'c' => '>= 1.0'
- b1 = util_spec 'b', '1.0'
- b1_0 = util_spec 'b', '1.1', 'z' => '>= 1.0'
- c = util_spec 'c', '1.0', 'b' => '= 1.0'
- z = util_spec 'z', '1'
+ a = util_spec "a", "1.0", "b" => ">= 1.0", "c" => ">= 1.0"
+ b1 = util_spec "b", "1.0"
+ b1_0 = util_spec "b", "1.1", "z" => ">= 1.0"
+ c = util_spec "c", "1.0", "b" => "= 1.0"
+ z = util_spec "z", "1"
install_specs z, b1, b1_0, c, z
@@ -638,8 +641,8 @@ end
end
def test_self_activate_conflict
- install_specs util_spec 'b', '1.0'
- install_specs util_spec 'b', '2.0'
+ install_specs util_spec "b", "1.0"
+ install_specs util_spec "b", "2.0"
gem "b", "= 1.0"
@@ -654,7 +657,7 @@ end
install_specs a
Gem::Specification.all = [a]
- assert_equal a, Gem::Specification.find_inactive_by_path('foo')
+ assert_equal a, Gem::Specification.find_inactive_by_path("foo")
end
def test_self_attribute_names
@@ -690,20 +693,20 @@ end
version
]
- actual_value = Gem::Specification.attribute_names.map {|a| a.to_s }.sort
+ actual_value = Gem::Specification.attribute_names.map(&:to_s).sort
assert_equal expected_value, actual_value
end
def test_self__load_future
spec = Gem::Specification.new
- spec.name = 'a'
- spec.version = '1'
+ spec.name = "a"
+ spec.version = "1"
spec.specification_version = @current_version + 1
load_spec = Marshal.load Marshal.dump(spec)
- assert_equal 'a', load_spec.name
+ assert_equal "a", load_spec.name
assert_equal Gem::Version.new(1), load_spec.version
assert_equal @current_version, load_spec.specification_version
end
@@ -782,37 +785,17 @@ dependencies: []
end
def test_self_load_relative
- File.open 'a-2.gemspec', 'w' do |io|
+ File.open "a-2.gemspec", "w" do |io|
io.write @a2.to_ruby_for_cache
end
- spec = Gem::Specification.load 'a-2.gemspec'
+ spec = Gem::Specification.load "a-2.gemspec"
@a2.files.clear
assert_equal @a2, spec
- assert_equal File.join(@tempdir, 'a-2.gemspec'), spec.loaded_from
- end
-
- 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|
- io.write @a2.to_ruby_for_cache
- end
-
- full_path.taint
- loader = Thread.new { $SAFE = 1; Gem::Specification.load full_path }
- spec = loader.value
-
- @a2.files.clear
-
- assert_equal @a2, spec
-
- ensure
- $SAFE = 0
- end
+ assert_equal File.join(@tempdir, "a-2.gemspec"), spec.loaded_from
end
def test_self_load_escape_curly
@@ -873,34 +856,31 @@ dependencies: []
end
def test_self_load_utf8_with_ascii_encoding
- int_enc = Encoding.default_internal
- silence_warnings { Encoding.default_internal = 'US-ASCII' }
-
- spec2 = @a2.dup
- bin = "\u5678".dup
- spec2.authors = [bin]
- full_path = spec2.spec_file
- write_file full_path do |io|
- io.write spec2.to_ruby_for_cache.force_encoding('BINARY').sub("\\u{5678}", bin.force_encoding('BINARY'))
- end
+ with_internal_encoding("US-ASCII") do
+ spec2 = @a2.dup
+ bin = "\u5678".dup
+ spec2.authors = [bin]
+ full_path = spec2.spec_file
+ write_file full_path do |io|
+ io.write spec2.to_ruby_for_cache.force_encoding("BINARY").sub("\\u{5678}", bin.force_encoding("BINARY"))
+ end
- spec = Gem::Specification.load full_path
+ spec = Gem::Specification.load full_path
- spec2.files.clear
+ spec2.files.clear
- assert_equal spec2, spec
- ensure
- silence_warnings { Encoding.default_internal = int_enc }
+ assert_equal spec2, spec
+ end
end
def test_self_load_legacy_ruby
spec = Gem::Deprecate.skip_during do
eval LEGACY_RUBY_SPEC
end
- assert_equal 'keyedlist', spec.name
- assert_equal '0.4.0', spec.version.to_s
+ assert_equal "keyedlist", spec.name
+ assert_equal "0.4.0", spec.version.to_s
assert_kind_of Time, spec.date
- assert spec.required_ruby_version.satisfied_by?(Gem::Version.new('1'))
+ assert spec.required_ruby_version.satisfied_by?(Gem::Version.new("1"))
assert_equal false, spec.has_unit_tests?
end
@@ -935,26 +915,26 @@ dependencies: []
def test_self_outdated
spec_fetcher do |fetcher|
- fetcher.download 'a', 4
+ fetcher.download "a", 4
- fetcher.spec 'a', 3
+ fetcher.spec "a", 3
end
assert_equal %w[a], Gem::Specification.outdated
end
def test_self_outdated_and_latest_remotes
- specs = spec_fetcher do |fetcher|
- fetcher.download 'a', 4
- fetcher.download 'b', 3
+ spec_fetcher do |fetcher|
+ fetcher.download "a", 4
+ fetcher.download "b", 3
- fetcher.spec 'a', '3.a'
- fetcher.spec 'b', 2
+ fetcher.spec "a", "3.a"
+ fetcher.spec "b", 2
end
expected = [
- [specs['a-3.a'], v(4)],
- [specs['b-2'], v(3)],
+ [Gem::Specification.stubs.find {|s| s.full_name == "a-3.a" }, v(4)],
+ [Gem::Specification.stubs.find {|s| s.full_name == "b-2" }, v(3)],
]
assert_equal expected, Gem::Specification.outdated_and_latest_version.to_a
@@ -963,18 +943,18 @@ dependencies: []
def test_self_remove_spec
install_specs @a1
- assert_includes Gem::Specification.all_names, 'a-1'
- assert_includes Gem::Specification.stubs.map {|s| s.full_name }, 'a-1'
+ assert_includes Gem::Specification.all_names, "a-1"
+ assert_includes Gem::Specification.stubs.map(&:full_name), "a-1"
uninstall_gem @a1
Gem::Specification.reset
- refute_includes Gem::Specification.all_names, 'a-1'
- refute_includes Gem::Specification.stubs.map {|s| s.full_name }, 'a-1'
+ refute_includes Gem::Specification.all_names, "a-1"
+ refute_includes Gem::Specification.stubs.map(&:full_name), "a-1"
end
def test_self_remove_spec_removed
- File.open @a1.spec_file, 'w' do |io|
+ File.open @a1.spec_file, "w" do |io|
io.write @a1.to_ruby
end
@@ -984,40 +964,40 @@ dependencies: []
Gem::Specification.reset
- refute_includes Gem::Specification.all_names, 'a-1'
- refute_includes Gem::Specification.stubs.map {|s| s.full_name }, 'a-1'
+ refute_includes Gem::Specification.all_names, "a-1"
+ refute_includes Gem::Specification.stubs.map(&:full_name), "a-1"
end
def test_self_stubs_for_lazy_loading
Gem.loaded_specs.clear
Gem::Specification.class_variable_set(:@@stubs, nil)
- dir_standard_specs = File.join Gem.dir, 'specifications'
+ dir_standard_specs = File.join Gem.dir, "specifications"
- save_gemspec('a-1', '1', dir_standard_specs){|s| s.name = 'a' }
- save_gemspec('b-1', '1', dir_standard_specs){|s| s.name = 'b' }
+ save_gemspec("a-1", "1", dir_standard_specs) {|s| s.name = "a" }
+ save_gemspec("b-1", "1", dir_standard_specs) {|s| s.name = "b" }
- assert_equal ['a-1'], Gem::Specification.stubs_for('a').map {|s| s.full_name }
+ assert_equal ["a-1"], Gem::Specification.stubs_for("a").map(&:full_name)
assert_equal 1, Gem::Specification.class_variable_get(:@@stubs_by_name).length
- assert_equal ['b-1'], Gem::Specification.stubs_for('b').map {|s| s.full_name }
+ assert_equal ["b-1"], Gem::Specification.stubs_for("b").map(&:full_name)
assert_equal 2, Gem::Specification.class_variable_get(:@@stubs_by_name).length
assert_equal(
- Gem::Specification.stubs_for('a').map {|s| s.object_id },
- Gem::Specification.stubs_for('a').map {|s| s.object_id }
+ Gem::Specification.stubs_for("a").map(&:object_id),
+ Gem::Specification.stubs_for("a").map(&:object_id)
)
- Gem.loaded_specs.delete 'a'
- Gem.loaded_specs.delete 'b'
+ Gem.loaded_specs.delete "a"
+ Gem.loaded_specs.delete "b"
Gem::Specification.class_variable_set(:@@stubs, nil)
end
def test_self_stubs_for_no_lazy_loading_after_all_specs_setup
- Gem::Specification.all = [util_spec('a', '1')]
+ Gem::Specification.all = [util_spec("a", "1")]
- save_gemspec('b-1', '1', File.join(Gem.dir, 'specifications')){|s| s.name = 'b' }
+ save_gemspec("b-1", "1", File.join(Gem.dir, "specifications")) {|s| s.name = "b" }
- assert_equal [], Gem::Specification.stubs_for('b').map {|s| s.full_name }
+ assert_equal [], Gem::Specification.stubs_for("b").map(&:full_name)
end
def test_self_stubs_for_mult_platforms
@@ -1027,30 +1007,30 @@ dependencies: []
orig_platform = Gem.platforms.dup
# create user spec
- user_spec_dir = File.join Gem.user_dir, 'specifications'
+ user_spec_dir = File.join Gem.user_dir, "specifications"
FileUtils.mkdir_p(user_spec_dir) unless Dir.exist? user_spec_dir
# dirs doesn't include user ?
Gem::Specification.dirs << user_spec_dir
- gem = 'mingw'
- v = '1.1.1'
- platforms = ['x86-mingw32', 'x64-mingw32']
+ gem = "mingw"
+ v = "1.1.1"
+ platforms = ["x86-mingw32", "x64-mingw32"]
- #create specs
+ # create specs
platforms.each do |plat|
spec = Gem::Specification.new(gem, v) {|s| s.platform = plat }
- File.open File.join(user_spec_dir, "#{gem}-#{v}-#{plat}.gemspec"), 'w' do |io|
+ File.open File.join(user_spec_dir, "#{gem}-#{v}-#{plat}.gemspec"), "w" do |io|
io.write spec.to_ruby
end
end
platforms.each do |plat|
cur_plat = Gem::Platform.new plat
- Gem.platforms = ['ruby', cur_plat]
+ Gem.platforms = ["ruby", cur_plat]
Gem::Specification.class_variable_set :@@stubs, nil
Gem::Specification.stubs if plat == platforms.last # test loading via stubs
- t = Gem::Specification.stubs_for 'mingw'
+ t = Gem::Specification.stubs_for "mingw"
assert_equal 1, t.length
assert_equal cur_plat, t.first.platform
@@ -1060,21 +1040,56 @@ dependencies: []
end
def test_self_stubs_returns_only_specified_named_specs
- dir_standard_specs = File.join Gem.dir, 'specifications'
+ dir_standard_specs = File.join Gem.dir, "specifications"
- save_gemspec('a-1', '1', dir_standard_specs){|s| s.name = 'a' }
- save_gemspec('a-2', '2', dir_standard_specs){|s| s.name = 'a' }
- save_gemspec('a-a', '3', dir_standard_specs){|s| s.name = 'a-a' }
+ save_gemspec("a-1", "1", dir_standard_specs) {|s| s.name = "a" }
+ save_gemspec("a-2", "2", dir_standard_specs) {|s| s.name = "a" }
+ save_gemspec("a-a", "3", dir_standard_specs) {|s| s.name = "a-a" }
- assert_equal ['a-1', 'a-2'], Gem::Specification.stubs_for('a').map(&:full_name).sort
+ assert_equal ["a-1", "a-2"], Gem::Specification.stubs_for("a").map(&:full_name).sort
end
def test_handles_private_null_type
- path = File.expand_path "../data/null-type.gemspec.rz", __FILE__
+ yaml_defined = Object.const_defined?("YAML")
+
+ path = File.expand_path "data/pry-0.4.7.gemspec.rz", __dir__
data = Marshal.load Gem::Util.inflate(Gem.read_binary(path))
- assert_nil data.signing_key
+ assert_instance_of Gem::Specification, data
+
+ assert_equal(yaml_defined, Object.const_defined?("YAML"))
+ end
+
+ def test_handles_dependencies_with_syck_requirements_bug
+ yaml_defined = Object.const_defined?("YAML")
+
+ path = File.expand_path "data/excon-0.7.7.gemspec.rz", __dir__
+
+ data = Marshal.load Gem::Util.inflate(Gem.read_binary(path))
+
+ assert_instance_of Gem::Specification, data
+
+ assert_equal(yaml_defined, Object.const_defined?("YAML"))
+ end
+
+ def test_handles_dependencies_with_other_syck_requirements_argument_error
+ yaml_defined = Object.const_defined?("YAML")
+
+ data = Marshal.dump(Gem::Specification.new do |s|
+ v = Gem::Version.allocate
+ v.instance_variable_set :@version, "YAML::Syck::DefaultKey"
+ s.instance_variable_set :@version, v
+ end)
+
+ assert_raise(ArgumentError) { Marshal.load(data) }
+ out, err = capture_output do
+ assert_raise(ArgumentError) { Marshal.load(data) }
+ end
+ assert_empty out
+ assert_empty err
+
+ assert_equal(yaml_defined, Object.const_defined?("YAML"))
end
def test_initialize
@@ -1096,9 +1111,9 @@ dependencies: []
assert_equal [], spec.extensions
assert_equal [], spec.requirements
assert_equal [], spec.dependencies
- assert_equal 'bin', spec.bindir
- assert_equal '>= 0', spec.required_ruby_version.to_s
- assert_equal '>= 0', spec.required_rubygems_version.to_s
+ assert_equal "bin", spec.bindir
+ assert_equal ">= 0", spec.required_ruby_version.to_s
+ assert_equal ">= 0", spec.required_rubygems_version.to_s
end
def test_initialize_future
@@ -1120,18 +1135,18 @@ dependencies: []
spec = Gem::Specification.new do |s|
s.name = "blah"
s.version = "1.3.5"
- s.summary = 'summary'
- s.description = 'description'
- s.authors = 'author a', 'author b'
- s.licenses = 'BSD-2-Clause'
- s.files = 'lib/file.rb'
- s.test_files = 'test/file.rb'
- s.rdoc_options = '--foo'
- s.extra_rdoc_files = 'README.txt'
- s.executables = 'exec'
- s.extensions = 'ext/extconf.rb'
- s.requirements = 'requirement'
- s.add_dependency 'some_gem'
+ s.summary = "summary"
+ s.description = "description"
+ s.authors = "author a", "author b"
+ s.licenses = "BSD-2-Clause"
+ s.files = "lib/file.rb"
+ s.test_files = "test/file.rb"
+ s.rdoc_options = "--foo"
+ s.extra_rdoc_files = "README.txt"
+ s.executables = "exec"
+ s.extensions = "ext/extconf.rb"
+ s.requirements = "requirement"
+ s.add_dependency "some_gem"
end
dup_spec = spec.dup
@@ -1145,84 +1160,96 @@ dependencies: []
assert_equal Gem::Platform::RUBY, spec.platform
assert_same spec.platform, dup_spec.platform
- assert_equal 'summary', spec.summary
+ assert_equal "summary", spec.summary
assert_same spec.summary, dup_spec.summary
assert_equal %w[README.txt bin/exec ext/extconf.rb lib/file.rb
test/file.rb].sort,
spec.files
- refute_same spec.files, dup_spec.files, 'files'
+ refute_same spec.files, dup_spec.files, "files"
assert_equal %w[test/file.rb], spec.test_files
- refute_same spec.test_files, dup_spec.test_files, 'test_files'
+ refute_same spec.test_files, dup_spec.test_files, "test_files"
assert_equal %w[--foo], spec.rdoc_options
- refute_same spec.rdoc_options, dup_spec.rdoc_options, 'rdoc_options'
+ refute_same spec.rdoc_options, dup_spec.rdoc_options, "rdoc_options"
assert_equal %w[README.txt], spec.extra_rdoc_files
refute_same spec.extra_rdoc_files, dup_spec.extra_rdoc_files,
- 'extra_rdoc_files'
+ "extra_rdoc_files"
assert_equal %w[exec], spec.executables
- refute_same spec.executables, dup_spec.executables, 'executables'
+ refute_same spec.executables, dup_spec.executables, "executables"
assert_equal %w[ext/extconf.rb], spec.extensions
- refute_same spec.extensions, dup_spec.extensions, 'extensions'
+ refute_same spec.extensions, dup_spec.extensions, "extensions"
assert_equal %w[requirement], spec.requirements
- refute_same spec.requirements, dup_spec.requirements, 'requirements'
+ refute_same spec.requirements, dup_spec.requirements, "requirements"
- assert_equal [Gem::Dependency.new('some_gem', Gem::Requirement.default)],
+ assert_equal [Gem::Dependency.new("some_gem", Gem::Requirement.default)],
spec.dependencies
- refute_same spec.dependencies, dup_spec.dependencies, 'dependencies'
+ refute_same spec.dependencies, dup_spec.dependencies, "dependencies"
- assert_equal 'bin', spec.bindir
+ assert_equal "bin", spec.bindir
assert_same spec.bindir, dup_spec.bindir
- assert_equal '>= 0', spec.required_ruby_version.to_s
- assert_same spec.required_ruby_version, dup_spec.required_ruby_version
+ assert_equal ">= 0", spec.required_ruby_version.to_s
+ assert_equal spec.required_ruby_version, dup_spec.required_ruby_version
+ refute_same spec.required_ruby_version, dup_spec.required_ruby_version
- assert_equal '>= 0', spec.required_rubygems_version.to_s
- assert_same spec.required_rubygems_version,
+ assert_equal ">= 0", spec.required_rubygems_version.to_s
+ assert_equal spec.required_rubygems_version,
+ dup_spec.required_rubygems_version
+ refute_same spec.required_rubygems_version,
dup_spec.required_rubygems_version
end
def test_initialize_copy_broken
spec = Gem::Specification.new do |s|
- s.name = 'a'
- s.version = '1'
+ s.name = "a"
+ s.version = "1"
end
- spec.instance_variable_set :@licenses, (class << (Object.new);self;end)
- spec.loaded_from = '/path/to/file'
+ spec.instance_variable_set :@licenses, (class << Object.new;self;end)
+ spec.loaded_from = "/path/to/file"
e = assert_raise Gem::FormatException do
spec.dup
end
- assert_equal 'a-1 has an invalid value for @licenses', e.message
- assert_equal '/path/to/file', e.file_path
+ assert_equal "a-1 has an invalid value for @licenses", e.message
+ assert_equal "/path/to/file", e.file_path
end
def test_initialize_prerelease_version_before_name
spec = Gem::Specification.new do |s|
- s.version = '1.0.0.dev'
- s.name = 'a'
+ s.version = "1.0.0.dev"
+ s.name = "a"
end
assert_equal "a", spec.name
assert_equal "1.0.0.dev", spec.version.to_s
end
+ def test_initialize_nil_version
+ expected = "nil versions are discouraged and will be deprecated in Rubygems 4\n"
+ actual_stdout, actual_stderr = capture_output do
+ Gem::Specification.new.version = nil
+ end
+ assert_empty actual_stdout
+ assert_equal(expected, actual_stderr)
+ end
+
def test__dump
@a2.platform = Gem::Platform.local
- @a2.instance_variable_set :@original_platform, 'old_platform'
+ @a2.instance_variable_set :@original_platform, "old_platform"
data = Marshal.dump @a2
same_spec = Marshal.load data
- assert_equal 'old_platform', same_spec.original_platform
+ assert_equal "old_platform", same_spec.original_platform
end
def test_activate
@@ -1237,11 +1264,11 @@ dependencies: []
awesome.add_dependency :gem_name
end
- assert_equal %w[true gem_name], gem.dependencies.map {|dep| dep.name }
+ assert_equal %w[true gem_name], gem.dependencies.map(&:name)
end
def test_add_dependency_from_existing_dependency
- dep = Gem::Dependency.new("existing_dep", Gem::Requirement.new('> 1'), :runtime)
+ dep = Gem::Dependency.new("existing_dep", Gem::Requirement.new("> 1"), :runtime)
spec = Gem::Specification.new {|s| s.add_dependency dep }
assert_equal dep, spec.dependencies.first
end
@@ -1256,22 +1283,22 @@ dependencies: []
end
def test_author
- assert_equal 'A User', @a1.author
+ assert_equal "A User", @a1.author
end
def test_authors
- assert_equal ['A User'], @a1.authors
+ assert_equal ["A User"], @a1.authors
end
def test_bindir_equals
- @a1.bindir = 'apps'
+ @a1.bindir = "apps"
- assert_equal 'apps', @a1.bindir
+ assert_equal "apps", @a1.bindir
end
def test_bindir_equals_nil
@a2.bindir = nil
- @a2.executable = 'app'
+ @a2.executable = "app"
assert_nil @a2.bindir
assert_equal %w[app lib/code.rb].sort, @a2.files
@@ -1307,14 +1334,12 @@ dependencies: []
assert_empty @ext.build_args
- File.open @ext.build_info_file, 'w' do |io|
- io.puts
- end
+ File.open @ext.build_info_file, "w", &:puts
assert_empty @ext.build_args
- File.open @ext.build_info_file, 'w' do |io|
- io.puts '--with-foo-dir=wherever'
+ File.open @ext.build_info_file, "w" do |io|
+ io.puts "--with-foo-dir=wherever"
end
assert_equal %w[--with-foo-dir=wherever], @ext.build_args
@@ -1324,13 +1349,13 @@ dependencies: []
pend "extensions don't quite work on jruby" if Gem.java_platform?
ext_spec
- assert_path_not_exist @ext.extension_dir, 'sanity check'
- refute_empty @ext.extensions, 'sanity check'
+ assert_path_not_exist @ext.extension_dir, "sanity check"
+ refute_empty @ext.extensions, "sanity check"
extconf_rb = File.join @ext.gem_dir, @ext.extensions.first
FileUtils.mkdir_p File.dirname extconf_rb
- File.open extconf_rb, 'w' do |f|
+ File.open extconf_rb, "w" do |f|
f.write <<-'RUBY'
File.open 'Makefile', 'w' do |f|
f.puts "clean:\n\techo clean"
@@ -1346,13 +1371,13 @@ dependencies: []
end
def test_default_spec_stub_is_marked_default
- default = new_default_spec 'default', 2
+ default = new_default_spec "default", 2
install_default_gems default
- stub = Gem::Specification.stubs.find {|s| s.name == 'default' }
+ stub = Gem::Specification.stubs.find {|s| s.name == "default" }
assert_predicate stub, :default_gem?
- stub = Gem::Specification.find_all_by_name('default').first
+ stub = Gem::Specification.find_all_by_name("default").first
assert_predicate stub, :default_gem?
end
@@ -1360,28 +1385,28 @@ dependencies: []
pend "extensions don't quite work on jruby" if Gem.java_platform?
ext_spec
- refute_empty @ext.extensions, 'sanity check'
+ refute_empty @ext.extensions, "sanity check"
gem_build_complete =
- File.join @ext.extension_dir, 'gem.build_complete'
+ File.join @ext.extension_dir, "gem.build_complete"
FileUtils.mkdir_p @ext.extension_dir
FileUtils.touch gem_build_complete
@ext.build_extensions
- gem_make_out = File.join @ext.extension_dir, 'gem_make.out'
+ gem_make_out = File.join @ext.extension_dir, "gem_make.out"
assert_path_not_exist gem_make_out
end
def test_build_extensions_default_gem
- spec = new_default_spec 'default', 1
- spec.extensions << 'extconf.rb'
+ spec = new_default_spec "default", 1
+ spec.extensions << "extconf.rb"
extconf_rb = File.join spec.gem_dir, spec.extensions.first
FileUtils.mkdir_p File.dirname extconf_rb
- File.open extconf_rb, 'w' do |f|
+ File.open extconf_rb, "w" do |f|
f.write <<-'RUBY'
File.open 'Makefile', 'w' do |f|
f.puts "default:\n\techo built"
@@ -1399,7 +1424,7 @@ dependencies: []
pend "extensions don't quite work on jruby" if Gem.java_platform?
ext_spec
- refute_empty @ext.extensions, 'sanity check'
+ refute_empty @ext.extensions, "sanity check"
assert_raise Gem::Ext::BuildError do
@ext.build_extensions
@@ -1407,18 +1432,18 @@ dependencies: []
end
def test_build_extensions_extensions_dir_unwritable
- pend 'chmod not supported' if Gem.win_platform?
- pend 'skipped in root privilege' if Process.uid.zero?
+ pend "chmod not supported" if Gem.win_platform?
+ pend "skipped in root privilege" if Process.uid.zero?
pend "extensions don't quite work on jruby" if Gem.java_platform?
ext_spec
- refute_empty @ext.extensions, 'sanity check'
+ refute_empty @ext.extensions, "sanity check"
extconf_rb = File.join @ext.gem_dir, @ext.extensions.first
FileUtils.mkdir_p File.dirname extconf_rb
- File.open extconf_rb, 'w' do |f|
+ File.open extconf_rb, "w" do |f|
f.write <<-'RUBY'
File.open 'Makefile', 'w' do |f|
f.puts "clean:\n\techo clean"
@@ -1428,30 +1453,30 @@ dependencies: []
RUBY
end
- FileUtils.mkdir_p File.join @ext.base_dir, 'extensions'
- FileUtils.chmod 0555, @ext.base_dir
- FileUtils.chmod 0555, File.join(@ext.base_dir, 'extensions')
+ FileUtils.mkdir_p File.join @ext.base_dir, "extensions"
+ FileUtils.chmod 0o555, @ext.base_dir
+ FileUtils.chmod 0o555, File.join(@ext.base_dir, "extensions")
@ext.build_extensions
assert_path_not_exist @ext.extension_dir
ensure
- unless ($DEBUG or win_platform? or Process.uid.zero? or Gem.java_platform?)
- FileUtils.chmod 0755, File.join(@ext.base_dir, 'extensions')
- FileUtils.chmod 0755, @ext.base_dir
+ unless $DEBUG || Gem.win_platform? || Process.uid.zero? || Gem.java_platform?
+ FileUtils.chmod 0o755, File.join(@ext.base_dir, "extensions")
+ FileUtils.chmod 0o755, @ext.base_dir
end
end
def test_build_extensions_no_extensions_dir_unwritable
- pend 'chmod not supported' if Gem.win_platform?
+ pend "chmod not supported" if Gem.win_platform?
pend "extensions don't quite work on jruby" if Gem.java_platform?
ext_spec
- refute_empty @ext.extensions, 'sanity check'
+ refute_empty @ext.extensions, "sanity check"
extconf_rb = File.join @ext.gem_dir, @ext.extensions.first
FileUtils.mkdir_p File.dirname extconf_rb
- File.open extconf_rb, 'w' do |f|
+ File.open extconf_rb, "w" do |f|
f.write <<-'RUBY'
File.open 'Makefile', 'w' do |f|
f.puts "clean:\n\techo clean"
@@ -1461,20 +1486,20 @@ dependencies: []
RUBY
end
- FileUtils.rm_r File.join @gemhome, 'extensions'
- FileUtils.chmod 0555, @gemhome
+ FileUtils.rm_r File.join @gemhome, "extensions"
+ FileUtils.chmod 0o555, @gemhome
@ext.build_extensions
- gem_make_out = File.join @ext.extension_dir, 'gem_make.out'
+ gem_make_out = File.join @ext.extension_dir, "gem_make.out"
assert_path_not_exist gem_make_out
ensure
- FileUtils.chmod 0755, @gemhome
+ FileUtils.chmod 0o755, @gemhome
end
def test_build_extensions_none
- assert_path_not_exist @a1.extension_dir, 'sanity check'
- assert_empty @a1.extensions, 'sanity check'
+ assert_path_not_exist @a1.extension_dir, "sanity check"
+ assert_empty @a1.extensions, "sanity check"
@a1.build_extensions
@@ -1488,7 +1513,7 @@ dependencies: []
extconf_rb = File.join @ext.gem_dir, @ext.extensions.first
FileUtils.mkdir_p File.dirname extconf_rb
- File.open extconf_rb, 'w' do |f|
+ File.open extconf_rb, "w" do |f|
f.write <<-'RUBY'
File.open 'Makefile', 'w' do |f|
f.puts "clean:\n\techo clean"
@@ -1498,22 +1523,22 @@ dependencies: []
RUBY
end
- refute_empty @ext.extensions, 'sanity check'
+ refute_empty @ext.extensions, "sanity check"
- @ext.installed_by_version = v('2.2.0.preview.2')
+ @ext.installed_by_version = v("2.2.0.preview.2")
@ext.build_extensions
- gem_make_out = File.join @ext.extension_dir, 'gem_make.out'
+ gem_make_out = File.join @ext.extension_dir, "gem_make.out"
assert_path_exist gem_make_out
end
def test_contains_requirable_file_eh
- code_rb = File.join @a1.gem_dir, 'lib', 'code.rb'
+ code_rb = File.join @a1.gem_dir, "lib", "code.rb"
FileUtils.mkdir_p File.dirname code_rb
FileUtils.touch code_rb
- assert @a1.contains_requirable_file? 'code'
+ assert @a1.contains_requirable_file? "code"
end
def test_contains_requirable_file_eh_extension
@@ -1521,10 +1546,10 @@ dependencies: []
ext_spec
_, err = capture_output do
- refute @ext.contains_requirable_file? 'nonexistent'
+ refute @ext.contains_requirable_file? "nonexistent"
end
- expected = "Ignoring ext-1 because its extensions are not built. " +
+ expected = "Ignoring ext-1 because its extensions are not built. " \
"Try: gem pristine ext --version 1\n"
assert_equal expected, err
@@ -1534,12 +1559,23 @@ dependencies: []
ext_spec(platform: Gem::Platform.new("java"))
_, err = capture_output do
- refute @ext.contains_requirable_file? 'nonexistent'
+ refute @ext.contains_requirable_file? "nonexistent"
end
assert_empty err
end
+ def test_contains_requirable_file_extension_soext
+ ext_spec
+ dlext = RbConfig::CONFIG["DLEXT"]
+ @ext.files += ["lib/ext.#{dlext}"]
+
+ FileUtils.mkdir_p @ext.extension_dir
+ FileUtils.touch File.join(@ext.extension_dir, "ext.#{dlext}")
+ FileUtils.touch File.join(@ext.extension_dir, "gem.build_complete")
+ assert @ext.contains_requirable_file? "ext.so"
+ end
+
def test_date
assert_date @a1.date
end
@@ -1550,13 +1586,13 @@ dependencies: []
end
def test_date_equals_string
- @a1.date = '2003-09-17'
+ @a1.date = "2003-09-17"
assert_equal Time.utc(2003, 9, 17, 0,0,0), @a1.date
end
def test_date_equals_string_bad
assert_raise Gem::InvalidSpecificationException do
- @a1.date = '9/11/2003'
+ @a1.date = "9/11/2003"
end
end
@@ -1577,12 +1613,12 @@ dependencies: []
def test_date_tolerates_hour_sec_zulu
@a1.date = "2012-01-12 11:22:33.4444444 Z"
- assert_equal Time.utc(2012,01,12,0,0,0), @a1.date
+ assert_equal Time.utc(2012,1,12,0,0,0), @a1.date
end
def test_date_tolerates_hour_sec_and_timezone
@a1.date = "2012-01-12 11:22:33.4444444 +02:33"
- assert_equal Time.utc(2012,01,12,0,0,0), @a1.date
+ assert_equal Time.utc(2012,1,12,0,0,0), @a1.date
end
def test_date_use_env_source_date_epoch
@@ -1603,7 +1639,7 @@ dependencies: []
assert_empty @gem.dependent_gems
- bonobo = util_spec 'bonobo', 1
+ bonobo = util_spec "bonobo", 1
install_gem bonobo
install_gem @gem
@@ -1615,11 +1651,11 @@ dependencies: []
end
def test_doc_dir
- assert_equal File.join(@gemhome, 'doc', 'a-1'), @a1.doc_dir
+ assert_equal File.join(@gemhome, "doc", "a-1"), @a1.doc_dir
end
def test_doc_dir_type
- assert_equal File.join(@gemhome, 'doc', 'a-1', 'ri'), @a1.doc_dir('ri')
+ assert_equal File.join(@gemhome, "doc", "a-1", "ri"), @a1.doc_dir("ri")
end
def test_runtime_dependencies
@@ -1633,12 +1669,12 @@ dependencies: []
end
def test_description
- assert_equal 'This is a test description', @a1.description
+ assert_equal "This is a test description", @a1.description
end
def test_eql_eh
- g1 = util_spec 'gem', 1
- g2 = util_spec 'gem', 1
+ g1 = util_spec "gem", 1
+ g2 = util_spec "gem", 1
assert_equal g1, g2
assert_equal g1.hash, g2.hash
@@ -1647,55 +1683,55 @@ dependencies: []
def test_eql_eh_extensions
spec = @a1.dup
- spec.extensions = 'xx'
+ spec.extensions = "xx"
refute_operator @a1, :eql?, spec
refute_operator spec, :eql?, @a1
end
def test_executables
- @a1.executable = 'app'
+ @a1.executable = "app"
assert_equal %w[app], @a1.executables
end
def test_executable_equals
- @a2.executable = 'app'
- assert_equal 'app', @a2.executable
+ @a2.executable = "app"
+ assert_equal "app", @a2.executable
assert_equal %w[bin/app lib/code.rb].sort, @a2.files
end
def test_extensions
- assert_equal ['ext/extconf.rb'], ext_spec.extensions
+ assert_equal ["ext/extconf.rb"], ext_spec.extensions
end
def test_extension_dir
- enable_shared, RbConfig::CONFIG['ENABLE_SHARED'] =
- RbConfig::CONFIG['ENABLE_SHARED'], 'no'
+ enable_shared = RbConfig::CONFIG["ENABLE_SHARED"]
+ RbConfig::CONFIG["ENABLE_SHARED"] = "no"
ext_spec
refute_empty @ext.extensions
expected =
- File.join(@ext.base_dir, 'extensions', Gem::Platform.local.to_s,
+ File.join(@ext.base_dir, "extensions", Gem::Platform.local.to_s,
"#{Gem.ruby_api_version}-static", @ext.full_name)
assert_equal expected, @ext.extension_dir
ensure
- RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared
+ RbConfig::CONFIG["ENABLE_SHARED"] = enable_shared
end
def test_extension_dir_override
- enable_shared, RbConfig::CONFIG['ENABLE_SHARED'] =
- RbConfig::CONFIG['ENABLE_SHARED'], 'no'
+ enable_shared = RbConfig::CONFIG["ENABLE_SHARED"]
+ RbConfig::CONFIG["ENABLE_SHARED"] = "no"
class << Gem
- alias orig_default_ext_dir_for default_ext_dir_for
+ alias_method :orig_default_ext_dir_for, :default_ext_dir_for
remove_method :default_ext_dir_for
def Gem.default_ext_dir_for(base_dir)
- 'elsewhere'
+ "elsewhere"
end
end
@@ -1703,16 +1739,16 @@ dependencies: []
refute_empty @ext.extensions
- expected = File.join @tempdir, 'elsewhere', @ext.full_name
+ expected = File.join @tempdir, "elsewhere", @ext.full_name
assert_equal expected, @ext.extension_dir
ensure
- RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared
+ RbConfig::CONFIG["ENABLE_SHARED"] = enable_shared
class << Gem
remove_method :default_ext_dir_for
- alias default_ext_dir_for orig_default_ext_dir_for
+ alias_method :default_ext_dir_for, :orig_default_ext_dir_for
end
end
@@ -1797,9 +1833,9 @@ dependencies: []
end
def test_for_cache
- @a2.add_runtime_dependency 'b', '1'
+ @a2.add_runtime_dependency "b", "1"
@a2.dependencies.first.instance_variable_set :@type, nil
- @a2.required_rubygems_version = Gem::Requirement.new '> 0'
+ @a2.required_rubygems_version = Gem::Requirement.new "> 0"
@a2.test_files = %w[test/test_b.rb]
refute_empty @a2.files
@@ -1815,16 +1851,16 @@ dependencies: []
end
def test_full_gem_path
- assert_equal File.join(@gemhome, 'gems', @a1.full_name), @a1.full_gem_path
+ assert_equal File.join(@gemhome, "gems", @a1.full_name), @a1.full_gem_path
- @a1.original_platform = 'mswin32'
+ @a1.original_platform = "mswin32"
- assert_equal File.join(@gemhome, 'gems', @a1.original_name),
+ assert_equal File.join(@gemhome, "gems", @a1.original_name),
@a1.full_gem_path
end
def test_full_gem_path_double_slash
- gemhome = @gemhome.to_s.sub(/\w\//, '\&/')
+ gemhome = @gemhome.to_s.sub(%r{\w/}, '\&/')
@a1.loaded_from = File.join gemhome, "specifications", @a1.spec_name
expected = File.join @gemhome, "gems", @a1.full_name
@@ -1832,40 +1868,40 @@ dependencies: []
end
def test_full_name
- assert_equal 'a-1', @a1.full_name
+ assert_equal "a-1", @a1.full_name
@a1 = Gem::Specification.new "a", 1
- @a1.platform = Gem::Platform.new ['universal', 'darwin', nil]
- assert_equal 'a-1-universal-darwin', @a1.full_name
+ @a1.platform = Gem::Platform.new ["universal", "darwin", nil]
+ assert_equal "a-1-universal-darwin", @a1.full_name
@a1 = Gem::Specification.new "a", 1
- @a1.instance_variable_set :@new_platform, 'mswin32'
- assert_equal 'a-1-mswin32', @a1.full_name, 'legacy'
+ @a1.instance_variable_set :@new_platform, "mswin32"
+ assert_equal "a-1-mswin32", @a1.full_name, "legacy"
- return if win_platform?
+ return if Gem.win_platform?
@a1 = Gem::Specification.new "a", 1
- @a1.platform = 'current'
- assert_equal 'a-1-x86-darwin-8', @a1.full_name
+ @a1.platform = "current"
+ assert_equal "a-1-x86-darwin-8", @a1.full_name
end
def test_full_name_windows
test_cases = {
- 'i386-mswin32' => 'a-1-x86-mswin32-60',
- 'i386-mswin32_80' => 'a-1-x86-mswin32-80',
- 'i386-mingw32' => 'a-1-x86-mingw32',
+ "i386-mswin32" => "a-1-x86-mswin32-60",
+ "i386-mswin32_80" => "a-1-x86-mswin32-80",
+ "i386-mingw32" => "a-1-x86-mingw32",
}
test_cases.each do |arch, expected|
@a1 = Gem::Specification.new "a", 1
util_set_arch arch
- @a1.platform = 'current'
+ @a1.platform = "current"
assert_equal expected, @a1.full_name
end
end
def test_gem_build_complete_path
- expected = File.join @a1.extension_dir, 'gem.build_complete'
+ expected = File.join @a1.extension_dir, "gem.build_complete"
assert_equal expected, @a1.gem_build_complete_path
end
@@ -1909,23 +1945,23 @@ dependencies: []
end
def test_license
- assert_equal 'MIT', @a1.license
+ assert_equal "MIT", @a1.license
end
def test_licenses
- assert_equal ['MIT'], @a1.licenses
+ assert_equal ["MIT"], @a1.licenses
end
def test_name
- assert_equal 'a', @a1.name
+ assert_equal "a", @a1.name
end
def test_original_name
- assert_equal 'a-1', @a1.full_name
+ assert_equal "a-1", @a1.full_name
- @a1.platform = 'i386-linux'
- @a1.instance_variable_set :@original_platform, 'i386-linux'
- assert_equal 'a-1-i386-linux', @a1.original_name
+ @a1.platform = "i386-linux"
+ @a1.instance_variable_set :@original_platform, "i386-linux"
+ assert_equal "a-1-i386-linux", @a1.original_name
end
def test_platform
@@ -1954,10 +1990,10 @@ dependencies: []
assert_equal Gem::Platform::RUBY, @a1.platform
test_cases = {
- 'i386-mswin32' => ['x86', 'mswin32', '60'],
- 'i386-mswin32_80' => ['x86', 'mswin32', '80'],
- 'i386-mingw32' => ['x86', 'mingw32', nil ],
- 'x86-darwin8' => ['x86', 'darwin', '8' ],
+ "i386-mswin32" => ["x86", "mswin32", "60"],
+ "i386-mswin32_80" => ["x86", "mswin32", "80"],
+ "i386-mingw32" => ["x86", "mingw32", nil],
+ "x86-darwin8" => ["x86", "darwin", "8"],
}
test_cases.each do |arch, expected|
@@ -1974,29 +2010,23 @@ dependencies: []
end
def test_platform_equals_legacy
- @a1.platform = 'mswin32'
- assert_equal Gem::Platform.new('x86-mswin32'), @a1.platform
-
- @a1.platform = 'i586-linux'
- assert_equal Gem::Platform.new('x86-linux'), @a1.platform
+ @a1.platform = "mswin32"
+ assert_equal Gem::Platform.new("x86-mswin32"), @a1.platform
- @a1.platform = 'powerpc-darwin'
- assert_equal Gem::Platform.new('ppc-darwin'), @a1.platform
- end
+ @a1.platform = "i586-linux"
+ assert_equal Gem::Platform.new("x86-linux"), @a1.platform
- def test_prerelease_spec_adds_required_rubygems_version
- @prerelease = util_spec('tardis', '2.2.0.a')
- refute @prerelease.required_rubygems_version.satisfied_by?(Gem::Version.new('1.3.1'))
- assert @prerelease.required_rubygems_version.satisfied_by?(Gem::Version.new('1.4.0'))
+ @a1.platform = "powerpc-darwin"
+ assert_equal Gem::Platform.new("ppc-darwin"), @a1.platform
end
def test_require_paths
- enable_shared 'no' do
+ enable_shared "no" do
ext_spec
- @ext.require_paths = 'lib'
+ @ext.require_paths = "lib"
- assert_equal [@ext.extension_dir, 'lib'], @ext.require_paths
+ assert_equal [@ext.extension_dir, "lib"], @ext.require_paths
end
end
@@ -2008,15 +2038,15 @@ dependencies: []
end
def Gem.default_ext_dir_for(base_dir)
- '/foo'
+ "/foo"
end
- enable_shared 'no' do
+ enable_shared "no" do
ext_spec
- @ext.require_paths = 'lib'
+ @ext.require_paths = "lib"
- assert_equal [File.expand_path('/foo/ext-1'), 'lib'], @ext.require_paths
+ assert_equal [File.expand_path("/foo/ext-1"), "lib"], @ext.require_paths
end
ensure
class << Gem
@@ -2034,7 +2064,7 @@ dependencies: []
ext_spec
@ext.require_paths = %w[lib ext foo]
- @ext.extensions << 'bar/baz'
+ @ext.extensions << "bar/baz"
expected = %w[
lib
@@ -2049,10 +2079,10 @@ dependencies: []
def test_full_require_paths
ext_spec
- @ext.require_paths = 'lib'
+ @ext.require_paths = "lib"
expected = [
- File.join(@gemhome, 'gems', @ext.original_name, 'lib'),
+ File.join(@gemhome, "gems", @ext.original_name, "lib"),
@ext.extension_dir,
]
@@ -2062,10 +2092,10 @@ dependencies: []
def test_to_fullpath
ext_spec
- @ext.require_paths = 'lib'
+ @ext.require_paths = "lib"
- dir = File.join(@gemhome, 'gems', @ext.original_name, 'lib')
- expected_rb = File.join(dir, 'code.rb')
+ dir = File.join(@gemhome, "gems", @ext.original_name, "lib")
+ expected_rb = File.join(dir, "code.rb")
FileUtils.mkdir_p dir
FileUtils.touch expected_rb
@@ -2099,10 +2129,10 @@ dependencies: []
def test_fullpath_return_rb_extension_file_when_exist_the_same_name_file
ext_spec
- @ext.require_paths = 'lib'
+ @ext.require_paths = "lib"
- dir = File.join(@gemhome, 'gems', @ext.original_name, 'lib')
- expected_rb = File.join(dir, 'code.rb')
+ dir = File.join(@gemhome, "gems", @ext.original_name, "lib")
+ expected_rb = File.join(dir, "code.rb")
FileUtils.mkdir_p dir
FileUtils.touch expected_rb
@@ -2154,12 +2184,12 @@ dependencies: []
end
def test_requirements
- assert_equal ['A working computer'], @a1.requirements
+ assert_equal ["A working computer"], @a1.requirements
end
def test_allowed_push_host
- assert_nil @a1.metadata['allowed_push_host']
- assert_equal 'https://privategemserver.com', @a3.metadata['allowed_push_host']
+ assert_nil @a1.metadata["allowed_push_host"]
+ assert_equal "https://privategemserver.com", @a3.metadata["allowed_push_host"]
end
def test_runtime_dependencies_legacy
@@ -2171,58 +2201,58 @@ dependencies: []
expected = %w[rake jabber4r pqa]
- assert_equal expected, @c1.runtime_dependencies.map {|d| d.name }
+ assert_equal expected, @c1.runtime_dependencies.map(&:name)
end
def test_spaceship_name
- s1 = util_spec 'a', '1'
- s2 = util_spec 'b', '1'
+ s1 = util_spec "a", "1"
+ s2 = util_spec "b", "1"
assert_equal(-1, (s1 <=> s2))
- assert_equal(0, (s1 <=> s1))
+ assert_equal(0, (s1 <=> s1)) # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
assert_equal(1, (s2 <=> s1))
end
def test_spaceship_platform
- s1 = util_spec 'a', '1'
- s2 = util_spec 'a', '1' do |s|
- s.platform = Gem::Platform.new 'x86-my_platform1'
+ s1 = util_spec "a", "1"
+ s2 = util_spec "a", "1" do |s|
+ s.platform = Gem::Platform.new "x86-my_platform1"
end
assert_equal(-1, (s1 <=> s2))
- assert_equal(0, (s1 <=> s1))
+ assert_equal(0, (s1 <=> s1)) # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
assert_equal(1, (s2 <=> s1))
end
def test_spaceship_version
- s1 = util_spec 'a', '1'
- s2 = util_spec 'a', '2'
+ s1 = util_spec "a", "1"
+ s2 = util_spec "a", "2"
assert_equal(-1, (s1 <=> s2))
- assert_equal(0, (s1 <=> s1))
+ assert_equal(0, (s1 <=> s1)) # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands
assert_equal(1, (s2 <=> s1))
end
def test_spec_file
- assert_equal File.join(@gemhome, 'specifications', 'a-1.gemspec'),
+ assert_equal File.join(@gemhome, "specifications", "a-1.gemspec"),
@a1.spec_file
end
def test_spec_name
- assert_equal 'a-1.gemspec', @a1.spec_name
+ assert_equal "a-1.gemspec", @a1.spec_name
end
def test_summary
- assert_equal 'this is a summary', @a1.summary
+ assert_equal "this is a summary", @a1.summary
end
def test_test_files
- @a1.test_file = 'test/suite.rb'
- assert_equal ['test/suite.rb'], @a1.test_files
+ @a1.test_file = "test/suite.rb"
+ assert_equal ["test/suite.rb"], @a1.test_files
end
def test_runtime_predicate_true
- @a2.add_runtime_dependency 'b', '1'
+ @a2.add_runtime_dependency "b", "1"
assert_predicate @a2.dependencies.first, :runtime?
@a2.dependencies.first.instance_variable_set :@type, nil
@@ -2230,15 +2260,15 @@ dependencies: []
end
def test_runtime_predicate_false
- @a2.add_development_dependency 'b', '1'
+ @a2.add_development_dependency "b", "1"
refute_predicate @a2.dependencies.first, :runtime?
end
def test_to_ruby
- @a2.add_runtime_dependency 'b', '1'
+ @a2.add_runtime_dependency "b", "1"
@a2.dependencies.first.instance_variable_set :@type, nil
- @a2.required_rubygems_version = Gem::Requirement.new '> 0'
- @a2.require_paths << 'other'
+ @a2.required_rubygems_version = Gem::Requirement.new "> 0"
+ @a2.require_paths << "other"
ruby_code = @a2.to_ruby
@@ -2248,7 +2278,7 @@ dependencies: []
Gem::Specification.new do |s|
s.name = "a".freeze
- s.version = "2"
+ s.version = "2".freeze
s.required_rubygems_version = Gem::Requirement.new(\"> 0\".freeze) if s.respond_to? :required_rubygems_version=
s.require_paths = ["lib".freeze, "other".freeze]
@@ -2261,15 +2291,9 @@ Gem::Specification.new do |s|
s.rubygems_version = "#{Gem::VERSION}".freeze
s.summary = "this is a summary".freeze
- if s.respond_to? :specification_version then
- s.specification_version = #{Gem::Specification::CURRENT_SPECIFICATION_VERSION}
- end
+ s.specification_version = #{Gem::Specification::CURRENT_SPECIFICATION_VERSION}
- if s.respond_to? :add_runtime_dependency then
- s.add_runtime_dependency(%q<b>.freeze, [\"= 1\"])
- else
- s.add_dependency(%q<b>.freeze, [\"= 1\"])
- end
+ s.add_runtime_dependency(%q<b>.freeze, [\"= 1\".freeze])
end
SPEC
@@ -2281,8 +2305,8 @@ end
end
def test_to_ruby_with_rsa_key
- require 'rubygems/openssl'
- pend 'openssl is missing' unless defined?(OpenSSL::PKey::RSA)
+ require "rubygems/openssl"
+ pend "openssl is missing" unless defined?(OpenSSL::PKey::RSA)
rsa_key = OpenSSL::PKey::RSA.new(2048)
@a2.signing_key = rsa_key
@@ -2294,7 +2318,7 @@ end
Gem::Specification.new do |s|
s.name = "a".freeze
- s.version = "2"
+ s.version = "2".freeze
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
s.require_paths = ["lib".freeze]
@@ -2313,9 +2337,9 @@ end
end
def test_to_ruby_for_cache
- @a2.add_runtime_dependency 'b', '1'
+ @a2.add_runtime_dependency "b", "1"
@a2.dependencies.first.instance_variable_set :@type, nil
- @a2.required_rubygems_version = Gem::Requirement.new '> 0'
+ @a2.required_rubygems_version = Gem::Requirement.new "> 0"
@a2.installed_by_version = Gem.rubygems_version
# cached specs do not have spec.files populated:
@@ -2327,7 +2351,7 @@ end
Gem::Specification.new do |s|
s.name = "a".freeze
- s.version = "2"
+ s.version = "2".freeze
s.required_rubygems_version = Gem::Requirement.new(\"> 0\".freeze) if s.respond_to? :required_rubygems_version=
s.require_paths = ["lib".freeze]
@@ -2339,17 +2363,11 @@ Gem::Specification.new do |s|
s.rubygems_version = "#{Gem::VERSION}".freeze
s.summary = "this is a summary".freeze
- s.installed_by_version = "#{Gem::VERSION}" if s.respond_to? :installed_by_version
+ s.installed_by_version = "#{Gem::VERSION}".freeze if s.respond_to? :installed_by_version
- if s.respond_to? :specification_version then
- s.specification_version = #{Gem::Specification::CURRENT_SPECIFICATION_VERSION}
- end
+ s.specification_version = #{Gem::Specification::CURRENT_SPECIFICATION_VERSION}
- if s.respond_to? :add_runtime_dependency then
- s.add_runtime_dependency(%q<b>.freeze, [\"= 1\"])
- else
- s.add_dependency(%q<b>.freeze, [\"= 1\"])
- end
+ s.add_runtime_dependency(%q<b>.freeze, ["= 1".freeze])
end
SPEC
@@ -2369,19 +2387,19 @@ end
ruby_code = @c1.to_ruby
local = Gem::Platform.local
- expected_platform = "[#{local.cpu.inspect}, #{local.os.inspect}, #{local.version.inspect}]"
+ expected_platform = "[#{local.cpu.inspect}.freeze, #{local.os.inspect}.freeze, #{local.version.inspect}.freeze]"
stub_require_paths =
@c1.instance_variable_get(:@require_paths).join "\u0000"
extensions = @c1.extensions.join "\u0000"
expected = <<-SPEC
# -*- encoding: utf-8 -*-
-# stub: a 1 #{win_platform? ? "x86-mswin32-60" : "x86-darwin-8"} #{stub_require_paths}
+# stub: a 1 #{Gem.win_platform? ? "x86-mswin32-60" : "x86-darwin-8"} #{stub_require_paths}
# stub: #{extensions}
Gem::Specification.new do |s|
s.name = "a".freeze
- s.version = "1"
+ s.version = "1".freeze
s.platform = Gem::Platform.new(#{expected_platform})
s.required_rubygems_version = Gem::Requirement.new(\">= 0\".freeze) if s.respond_to? :required_rubygems_version=
@@ -2400,19 +2418,11 @@ Gem::Specification.new do |s|
s.summary = "this is a summary".freeze
s.test_files = ["test/suite.rb".freeze]
- if s.respond_to? :specification_version then
- s.specification_version = 4
- end
+ s.specification_version = 4
- if s.respond_to? :add_runtime_dependency then
- s.add_runtime_dependency(%q<rake>.freeze, [\"> 0.4\"])
- s.add_runtime_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
- s.add_runtime_dependency(%q<pqa>.freeze, [\"> 0.4\", \"<= 0.6\"])
- else
- s.add_dependency(%q<rake>.freeze, [\"> 0.4\"])
- s.add_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\"])
- s.add_dependency(%q<pqa>.freeze, [\"> 0.4\", \"<= 0.6\"])
- end
+ s.add_runtime_dependency(%q<rake>.freeze, [\"> 0.4\".freeze])
+ s.add_runtime_dependency(%q<jabber4r>.freeze, [\"> 0.0.0\".freeze])
+ s.add_runtime_dependency(%q<pqa>.freeze, [\"> 0.4\".freeze, \"<= 0.6\".freeze])
end
SPEC
@@ -2424,11 +2434,11 @@ end
end
def test_to_ruby_keeps_requirements_as_originally_specified
- spec = util_spec 'a', '1' do |s|
- s.add_dependency 'b', ['~> 1.0', '>= 1.0.0']
+ spec = util_spec "a", "1" do |s|
+ s.add_dependency "b", ["~> 1.0", ">= 1.0.0"]
end
- assert_includes spec.to_ruby, '"~> 1.0", ">= 1.0.0"'
+ assert_includes spec.to_ruby, '"~> 1.0".freeze, ">= 1.0.0".freeze'
end
def test_to_ruby_legacy
@@ -2443,30 +2453,30 @@ end
def test_to_ruby_nested_hash
metadata = {}
- metadata[metadata] = metadata
+ metadata[:metadata] = {}
@a2.metadata = metadata
ruby = @a2.to_ruby
- assert_match %r%^ s\.metadata = \{ "%, ruby
+ assert_match(/^ s\.metadata = \{ "/, ruby)
end
def test_to_ruby_platform
@a2.platform = Gem::Platform.local
- @a2.instance_variable_set :@original_platform, 'old_platform'
+ @a2.instance_variable_set :@original_platform, "old_platform"
ruby_code = @a2.to_ruby
same_spec = eval ruby_code
- assert_equal 'old_platform', same_spec.original_platform
+ assert_equal "old_platform", same_spec.original_platform
end
def test_to_yaml
yaml_str = @a1.to_yaml
- refute_match %r{!!null}, yaml_str
+ refute_match(/!!null/, yaml_str)
same_spec = Gem::Specification.from_yaml(yaml_str)
@@ -2485,27 +2495,47 @@ end
end
def test_to_yaml_platform_empty_string
- @a1.instance_variable_set :@original_platform, ''
+ @a1.instance_variable_set :@original_platform, ""
- assert_match %r{^platform: ruby$}, @a1.to_yaml
+ assert_match(/^platform: ruby$/, @a1.to_yaml)
end
def test_to_yaml_platform_legacy
- @a1.platform = 'powerpc-darwin7.9.0'
- @a1.instance_variable_set :@original_platform, 'powerpc-darwin7.9.0'
+ @a1.platform = "powerpc-darwin7.9.0"
+ @a1.instance_variable_set :@original_platform, "powerpc-darwin7.9.0"
yaml_str = @a1.to_yaml
same_spec = load_yaml yaml_str
- assert_equal Gem::Platform.new('powerpc-darwin7'), same_spec.platform
- assert_equal 'powerpc-darwin7.9.0', same_spec.original_platform
+ assert_equal Gem::Platform.new("powerpc-darwin7"), same_spec.platform
+ assert_equal "powerpc-darwin7.9.0", same_spec.original_platform
end
def test_to_yaml_platform_nil
@a1.instance_variable_set :@original_platform, nil
- assert_match %r{^platform: ruby$}, @a1.to_yaml
+ assert_match(/^platform: ruby$/, @a1.to_yaml)
+ end
+
+ def test_to_yaml_no_autorequire
+ yaml_str = @a1.to_yaml
+
+ refute_match(/^autorequire:/, yaml_str)
+ end
+
+ def test_to_yaml_no_signing_key
+ @a1.signing_key = nil
+ yaml_str = @a1.to_yaml
+
+ refute_match(/^signing_key:/, yaml_str)
+ end
+
+ def test_to_yaml_no_post_install_message
+ @a1.post_install_message = nil
+ yaml_str = @a1.to_yaml
+
+ refute_match(/^post_install_message:/, yaml_str)
end
def test_validate
@@ -2516,10 +2546,21 @@ end
end
end
- def x(s); s.gsub(/xxx/, ''); end
- def w; x "WARxxxNING"; end
- def t; x "TOxxxDO"; end
- def f; x "FxxxIXME"; end
+ def x(s)
+ s.gsub(/xxx/, "")
+ end
+
+ def w
+ x "WARxxxNING"
+ end
+
+ def t
+ x "TOxxxDO"
+ end
+
+ def f
+ x "FxxxIXME"
+ end
def test_validate_authors
util_setup_validate
@@ -2531,7 +2572,7 @@ end
@a1.validate
end
- assert_match "#{w}: no author specified\n", @ui.error, 'error'
+ assert_match "#{w}: no author specified\n", @ui.error, "error"
@a1.authors = [Object.new]
@@ -2565,14 +2606,14 @@ end
util_setup_validate
Dir.chdir @tempdir do
- @a1.autorequire = 'code'
+ @a1.autorequire = "code"
use_ui @ui do
@a1.validate
end
assert_match "#{w}: deprecated autorequire specified\n",
- @ui.error, 'error'
+ @ui.error, "error"
end
end
@@ -2580,19 +2621,19 @@ end
util_setup_validate
Dir.chdir @tempdir do
- @a1.add_runtime_dependency 'b', '>= 1.0.rc1'
- @a1.add_development_dependency 'c', '>= 2.0.rc2'
- @a1.add_runtime_dependency 'd', '~> 1.2.3'
- @a1.add_runtime_dependency 'e', '~> 1.2.3.4'
- @a1.add_runtime_dependency 'g', '~> 1.2.3', '>= 1.2.3.4'
- @a1.add_runtime_dependency 'h', '>= 1.2.3', '<= 2'
- @a1.add_runtime_dependency 'i', '>= 1.2'
- @a1.add_runtime_dependency 'j', '>= 1.2.3'
- @a1.add_runtime_dependency 'k', '> 1.2'
- @a1.add_runtime_dependency 'l', '> 1.2.3'
- @a1.add_runtime_dependency 'm', '~> 2.1.0'
- @a1.add_runtime_dependency 'n', '~> 0.1.0'
- @a1.add_runtime_dependency 'o'
+ @a1.add_runtime_dependency "b", ">= 1.0.rc1"
+ @a1.add_development_dependency "c", ">= 2.0.rc2"
+ @a1.add_runtime_dependency "d", "~> 1.2.3"
+ @a1.add_runtime_dependency "e", "~> 1.2.3.4"
+ @a1.add_runtime_dependency "g", "~> 1.2.3", ">= 1.2.3.4"
+ @a1.add_runtime_dependency "h", ">= 1.2.3", "<= 2"
+ @a1.add_runtime_dependency "i", ">= 1.2"
+ @a1.add_runtime_dependency "j", ">= 1.2.3"
+ @a1.add_runtime_dependency "k", "> 1.2"
+ @a1.add_runtime_dependency "l", "> 1.2.3"
+ @a1.add_runtime_dependency "m", "~> 2.1.0"
+ @a1.add_runtime_dependency "n", "~> 0.1.0"
+ @a1.add_runtime_dependency "o"
use_ui @ui do
@a1.validate
@@ -2603,22 +2644,22 @@ end
#{w}: prerelease dependency on c (>= 2.0.rc2, development) is not recommended
#{w}: open-ended dependency on i (>= 1.2) is not recommended
if i is semantically versioned, use:
- add_runtime_dependency 'i', '~> 1.2'
+ add_runtime_dependency "i", "~> 1.2"
#{w}: open-ended dependency on j (>= 1.2.3) is not recommended
if j is semantically versioned, use:
- add_runtime_dependency 'j', '~> 1.2', '>= 1.2.3'
+ add_runtime_dependency "j", "~> 1.2", ">= 1.2.3"
#{w}: open-ended dependency on k (> 1.2) is not recommended
if k is semantically versioned, use:
- add_runtime_dependency 'k', '~> 1.2', '> 1.2'
+ add_runtime_dependency "k", "~> 1.2", "> 1.2"
#{w}: open-ended dependency on l (> 1.2.3) is not recommended
if l is semantically versioned, use:
- add_runtime_dependency 'l', '~> 1.2', '> 1.2.3'
+ 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'
+ use a bounded requirement, such as "~> x.y"
#{w}: See https://guides.rubygems.org/specification-reference/ for help
EXPECTED
- assert_equal expected, @ui.error, 'warning'
+ assert_equal expected, @ui.error, "warning"
end
end
@@ -2626,10 +2667,10 @@ end
util_setup_validate
Dir.chdir @tempdir do
- @a1.add_runtime_dependency 'b', '~> 1.2'
- @a1.add_runtime_dependency 'b', '>= 1.2.3'
- @a1.add_development_dependency 'c', '~> 1.2'
- @a1.add_development_dependency 'c', '>= 1.2.3'
+ @a1.add_runtime_dependency "b", "~> 1.2"
+ @a1.add_runtime_dependency "b", ">= 1.2.3"
+ @a1.add_development_dependency "c", "~> 1.2"
+ @a1.add_development_dependency "c", ">= 1.2.3"
use_ui @ui do
e = assert_raise Gem::InvalidSpecificationException do
@@ -2638,9 +2679,9 @@ end
expected = <<-EXPECTED
duplicate dependency on b (>= 1.2.3), (~> 1.2) use:
- add_runtime_dependency 'b', '>= 1.2.3', '~> 1.2'
+ add_runtime_dependency "b", ">= 1.2.3", "~> 1.2"
duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
- add_development_dependency 'c', '>= 1.2.3', '~> 1.2'
+ add_development_dependency "c", ">= 1.2.3", "~> 1.2"
EXPECTED
assert_equal expected, e.message
@@ -2656,14 +2697,61 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
util_setup_validate
Dir.chdir @tempdir do
- @a1.add_runtime_dependency 'b', '~> 1.2'
- @a1.add_development_dependency 'b', '= 1.2.3'
+ @a1.add_runtime_dependency "b", "~> 1.2"
+ @a1.add_development_dependency "b", "= 1.2.3"
use_ui @ui do
@a1.validate
end
- assert_equal '', @ui.error, 'warning'
+ assert_equal "", @ui.error, "warning"
+ end
+ end
+
+ def test_validate_no_required_ruby_versions
+ util_setup_validate
+
+ Dir.chdir @tempdir do
+ use_ui @ui do
+ @a1.required_ruby_version = nil # reset
+ @a1.validate
+ end
+
+ assert_equal <<-EXPECTED, @ui.error
+#{w}: make sure you specify the oldest ruby version constraint (like \">= 3.0\") that you want your gem to support by setting the `required_ruby_version` gemspec attribute
+#{w}: See https://guides.rubygems.org/specification-reference/ for help
+ EXPECTED
+ end
+ end
+
+ def test_validate_open_required_ruby_versions
+ util_setup_validate
+
+ Dir.chdir @tempdir do
+ @a1.required_ruby_version = ">= 0"
+
+ use_ui @ui do
+ @a1.validate
+ end
+
+ assert_equal <<-EXPECTED, @ui.error
+#{w}: make sure you specify the oldest ruby version constraint (like \">= 3.0\") that you want your gem to support by setting the `required_ruby_version` gemspec attribute
+#{w}: See https://guides.rubygems.org/specification-reference/ for help
+ EXPECTED
+ end
+ end
+
+ def test_validate_valid_required_ruby_versions
+ util_setup_validate
+
+ Dir.chdir @tempdir do
+ @a1.required_ruby_version = ">= 2.3.0"
+
+ use_ui @ui do
+ @a1.validate
+ end
+
+ assert_equal "", @ui.error, "warning"
end
end
@@ -2671,14 +2759,31 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
util_setup_validate
Dir.chdir @tempdir do
- @a1.version = '1.0.0.beta.1'
- @a1.add_runtime_dependency 'b', '~> 1.2.0.beta.1'
+ @a1.version = "1.0.0.beta.1"
+ @a1.add_runtime_dependency "b", "~> 1.2.0.beta.1"
use_ui @ui do
@a1.validate
end
- assert_equal '', @ui.error, 'warning'
+ assert_equal "", @ui.error, "warning"
+ end
+ end
+
+ def test_validate_self_referencing_dependencies
+ util_setup_validate
+
+ Dir.chdir @tempdir do
+ @a1.add_runtime_dependency @a1.name, "1"
+
+ use_ui @ui do
+ @a1.validate
+ end
+
+ assert_equal <<-EXPECTED, @ui.error
+#{w}: Self referencing dependency is unnecessary and strongly discouraged.
+#{w}: See https://guides.rubygems.org/specification-reference/ for help
+ EXPECTED
end
end
@@ -2686,14 +2791,14 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
util_setup_validate
Dir.chdir @tempdir do
- @a1.extensions = ['Rakefile']
- File.write File.join(@tempdir, 'Rakefile'), ''
+ @a1.extensions = ["Rakefile"]
+ File.write File.join(@tempdir, "Rakefile"), ""
use_ui @ui do
@a1.validate
end
- assert_match(/add rake as a dependency/, @ui.error)
+ assert_match(/add rake as a runtime dependency/, @ui.error)
end
end
@@ -2701,15 +2806,48 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
util_setup_validate
Dir.chdir @tempdir do
- @a1.extensions = ['Rakefile']
- @a1.add_runtime_dependency 'rake'
- File.write File.join(@tempdir, 'Rakefile'), ''
+ @a1.extensions = ["Rakefile"]
+ @a1.add_runtime_dependency "rake"
+ File.write File.join(@tempdir, "Rakefile"), ""
use_ui @ui do
@a1.validate
end
- refute_match(/add rake as a dependency/, @ui.error)
+ refute_match(/add rake as a runtime dependency/, @ui.error)
+ end
+ end
+
+ def test_validate_rust_extension_have_missing_cargo_toml_error
+ util_setup_validate
+
+ Dir.chdir @tempdir do
+ @a1.extensions = ["Cargo.toml"]
+ File.write File.join(@tempdir, "Cargo.toml"), ""
+
+ e = assert_raise Gem::InvalidSpecificationException do
+ use_ui @ui do
+ @a1.validate
+ end
+ end
+
+ assert_match(/but Cargo.lock is not part of the gem files/, e.message)
+ end
+ end
+
+ def test_validate_rust_extension_have_no_missing_cargo_toml_error
+ util_setup_validate
+
+ Dir.chdir @tempdir do
+ @a1.extensions = ["Cargo.toml"]
+ @a1.files << "Cargo.toml"
+ @a1.files << "Cargo.lock"
+ File.write File.join(@tempdir, "Cargo.toml"), ""
+ File.write File.join(@tempdir, "Cargo.lock"), ""
+
+ use_ui @ui do
+ @a1.validate
+ end
end
end
@@ -2717,7 +2855,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
util_setup_validate
Dir.chdir @tempdir do
- @a1.description = ''
+ @a1.description = ""
use_ui @ui do
@a1.validate
@@ -2807,7 +2945,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
Gem::Specification.new.validate
end
- assert_equal 'missing value for attribute name', e.message
+ assert_equal "missing value for attribute name", e.message
end
def test_validate_error
@@ -2817,15 +2955,15 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
end
end
- assert_match 'See https://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
util_setup_validate
- FileUtils.mkdir_p File.join(@tempdir, 'bin')
- File.write File.join(@tempdir, 'bin', 'exec'), ''
- FileUtils.mkdir_p File.join(@tempdir, 'exec')
+ FileUtils.mkdir_p File.join(@tempdir, "bin")
+ File.write File.join(@tempdir, "bin", "exec"), ""
+ FileUtils.mkdir_p File.join(@tempdir, "exec")
use_ui @ui do
Dir.chdir @tempdir do
@@ -2835,13 +2973,13 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
assert_equal %w[exec], @a1.executables
- assert_equal '', @ui.output, 'output'
- assert_match "#{w}: bin/exec is missing #! line\n", @ui.error, 'error'
+ assert_equal "", @ui.output, "output"
+ assert_match "#{w}: bin/exec is missing #! line\n", @ui.error, "error"
end
def test_validate_empty_require_paths
- if win_platform?
- pend 'test_validate_empty_require_paths skipped on MS Windows (symlink)'
+ if Gem.win_platform?
+ pend "test_validate_empty_require_paths skipped on MS Windows (symlink)"
else
util_setup_validate
@@ -2850,26 +2988,26 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
@a1.validate
end
- assert_equal 'specification must have at least one require_path',
+ assert_equal "specification must have at least one require_path",
e.message
end
end
def test_validate_files
- pend 'test_validate_files skipped on MS Windows (symlink)' if win_platform?
+ pend "test_validate_files skipped on MS Windows (symlink)" if Gem.win_platform?
util_setup_validate
- @a1.files += ['lib', 'lib2']
- @a1.extensions << 'ext/a/extconf.rb'
+ @a1.files += ["lib", "lib2"]
+ @a1.extensions << "ext/a/extconf.rb"
Dir.chdir @tempdir do
- FileUtils.ln_s 'lib/code.rb', 'lib2' unless vc_windows?
+ FileUtils.ln_s "lib/code.rb", "lib2" unless vc_windows?
use_ui @ui do
@a1.validate
end
- assert_match 'WARNING: lib2 is a symlink, which is not supported on all platforms', @ui.error
+ assert_match "WARNING: lib2 is a symlink, which is not supported on all platforms", @ui.error
end
assert_equal %w[bin/exec ext/a/extconf.rb lib/code.rb lib2 test/suite.rb].sort,
@@ -2885,7 +3023,7 @@ duplicate dependency on c (>= 1.2.3, development), (~> 1.2) use:
{ b: Gem::Dependency.new("x","1") }
end
- specification.define_singleton_method(:find_all_by_name) do |dep_name|
+ specification.define_singleton_method(:find_all_by_name) do |_dep_name|
[]
end
@@ -2912,7 +3050,7 @@ Please report a bug if this causes problems.
{ b: Gem::Dependency.new("x","1") }
end
- specification.define_singleton_method(:find_all_by_name) do |dep_name|
+ specification.define_singleton_method(:find_all_by_name) do |_dep_name|
[
specification.new {|s| s.name = "z", s.version = Gem::Version.new("1") },
specification.new {|s| s.name = "z", s.version = Gem::Version.new("2") },
@@ -2947,7 +3085,7 @@ Please report a bug if this causes problems.
def set_orig(cls)
s_cls = cls.singleton_class
- s_cls.send :alias_method, :orig_unresolved_deps , :unresolved_deps
+ s_cls.send :alias_method, :orig_unresolved_deps, :unresolved_deps
s_cls.send :alias_method, :orig_find_all_by_name, :find_all_by_name
end
@@ -2975,19 +3113,19 @@ Please report a bug if this causes problems.
@a1.validate
end
- assert_match "#{w}: no homepage specified\n", @ui.error, 'error'
+ assert_match "#{w}: no homepage specified\n", @ui.error, "error"
@ui = Gem::MockGemUi.new
- @a1.homepage = ''
+ @a1.homepage = ""
use_ui @ui do
@a1.validate
end
- assert_match "#{w}: no homepage specified\n", @ui.error, 'error'
+ assert_match "#{w}: no homepage specified\n", @ui.error, "error"
- @a1.homepage = 'over at my cool site'
+ @a1.homepage = "over at my cool site"
e = assert_raise Gem::InvalidSpecificationException do
@a1.validate
@@ -2995,7 +3133,7 @@ Please report a bug if this causes problems.
assert_equal '"over at my cool site" is not a valid HTTP URI', e.message
- @a1.homepage = 'ftp://rubygems.org'
+ @a1.homepage = "ftp://rubygems.org"
e = assert_raise Gem::InvalidSpecificationException do
@a1.validate
@@ -3003,12 +3141,11 @@ Please report a bug if this causes problems.
assert_equal '"ftp://rubygems.org" is not a valid HTTP URI', e.message
- @a1.homepage = 'https://rubygems.org/'
+ @a1.homepage = "https://rubygems.org/"
assert_equal true, @a1.validate
- @a1.homepage = 'https://rubygems.org'
+ @a1.homepage = "https://rubygems.org"
assert_equal true, @a1.validate
-
end
end
@@ -3021,11 +3158,23 @@ Please report a bug if this causes problems.
end
assert_match <<-WARNING, @ui.error
-WARNING: licenses is empty, but is recommended. Use a license identifier from
-http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
+WARNING: licenses is empty, but is recommended. Use an license identifier from
+https://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
+or set it to nil if you don't want to specify a license.
WARNING
end
+ def test_validate_nil_license
+ util_setup_validate
+
+ use_ui @ui do
+ @a1.license = nil
+ @a1.validate
+ end
+
+ assert_empty @ui.error
+ end
+
def test_validate_license_in_a_non_packaging_context
util_setup_validate
@@ -3045,7 +3194,7 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
util_setup_validate
use_ui @ui do
- @a1.rubyforge_project = 'invalid-attribute'
+ @a1.rubyforge_project = "invalid-attribute"
@a1.validate
end
@@ -3056,13 +3205,14 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
util_setup_validate
use_ui @ui do
- @a1.licenses = ['BSD']
+ @a1.licenses = ["BSD"]
@a1.validate
end
assert_match <<-WARNING, @ui.error
-WARNING: license value 'BSD' is invalid. Use a license identifier from
-http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
+WARNING: License identifier 'BSD' is invalid. Use an identifier from
+https://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
+or set it to nil if you don't want to specify a license.
WARNING
end
@@ -3070,29 +3220,33 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
util_setup_validate
use_ui @ui do
- @a1.licenses = ['LicenseRef-LICENSE.md']
+ @a1.licenses = ["LicenseRef-LICENSE.md"]
@a1.validate
end
assert_empty @ui.error
end
- def test_validate_license_values_plus
+ def test_validate_deprecated_license_values_plus
util_setup_validate
use_ui @ui do
- @a1.licenses = ['GPL-2.0+']
+ @a1.licenses = ["GPL-2.0+"]
@a1.validate
end
- assert_empty @ui.error
+ assert_match <<-WARNING, @ui.error
+WARNING: License identifier 'GPL-2.0+' is deprecated. Use an identifier from
+https://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
+or set it to nil if you don't want to specify a license.
+ WARNING
end
def test_validate_license_values_or_later
util_setup_validate
use_ui @ui do
- @a1.licenses = ['GPL-2.0-or-later']
+ @a1.licenses = ["GPL-2.0-or-later"]
@a1.validate
end
@@ -3103,7 +3257,7 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
util_setup_validate
use_ui @ui do
- @a1.licenses = ['GPL-2.0+ WITH Autoconf-exception-2.0']
+ @a1.licenses = ["GPL-2.0-or-later WITH Autoconf-exception-2.0"]
@a1.validate
end
@@ -3114,17 +3268,19 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
util_setup_validate
use_ui @ui do
- @a1.licenses = ['GPL-2.0+ FOO', 'GPL-2.0 FOO']
+ @a1.licenses = ["GPL-2.0+ FOO", "GPL-2.0 FOO"]
@a1.validate
end
assert_match <<-WARNING, @ui.error
-WARNING: license value 'GPL-2.0+ FOO' is invalid. Use a license identifier from
-http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
+WARNING: License identifier 'GPL-2.0+ FOO' is invalid. Use an identifier from
+https://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
+or set it to nil if you don't want to specify a license.
WARNING
assert_match <<-WARNING, @ui.error
-WARNING: license value 'GPL-2.0 FOO' is invalid. Use a license identifier from
-http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
+WARNING: License identifier 'GPL-2.0+ FOO' is invalid. Use an identifier from
+https://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
+or set it to nil if you don't want to specify a license.
WARNING
end
@@ -3132,13 +3288,29 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
util_setup_validate
use_ui @ui do
- @a1.licenses = ['GPL-2.0+ WITH Autocofn-exception-2.0']
+ @a1.licenses = ["GPL-2.0-only WITH Autocofn-exception-2.0"]
+ @a1.validate
+ end
+
+ assert_match <<-WARNING, @ui.error
+WARNING: License identifier 'GPL-2.0-only WITH Autocofn-exception-2.0' is invalid. Use an identifier from
+https://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
+or set it to nil if you don't want to specify a license.
+ WARNING
+ end
+
+ def test_validate_license_with_deprecated_exception
+ util_setup_validate
+
+ use_ui @ui do
+ @a1.licenses = ["GPL-2.0-only WITH Nokia-Qt-exception-1.1"]
@a1.validate
end
assert_match <<-WARNING, @ui.error
-WARNING: license value 'GPL-2.0+ WITH Autocofn-exception-2.0' is invalid. Use a license identifier from
-http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
+WARNING: Exception identifier at 'GPL-2.0-only WITH Nokia-Qt-exception-1.1' is deprecated. Use an identifier from
+https://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
+or set it to nil if you don't want to specify a license.
WARNING
end
@@ -3146,13 +3318,14 @@ http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
util_setup_validate
use_ui @ui do
- @a1.licenses = ['ruby']
+ @a1.licenses = ["ruby"]
@a1.validate
end
assert_match <<-WARNING, @ui.error
-WARNING: license value 'ruby' is invalid. Use a license identifier from
-http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.
+WARNING: License identifier 'ruby' is invalid. Use an identifier from
+https://spdx.org/licenses or 'Nonstandard' for a nonstandard license,
+or set it to nil if you don't want to specify a license.
Did you mean 'Ruby'?
WARNING
end
@@ -3250,19 +3423,19 @@ Did you mean 'Ruby'?
spec.validate
end
- assert_match %r{^#{name}}, e.message
+ assert_match(/^#{name}/, e.message)
end
end
end
def test_validate_permissions
- pend 'chmod not supported' if Gem.win_platform?
+ pend "chmod not supported" if Gem.win_platform?
util_setup_validate
Dir.chdir @tempdir do
- File.chmod 0640, File.join('lib', 'code.rb')
- File.chmod 0640, File.join('bin', 'exec')
+ File.chmod 0o640, File.join("lib", "code.rb")
+ File.chmod 0o640, File.join("bin", "exec")
use_ui @ui do
@a1.validate
@@ -3275,12 +3448,12 @@ Did you mean 'Ruby'?
end
def test_validate_permissions_of_missing_file_non_packaging
- pend 'chmod not supported' if Gem.win_platform?
+ pend "chmod not supported" if Gem.win_platform?
util_setup_validate
Dir.chdir @tempdir do
- File.delete File.join('lib', 'code.rb')
+ File.delete File.join("lib", "code.rb")
use_ui @ui do
assert @a1.validate(false)
@@ -3292,13 +3465,13 @@ Did you mean 'Ruby'?
util_setup_validate
Dir.chdir @tempdir do
- @a1.platform = 'mswin32'
+ @a1.platform = "mswin32"
assert @a1.validate
- @a1.platform = 'i586-linux'
+ @a1.platform = "i586-linux"
assert @a1.validate
- @a1.platform = 'powerpc-darwin'
+ @a1.platform = "powerpc-darwin"
assert @a1.validate
end
end
@@ -3319,7 +3492,7 @@ Did you mean 'Ruby'?
util_setup_validate
Dir.chdir @tempdir do
- @a1.specification_version = '1.0'
+ @a1.specification_version = "1.0"
e = assert_raise Gem::InvalidSpecificationException do
use_ui @ui do
@@ -3327,7 +3500,7 @@ Did you mean 'Ruby'?
end
end
- err = 'specification_version must be an Integer (did you mean version?)'
+ err = "specification_version must be an Integer (did you mean version?)"
assert_equal err, e.message
end
end
@@ -3336,13 +3509,13 @@ Did you mean 'Ruby'?
util_setup_validate
Dir.chdir @tempdir do
- @a1.summary = ''
+ @a1.summary = ""
use_ui @ui do
@a1.validate
end
- assert_match "#{w}: no summary specified\n", @ui.error, 'error'
+ assert_match "#{w}: no summary specified\n", @ui.error, "error"
@a1.summary = "#{f} (describe your package)"
@@ -3370,11 +3543,11 @@ Did you mean 'Ruby'?
@a1.validate
end
- assert_match 'See https://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
- assert_equal Gem::Version.new('1'), @a1.version
+ assert_equal Gem::Version.new("1"), @a1.version
end
def test_version_change_reset_full_name
@@ -3410,7 +3583,7 @@ Did you mean 'Ruby'?
capture_output do
Gem::Specification.load(specfile.path)
end
- rescue => e
+ rescue StandardError => e
name_rexp = Regexp.new(Regexp.escape(specfile.path))
assert e.backtrace.grep(name_rexp).any?
end
@@ -3420,22 +3593,22 @@ Did you mean 'Ruby'?
def test_latest_specs
spec_fetcher do |fetcher|
- fetcher.spec 'a', 1 do |s|
- s.platform = Gem::Platform.new 'x86-my_platform1'
+ fetcher.spec "a", 1 do |s|
+ s.platform = Gem::Platform.new "x86-my_platform1"
end
- fetcher.spec 'a', 2
+ fetcher.spec "a", 2
- fetcher.spec 'a', 2 do |s|
- s.platform = Gem::Platform.new 'x86-my_platform1'
+ fetcher.spec "a", 2 do |s|
+ s.platform = Gem::Platform.new "x86-my_platform1"
end
- fetcher.spec 'a', 2 do |s|
- s.platform = Gem::Platform.new 'x86-other_platform1'
+ fetcher.spec "a", 2 do |s|
+ s.platform = Gem::Platform.new "x86-other_platform1"
end
- fetcher.spec 'a', 3 do |s|
- s.platform = Gem::Platform.new 'x86-other_platform1'
+ fetcher.spec "a", 3 do |s|
+ s.platform = Gem::Platform.new "x86-other_platform1"
end
end
@@ -3452,13 +3625,13 @@ Did you mean 'Ruby'?
util_setup_validate
Dir.chdir @tempdir do
- @m1 = quick_gem 'm', '1' do |s|
+ @m1 = quick_gem "m", "1" do |s|
s.files = %w[lib/code.rb]
s.metadata = {
- "one" => "two",
- "home" => "three",
+ "one" => "two",
+ "home" => "three",
"homepage_uri" => "https://example.com/user/repo",
- "funding_uri" => "https://example.com/donate",
+ "funding_uri" => "https://example.com/donate",
}
end
@@ -3472,7 +3645,7 @@ Did you mean 'Ruby'?
util_setup_validate
Dir.chdir @tempdir do
- @m2 = quick_gem 'm', '2' do |s|
+ @m2 = quick_gem "m", "2" do |s|
s.files = %w[lib/code.rb]
s.metadata = { 1 => "fail" }
end
@@ -3489,7 +3662,7 @@ Did you mean 'Ruby'?
util_setup_validate
Dir.chdir @tempdir do
- @m2 = quick_gem 'm', '2' do |s|
+ @m2 = quick_gem "m", "2" do |s|
s.files = %w[lib/code.rb]
s.metadata = { ("x" * 129) => "fail" }
end
@@ -3506,9 +3679,9 @@ Did you mean 'Ruby'?
util_setup_validate
Dir.chdir @tempdir do
- @m2 = quick_gem 'm', '2' do |s|
+ @m2 = quick_gem "m", "2" do |s|
s.files = %w[lib/code.rb]
- s.metadata = { 'fail' => [] }
+ s.metadata = { "fail" => [] }
end
e = assert_raise Gem::InvalidSpecificationException do
@@ -3523,9 +3696,9 @@ Did you mean 'Ruby'?
util_setup_validate
Dir.chdir @tempdir do
- @m2 = quick_gem 'm', '2' do |s|
+ @m2 = quick_gem "m", "2" do |s|
s.files = %w[lib/code.rb]
- s.metadata = { 'fail' => ("x" * 1025) }
+ s.metadata = { "fail" => ("x" * 1025) }
end
e = assert_raise Gem::InvalidSpecificationException do
@@ -3540,9 +3713,9 @@ Did you mean 'Ruby'?
util_setup_validate
Dir.chdir @tempdir do
- @m2 = quick_gem 'm', '2' do |s|
+ @m2 = quick_gem "m", "2" do |s|
s.files = %w[lib/code.rb]
- s.metadata = { 'homepage_uri' => 'http:/example.com' }
+ s.metadata = { "homepage_uri" => "http:/example.com" }
end
e = assert_raise Gem::InvalidSpecificationException do
@@ -3553,10 +3726,43 @@ Did you mean 'Ruby'?
end
end
+ def test_metadata_link_validation_warns_for_duplicates
+ util_setup_validate
+
+ Dir.chdir @tempdir do
+ @m2 = quick_gem "m", "2" do |s|
+ s.required_ruby_version = ">= 2.3.0"
+ s.files = %w[lib/code.rb]
+ s.licenses = "BSD-2-Clause"
+ s.metadata = {
+ "source_code_uri" => "http://example.com",
+ "homepage_uri" => "http://example.com",
+ "changelog_uri" => "http://example.com/changelog",
+ }
+ end
+
+ use_ui @ui do
+ @m2.validate
+ end
+
+ expected = <<~EXPECTED
+ #{w}: You have specified the uri:
+ http://example.com
+ for all of the following keys:
+ homepage_uri
+ source_code_uri
+ Only the first one will be shown on rubygems.org
+ #{w}: See https://guides.rubygems.org/specification-reference/ for help
+ EXPECTED
+
+ assert_equal expected, @ui.error, "warning"
+ end
+ end
+
def test_metadata_specs
- @m1 = quick_gem 'm', '1' do |s|
+ @m1 = quick_gem "m", "1" do |s|
s.files = %w[lib/code.rb]
- s.metadata = { 'one' => "two", 'two' => "three" }
+ s.metadata = { "one" => "two", "two" => "three" }
end
valid_ruby_spec = <<-EOF
@@ -3565,7 +3771,7 @@ Did you mean 'Ruby'?
Gem::Specification.new do |s|
s.name = "m".freeze
- s.version = "1"
+ s.version = "1".freeze
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
s.metadata = { "one" => "two", "two" => "three" } if s.respond_to? :metadata=
@@ -3593,7 +3799,7 @@ end
extconf_rb = File.join @ext.gem_dir, @ext.extensions.first
FileUtils.mkdir_p File.dirname extconf_rb
- File.open extconf_rb, 'w' do |f|
+ File.open extconf_rb, "w" do |f|
f.write <<-'RUBY'
File.open 'Makefile', 'w' do |f|
f.puts "clean:\n\techo clean"
@@ -3609,8 +3815,8 @@ end
end
def test_missing_extensions_eh_default_gem
- spec = new_default_spec 'default', 1
- spec.extensions << 'extconf.rb'
+ spec = new_default_spec "default", 1
+ spec.extensions << "extconf.rb"
refute spec.missing_extensions?
end
@@ -3620,7 +3826,7 @@ end
end
def test_find_all_by_full_name
- pl = Gem::Platform.new 'i386-linux'
+ pl = Gem::Platform.new "i386-linux"
a1 = util_spec "a", "1"
a1_pre = util_spec "a", "1.0.0.pre.1"
@@ -3664,6 +3870,13 @@ end
assert Gem::Specification.find_by_name "q"
end
+ def test_find_by_name_with_only_prereleases_with_requirements
+ q = util_spec "q", "2.a"
+ install_specs q
+
+ assert Gem::Specification.find_by_name "q", ">= 1"
+ end
+
def test_find_by_name_prerelease
b = util_spec "b", "2.a"
@@ -3671,6 +3884,8 @@ end
install_specs b
+ Gem::Specification.reset
+
assert Gem::Specification.find_by_name "b"
assert_raise Gem::MissingSpecVersionError do
@@ -3680,14 +3895,31 @@ end
assert Gem::Specification.find_by_name "b", ">1"
end
+ def test_find_by_full_name
+ pl = Gem::Platform.new "x86_64-linux"
+
+ a = util_spec "a", "1"
+ install_specs a
+
+ a_pl = util_spec("a", "1") {|s| s.platform = pl }
+ install_specs a_pl
+
+ assert_equal a, Gem::Specification.find_by_full_name("a-1")
+ assert_equal a_pl, Gem::Specification.find_by_full_name("a-1-x86_64-linux")
+
+ assert_nil Gem::Specification.find_by_full_name("a-2")
+ assert_nil Gem::Specification.find_by_full_name("b-1")
+ assert_nil Gem::Specification.find_by_full_name("a-1-arm64-linux")
+ end
+
def test_find_by_path
a = util_spec "foo", "1", nil, "lib/foo.rb"
install_specs a
- assert_equal a, Gem::Specification.find_by_path('foo')
+ assert_equal a, Gem::Specification.find_by_path("foo")
a.activate
- assert_equal a, Gem::Specification.find_by_path('foo')
+ assert_equal a, Gem::Specification.find_by_path("foo")
end
def test_find_inactive_by_path
@@ -3695,9 +3927,9 @@ end
install_specs a
- assert_equal a, Gem::Specification.find_inactive_by_path('foo')
+ assert_equal a, Gem::Specification.find_inactive_by_path("foo")
a.activate
- assert_nil Gem::Specification.find_inactive_by_path('foo')
+ assert_nil Gem::Specification.find_inactive_by_path("foo")
end
def test_load_default_gem
@@ -3737,7 +3969,7 @@ end
FileUtils.touch File.join("lib", "code.rb")
FileUtils.touch File.join("test", "suite.rb")
- File.open "bin/exec", "w", 0755 do |fp|
+ File.open "bin/exec", "w", 0o755 do |fp|
fp.puts "#!#{Gem.ruby}"
end
ensure
@@ -3745,11 +3977,4 @@ end
end
end
end
-
- def silence_warnings
- old_verbose, $VERBOSE = $VERBOSE, false
- yield
- ensure
- $VERBOSE = old_verbose
- end
end