diff options
Diffstat (limited to 'test/rubygems/test_gem_platform.rb')
-rw-r--r-- | test/rubygems/test_gem_platform.rb | 567 |
1 files changed, 347 insertions, 220 deletions
diff --git a/test/rubygems/test_gem_platform.rb b/test/rubygems/test_gem_platform.rb index 8029035db1..00e48498c6 100644 --- a/test/rubygems/test_gem_platform.rb +++ b/test/rubygems/test_gem_platform.rb @@ -1,47 +1,48 @@ # frozen_string_literal: true -require_relative 'helper' -require 'rubygems/platform' -require 'rbconfig' + +require_relative "helper" +require "rubygems/platform" +require "rbconfig" class TestGemPlatform < Gem::TestCase def test_self_local - util_set_arch 'i686-darwin8.10.1' + util_set_arch "i686-darwin8.10.1" assert_equal Gem::Platform.new(%w[x86 darwin 8]), Gem::Platform.local end def test_self_match Gem::Deprecate.skip_during do - assert Gem::Platform.match(nil), 'nil == ruby' - assert Gem::Platform.match(Gem::Platform.local), 'exact match' - assert Gem::Platform.match(Gem::Platform.local.to_s), '=~ match' - assert Gem::Platform.match(Gem::Platform::RUBY), 'ruby' + assert Gem::Platform.match(nil), "nil == ruby" + assert Gem::Platform.match(Gem::Platform.local), "exact match" + assert Gem::Platform.match(Gem::Platform.local.to_s), "=~ match" + assert Gem::Platform.match(Gem::Platform::RUBY), "ruby" end end def test_self_match_gem? - assert Gem::Platform.match_gem?(nil, 'json'), 'nil == ruby' - assert Gem::Platform.match_gem?(Gem::Platform.local, 'json'), 'exact match' - assert Gem::Platform.match_gem?(Gem::Platform.local.to_s, 'json'), '=~ match' - assert Gem::Platform.match_gem?(Gem::Platform::RUBY, 'json'), 'ruby' + assert Gem::Platform.match_gem?(nil, "json"), "nil == ruby" + assert Gem::Platform.match_gem?(Gem::Platform.local, "json"), "exact match" + assert Gem::Platform.match_gem?(Gem::Platform.local.to_s, "json"), "=~ match" + assert Gem::Platform.match_gem?(Gem::Platform::RUBY, "json"), "ruby" end def test_self_match_spec? - make_spec = -> platform do - util_spec 'mygem-for-platform-match_spec', '1' do |s| + make_spec = ->(platform) do + util_spec "mygem-for-platform-match_spec", "1" do |s| s.platform = platform end end - assert Gem::Platform.match_spec?(make_spec.call(nil)), 'nil == ruby' - assert Gem::Platform.match_spec?(make_spec.call(Gem::Platform.local)), 'exact match' - assert Gem::Platform.match_spec?(make_spec.call(Gem::Platform.local.to_s)), '=~ match' - assert Gem::Platform.match_spec?(make_spec.call(Gem::Platform::RUBY)), 'ruby' + assert Gem::Platform.match_spec?(make_spec.call(nil)), "nil == ruby" + assert Gem::Platform.match_spec?(make_spec.call(Gem::Platform.local)), "exact match" + assert Gem::Platform.match_spec?(make_spec.call(Gem::Platform.local.to_s)), "=~ match" + assert Gem::Platform.match_spec?(make_spec.call(Gem::Platform::RUBY)), "ruby" end def test_self_match_spec_with_match_gem_override - make_spec = -> name, platform do - util_spec name, '1' do |s| + make_spec = ->(name, platform) do + util_spec name, "1" do |s| s.platform = platform end end @@ -50,7 +51,7 @@ class TestGemPlatform < Gem::TestCase alias_method :original_match_gem?, :match_gem? def match_gem?(platform, gem_name) # e.g., sassc and libv8 are such gems, their native extensions do not use the Ruby C API - if gem_name == 'gem-with-ruby-impl-independent-precompiled-ext' + if gem_name == "gem-with-ruby-impl-independent-precompiled-ext" match_platforms?(platform, [Gem::Platform::RUBY, Gem::Platform.local]) else match_platforms?(platform, Gem.platforms) @@ -61,16 +62,16 @@ class TestGemPlatform < Gem::TestCase platforms = Gem.platforms Gem.platforms = [Gem::Platform::RUBY] begin - assert_equal true, Gem::Platform.match_spec?(make_spec.call('mygem', Gem::Platform::RUBY)) - assert_equal false, Gem::Platform.match_spec?(make_spec.call('mygem', Gem::Platform.local)) + assert_equal true, Gem::Platform.match_spec?(make_spec.call("mygem", Gem::Platform::RUBY)) + assert_equal false, Gem::Platform.match_spec?(make_spec.call("mygem", Gem::Platform.local)) - name = 'gem-with-ruby-impl-independent-precompiled-ext' + name = "gem-with-ruby-impl-independent-precompiled-ext" assert_equal true, Gem::Platform.match_spec?(make_spec.call(name, Gem::Platform.local)) ensure Gem.platforms = platforms class << Gem::Platform remove_method :match_gem? - alias_method :match_gem?, :original_match_gem? # rubocop:disable Lint/DuplicateMethods + alias_method :match_gem?, :original_match_gem? remove_method :original_match_gem? end end @@ -80,135 +81,144 @@ class TestGemPlatform < Gem::TestCase assert_equal Gem::Platform.local, Gem::Platform.new(Gem::Platform::CURRENT) assert_equal Gem::Platform::RUBY, Gem::Platform.new(Gem::Platform::RUBY) assert_equal Gem::Platform::RUBY, Gem::Platform.new(nil) - assert_equal Gem::Platform::RUBY, Gem::Platform.new('') + assert_equal Gem::Platform::RUBY, Gem::Platform.new("") end def test_initialize test_cases = { - 'amd64-freebsd6' => ['amd64', 'freebsd', '6'], - 'hppa2.0w-hpux11.31' => ['hppa2.0w', 'hpux', '11'], - 'java' => [nil, 'java', nil], - 'jruby' => [nil, 'java', nil], - 'universal-dotnet' => ['universal', 'dotnet', nil], - 'universal-dotnet2.0' => ['universal', 'dotnet', '2.0'], - 'universal-dotnet4.0' => ['universal', 'dotnet', '4.0'], - 'powerpc-aix5.3.0.0' => ['powerpc', 'aix', '5'], - 'powerpc-darwin7' => ['powerpc', 'darwin', '7'], - 'powerpc-darwin8' => ['powerpc', 'darwin', '8'], - 'powerpc-linux' => ['powerpc', 'linux', nil], - 'powerpc64-linux' => ['powerpc64', 'linux', nil], - 'sparc-solaris2.10' => ['sparc', 'solaris', '2.10'], - 'sparc-solaris2.8' => ['sparc', 'solaris', '2.8'], - 'sparc-solaris2.9' => ['sparc', 'solaris', '2.9'], - 'universal-darwin8' => ['universal', 'darwin', '8'], - 'universal-darwin9' => ['universal', 'darwin', '9'], - 'universal-macruby' => ['universal', 'macruby', nil], - 'i386-cygwin' => ['x86', 'cygwin', nil], - 'i686-darwin' => ['x86', 'darwin', nil], - 'i686-darwin8.4.1' => ['x86', 'darwin', '8'], - 'i386-freebsd4.11' => ['x86', 'freebsd', '4'], - 'i386-freebsd5' => ['x86', 'freebsd', '5'], - 'i386-freebsd6' => ['x86', 'freebsd', '6'], - 'i386-freebsd7' => ['x86', 'freebsd', '7'], - 'i386-freebsd' => ['x86', 'freebsd', nil], - 'universal-freebsd' => ['universal', 'freebsd', nil], - 'i386-java1.5' => ['x86', 'java', '1.5'], - 'x86-java1.6' => ['x86', 'java', '1.6'], - 'i386-java1.6' => ['x86', 'java', '1.6'], - 'i686-linux' => ['x86', 'linux', nil], - 'i586-linux' => ['x86', 'linux', nil], - 'i486-linux' => ['x86', 'linux', nil], - 'i386-linux' => ['x86', 'linux', nil], - 'i586-linux-gnu' => ['x86', 'linux', nil], - 'i386-linux-gnu' => ['x86', 'linux', nil], - 'i386-mingw32' => ['x86', 'mingw32', nil], - 'x64-mingw-ucrt' => ['x64', 'mingw', 'ucrt'], - 'i386-mswin32' => ['x86', 'mswin32', nil], - 'i386-mswin32_80' => ['x86', 'mswin32', '80'], - 'i386-mswin32-80' => ['x86', 'mswin32', '80'], - 'x86-mswin32' => ['x86', 'mswin32', nil], - 'x86-mswin32_60' => ['x86', 'mswin32', '60'], - 'x86-mswin32-60' => ['x86', 'mswin32', '60'], - 'i386-netbsdelf' => ['x86', 'netbsdelf', nil], - 'i386-openbsd4.0' => ['x86', 'openbsd', '4.0'], - 'i386-solaris2.10' => ['x86', 'solaris', '2.10'], - 'i386-solaris2.8' => ['x86', 'solaris', '2.8'], - 'mswin32' => ['x86', 'mswin32', nil], - 'x86_64-linux' => ['x86_64', 'linux', nil], - 'x86_64-linux-musl' => ['x86_64', 'linux', 'musl'], - 'x86_64-openbsd3.9' => ['x86_64', 'openbsd', '3.9'], - 'x86_64-openbsd4.0' => ['x86_64', 'openbsd', '4.0'], - 'x86_64-openbsd' => ['x86_64', 'openbsd', nil], + "amd64-freebsd6" => ["amd64", "freebsd", "6"], + "java" => [nil, "java", nil], + "jruby" => [nil, "java", nil], + "universal-dotnet" => ["universal", "dotnet", nil], + "universal-dotnet2.0" => ["universal", "dotnet", "2.0"], + "universal-dotnet4.0" => ["universal", "dotnet", "4.0"], + "powerpc-aix5.3.0.0" => ["powerpc", "aix", "5"], + "powerpc-darwin7" => ["powerpc", "darwin", "7"], + "powerpc-darwin8" => ["powerpc", "darwin", "8"], + "powerpc-linux" => ["powerpc", "linux", nil], + "powerpc64-linux" => ["powerpc64", "linux", nil], + "sparc-solaris2.10" => ["sparc", "solaris", "2.10"], + "sparc-solaris2.8" => ["sparc", "solaris", "2.8"], + "sparc-solaris2.9" => ["sparc", "solaris", "2.9"], + "universal-darwin8" => ["universal", "darwin", "8"], + "universal-darwin9" => ["universal", "darwin", "9"], + "universal-macruby" => ["universal", "macruby", nil], + "i386-cygwin" => ["x86", "cygwin", nil], + "i686-darwin" => ["x86", "darwin", nil], + "i686-darwin8.4.1" => ["x86", "darwin", "8"], + "i386-freebsd4.11" => ["x86", "freebsd", "4"], + "i386-freebsd5" => ["x86", "freebsd", "5"], + "i386-freebsd6" => ["x86", "freebsd", "6"], + "i386-freebsd7" => ["x86", "freebsd", "7"], + "i386-freebsd" => ["x86", "freebsd", nil], + "universal-freebsd" => ["universal", "freebsd", nil], + "i386-java1.5" => ["x86", "java", "1.5"], + "x86-java1.6" => ["x86", "java", "1.6"], + "i386-java1.6" => ["x86", "java", "1.6"], + "i686-linux" => ["x86", "linux", nil], + "i586-linux" => ["x86", "linux", nil], + "i486-linux" => ["x86", "linux", nil], + "i386-linux" => ["x86", "linux", nil], + "i586-linux-gnu" => ["x86", "linux", "gnu"], + "i386-linux-gnu" => ["x86", "linux", "gnu"], + "i386-mingw32" => ["x86", "mingw32", nil], + "x64-mingw-ucrt" => ["x64", "mingw", "ucrt"], + "i386-mswin32" => ["x86", "mswin32", nil], + "i386-mswin32_80" => ["x86", "mswin32", "80"], + "i386-mswin32-80" => ["x86", "mswin32", "80"], + "x86-mswin32" => ["x86", "mswin32", nil], + "x86-mswin32_60" => ["x86", "mswin32", "60"], + "x86-mswin32-60" => ["x86", "mswin32", "60"], + "i386-netbsdelf" => ["x86", "netbsdelf", nil], + "i386-openbsd4.0" => ["x86", "openbsd", "4.0"], + "i386-solaris2.10" => ["x86", "solaris", "2.10"], + "i386-solaris2.8" => ["x86", "solaris", "2.8"], + "mswin32" => ["x86", "mswin32", nil], + "x86_64-linux" => ["x86_64", "linux", nil], + "x86_64-linux-gnu" => ["x86_64", "linux", "gnu"], + "x86_64-linux-musl" => ["x86_64", "linux", "musl"], + "x86_64-linux-uclibc" => ["x86_64", "linux", "uclibc"], + "arm-linux-eabi" => ["arm", "linux", "eabi"], + "arm-linux-gnueabi" => ["arm", "linux", "gnueabi"], + "arm-linux-musleabi" => ["arm", "linux", "musleabi"], + "arm-linux-uclibceabi" => ["arm", "linux", "uclibceabi"], + "x86_64-openbsd3.9" => ["x86_64", "openbsd", "3.9"], + "x86_64-openbsd4.0" => ["x86_64", "openbsd", "4.0"], + "x86_64-openbsd" => ["x86_64", "openbsd", nil], + "wasm32-wasi" => ["wasm32", "wasi", nil], + "wasm32-wasip1" => ["wasm32", "wasi", nil], + "wasm32-wasip2" => ["wasm32", "wasi", nil], } test_cases.each do |arch, expected| platform = Gem::Platform.new arch assert_equal expected, platform.to_a, arch.inspect + assert_equal expected, Gem::Platform.new(platform.to_s).to_a, arch.inspect end end def test_initialize_command_line - expected = ['x86', 'mswin32', nil] + expected = ["x86", "mswin32", nil] - platform = Gem::Platform.new 'i386-mswin32' + platform = Gem::Platform.new "i386-mswin32" - assert_equal expected, platform.to_a, 'i386-mswin32' + assert_equal expected, platform.to_a, "i386-mswin32" - expected = ['x86', 'mswin32', '80'] + expected = ["x86", "mswin32", "80"] - platform = Gem::Platform.new 'i386-mswin32-80' + platform = Gem::Platform.new "i386-mswin32-80" - assert_equal expected, platform.to_a, 'i386-mswin32-80' + assert_equal expected, platform.to_a, "i386-mswin32-80" - expected = ['x86', 'solaris', '2.10'] + expected = ["x86", "solaris", "2.10"] - platform = Gem::Platform.new 'i386-solaris-2.10' + platform = Gem::Platform.new "i386-solaris-2.10" - assert_equal expected, platform.to_a, 'i386-solaris-2.10' + assert_equal expected, platform.to_a, "i386-solaris-2.10" end def test_initialize_mswin32_vc6 - orig_RUBY_SO_NAME = RbConfig::CONFIG['RUBY_SO_NAME'] - RbConfig::CONFIG['RUBY_SO_NAME'] = 'msvcrt-ruby18' + orig_ruby_so_name = RbConfig::CONFIG["RUBY_SO_NAME"] + RbConfig::CONFIG["RUBY_SO_NAME"] = "msvcrt-ruby18" - expected = ['x86', 'mswin32', nil] + expected = ["x86", "mswin32", nil] - platform = Gem::Platform.new 'i386-mswin32' + platform = Gem::Platform.new "i386-mswin32" - assert_equal expected, platform.to_a, 'i386-mswin32 VC6' + assert_equal expected, platform.to_a, "i386-mswin32 VC6" ensure - if orig_RUBY_SO_NAME - RbConfig::CONFIG['RUBY_SO_NAME'] = orig_RUBY_SO_NAME + if orig_ruby_so_name + RbConfig::CONFIG["RUBY_SO_NAME"] = orig_ruby_so_name else - RbConfig::CONFIG.delete 'RUBY_SO_NAME' + RbConfig::CONFIG.delete "RUBY_SO_NAME" end end def test_initialize_platform - platform = Gem::Platform.new 'cpu-my_platform1' + platform = Gem::Platform.new "cpu-my_platform1" - assert_equal 'cpu', platform.cpu - assert_equal 'my_platform', platform.os - assert_equal '1', platform.version + assert_equal "cpu", platform.cpu + assert_equal "my_platform", platform.os + assert_equal "1", platform.version end def test_initialize_test - platform = Gem::Platform.new 'cpu-my_platform1' - assert_equal 'cpu', platform.cpu - assert_equal 'my_platform', platform.os - assert_equal '1', platform.version - - platform = Gem::Platform.new 'cpu-other_platform1' - assert_equal 'cpu', platform.cpu - assert_equal 'other_platform', platform.os - assert_equal '1', platform.version + platform = Gem::Platform.new "cpu-my_platform1" + assert_equal "cpu", platform.cpu + assert_equal "my_platform", platform.os + assert_equal "1", platform.version + + platform = Gem::Platform.new "cpu-other_platform1" + assert_equal "cpu", platform.cpu + assert_equal "other_platform", platform.os + assert_equal "1", platform.version end def test_to_s - if win_platform? - assert_equal 'x86-mswin32-60', Gem::Platform.local.to_s + if Gem.win_platform? + assert_equal "x86-mswin32-60", Gem::Platform.local.to_s else - assert_equal 'x86-darwin-8', Gem::Platform.local.to_s + assert_equal "x86-darwin-8", Gem::Platform.local.to_s end end @@ -225,136 +235,244 @@ class TestGemPlatform < Gem::TestCase my = Gem::Platform.new %w[cpu my_platform 1] other = Gem::Platform.new %w[cpu other_platform 1] - assert(my === my) + assert(my === my) # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands refute(other === my) refute(my === other) end def test_equals3_cpu - ppc_darwin8 = Gem::Platform.new 'powerpc-darwin8.0' - uni_darwin8 = Gem::Platform.new 'universal-darwin8.0' - x86_darwin8 = Gem::Platform.new 'i686-darwin8.0' - - util_set_arch 'powerpc-darwin8' - assert((ppc_darwin8 === Gem::Platform.local), 'powerpc =~ universal') - assert((uni_darwin8 === Gem::Platform.local), 'powerpc =~ universal') - refute((x86_darwin8 === Gem::Platform.local), 'powerpc =~ universal') - - util_set_arch 'i686-darwin8' - refute((ppc_darwin8 === Gem::Platform.local), 'powerpc =~ universal') - assert((uni_darwin8 === Gem::Platform.local), 'x86 =~ universal') - assert((x86_darwin8 === Gem::Platform.local), 'powerpc =~ universal') - - util_set_arch 'universal-darwin8' - assert((ppc_darwin8 === Gem::Platform.local), 'universal =~ ppc') - assert((uni_darwin8 === Gem::Platform.local), 'universal =~ universal') - assert((x86_darwin8 === Gem::Platform.local), 'universal =~ x86') + ppc_darwin8 = Gem::Platform.new "powerpc-darwin8.0" + uni_darwin8 = Gem::Platform.new "universal-darwin8.0" + x86_darwin8 = Gem::Platform.new "i686-darwin8.0" + + util_set_arch "powerpc-darwin8" + assert((ppc_darwin8 === Gem::Platform.local), "powerpc =~ universal") + assert((uni_darwin8 === Gem::Platform.local), "powerpc =~ universal") + refute((x86_darwin8 === Gem::Platform.local), "powerpc =~ universal") + + util_set_arch "i686-darwin8" + refute((ppc_darwin8 === Gem::Platform.local), "powerpc =~ universal") + assert((uni_darwin8 === Gem::Platform.local), "x86 =~ universal") + assert((x86_darwin8 === Gem::Platform.local), "powerpc =~ universal") + + util_set_arch "universal-darwin8" + assert((ppc_darwin8 === Gem::Platform.local), "universal =~ ppc") + assert((uni_darwin8 === Gem::Platform.local), "universal =~ universal") + assert((x86_darwin8 === Gem::Platform.local), "universal =~ x86") end def test_nil_cpu_arch_is_treated_as_universal - with_nil_arch = Gem::Platform.new [nil, 'mingw32'] - with_uni_arch = Gem::Platform.new ['universal', 'mingw32'] - with_x86_arch = Gem::Platform.new ['x86', 'mingw32'] - - assert((with_nil_arch === with_uni_arch), 'nil =~ universal') - assert((with_uni_arch === with_nil_arch), 'universal =~ nil') - assert((with_nil_arch === with_x86_arch), 'nil =~ x86') - assert((with_x86_arch === with_nil_arch), 'x86 =~ nil') + with_nil_arch = Gem::Platform.new [nil, "mingw32"] + with_uni_arch = Gem::Platform.new ["universal", "mingw32"] + with_x86_arch = Gem::Platform.new ["x86", "mingw32"] + + assert((with_nil_arch === with_uni_arch), "nil =~ universal") + assert((with_uni_arch === with_nil_arch), "universal =~ nil") + assert((with_nil_arch === with_x86_arch), "nil =~ x86") + assert((with_x86_arch === with_nil_arch), "x86 =~ nil") + end + + def test_nil_version_is_treated_as_any_version + x86_darwin_8 = Gem::Platform.new "i686-darwin8.0" + x86_darwin_nil = Gem::Platform.new "i686-darwin" + + assert((x86_darwin_8 === x86_darwin_nil), "8.0 =~ nil") + assert((x86_darwin_nil === x86_darwin_8), "nil =~ 8.0") + end + + def test_nil_version_is_stricter_for_linux_os + x86_linux = Gem::Platform.new "i686-linux" + x86_linux_gnu = Gem::Platform.new "i686-linux-gnu" + x86_linux_musl = Gem::Platform.new "i686-linux-musl" + x86_linux_uclibc = Gem::Platform.new "i686-linux-uclibc" + + # a naked linux runtime is implicit gnu, as it represents the common glibc-linked runtime + assert(x86_linux === x86_linux_gnu, "linux =~ linux-gnu") + assert(x86_linux_gnu === x86_linux, "linux-gnu =~ linux") + + # musl and explicit gnu should differ + refute(x86_linux_gnu === x86_linux_musl, "linux-gnu =~ linux-musl") + refute(x86_linux_musl === x86_linux_gnu, "linux-musl =~ linux-gnu") + + # explicit libc differ + refute(x86_linux_uclibc === x86_linux_musl, "linux-uclibc =~ linux-musl") + refute(x86_linux_musl === x86_linux_uclibc, "linux-musl =~ linux-uclibc") + + # musl host runtime accepts libc-generic or statically linked gems... + assert(x86_linux === x86_linux_musl, "linux =~ linux-musl") + # ...but implicit gnu runtime generally does not accept musl-specific gems + refute(x86_linux_musl === x86_linux, "linux-musl =~ linux") + + # other libc are not glibc compatible + refute(x86_linux === x86_linux_uclibc, "linux =~ linux-uclibc") + refute(x86_linux_uclibc === x86_linux, "linux-uclibc =~ linux") + end + + def test_eabi_version_is_stricter_for_linux_os + arm_linux_eabi = Gem::Platform.new "arm-linux-eabi" + arm_linux_gnueabi = Gem::Platform.new "arm-linux-gnueabi" + arm_linux_musleabi = Gem::Platform.new "arm-linux-musleabi" + arm_linux_uclibceabi = Gem::Platform.new "arm-linux-uclibceabi" + + # a naked linux runtime is implicit gnu, as it represents the common glibc-linked runtime + assert(arm_linux_eabi === arm_linux_gnueabi, "linux-eabi =~ linux-gnueabi") + assert(arm_linux_gnueabi === arm_linux_eabi, "linux-gnueabi =~ linux-eabi") + + # musl and explicit gnu should differ + refute(arm_linux_gnueabi === arm_linux_musleabi, "linux-gnueabi =~ linux-musleabi") + refute(arm_linux_musleabi === arm_linux_gnueabi, "linux-musleabi =~ linux-gnueabi") + + # explicit libc differ + refute(arm_linux_uclibceabi === arm_linux_musleabi, "linux-uclibceabi =~ linux-musleabi") + refute(arm_linux_musleabi === arm_linux_uclibceabi, "linux-musleabi =~ linux-uclibceabi") + + # musl host runtime accepts libc-generic or statically linked gems... + assert(arm_linux_eabi === arm_linux_musleabi, "linux-eabi =~ linux-musleabi") + # ...but implicit gnu runtime generally does not accept musl-specific gems + refute(arm_linux_musleabi === arm_linux_eabi, "linux-musleabi =~ linux-eabi") + + # other libc are not glibc compatible + refute(arm_linux_eabi === arm_linux_uclibceabi, "linux-eabi =~ linux-uclibceabi") + refute(arm_linux_uclibceabi === arm_linux_eabi, "linux-uclibceabi =~ linux-eabi") + end + + def test_eabi_and_nil_version_combination_strictness + arm_linux = Gem::Platform.new "arm-linux" + arm_linux_eabi = Gem::Platform.new "arm-linux-eabi" + arm_linux_eabihf = Gem::Platform.new "arm-linux-eabihf" + arm_linux_gnueabi = Gem::Platform.new "arm-linux-gnueabi" + arm_linux_gnueabihf = Gem::Platform.new "arm-linux-gnueabihf" + arm_linux_musleabi = Gem::Platform.new "arm-linux-musleabi" + arm_linux_musleabihf = Gem::Platform.new "arm-linux-musleabihf" + arm_linux_uclibceabi = Gem::Platform.new "arm-linux-uclibceabi" + arm_linux_uclibceabihf = Gem::Platform.new "arm-linux-uclibceabihf" + + # generic arm host runtime with eabi modifier accepts generic arm gems + assert(arm_linux === arm_linux_eabi, "arm-linux =~ arm-linux-eabi") + assert(arm_linux === arm_linux_eabihf, "arm-linux =~ arm-linux-eabihf") + + # explicit gnu arm host runtime with eabi modifier accepts generic arm gems + assert(arm_linux === arm_linux_gnueabi, "arm-linux =~ arm-linux-gnueabi") + assert(arm_linux === arm_linux_gnueabihf, "arm-linux =~ arm-linux-gnueabihf") + + # musl arm host runtime accepts libc-generic or statically linked gems... + assert(arm_linux === arm_linux_musleabi, "arm-linux =~ arm-linux-musleabi") + assert(arm_linux === arm_linux_musleabihf, "arm-linux =~ arm-linux-musleabihf") + + # other libc arm hosts are not glibc compatible + refute(arm_linux === arm_linux_uclibceabi, "arm-linux =~ arm-linux-uclibceabi") + refute(arm_linux === arm_linux_uclibceabihf, "arm-linux =~ arm-linux-uclibceabihf") end def test_equals3_cpu_arm - arm = Gem::Platform.new 'arm-linux' - armv5 = Gem::Platform.new 'armv5-linux' - armv7 = Gem::Platform.new 'armv7-linux' - - util_set_arch 'armv5-linux' - assert((arm === Gem::Platform.local), 'arm === armv5') - assert((armv5 === Gem::Platform.local), 'armv5 === armv5') - refute((armv7 === Gem::Platform.local), 'armv7 === armv5') - refute((Gem::Platform.local === arm), 'armv5 === arm') - - util_set_arch 'armv7-linux' - assert((arm === Gem::Platform.local), 'arm === armv7') - refute((armv5 === Gem::Platform.local), 'armv5 === armv7') - assert((armv7 === Gem::Platform.local), 'armv7 === armv7') - refute((Gem::Platform.local === arm), 'armv7 === arm') + arm = Gem::Platform.new "arm-linux" + armv5 = Gem::Platform.new "armv5-linux" + armv7 = Gem::Platform.new "armv7-linux" + + util_set_arch "armv5-linux" + assert((arm === Gem::Platform.local), "arm === armv5") + assert((armv5 === Gem::Platform.local), "armv5 === armv5") + refute((armv7 === Gem::Platform.local), "armv7 === armv5") + refute((Gem::Platform.local === arm), "armv5 === arm") + + util_set_arch "armv7-linux" + assert((arm === Gem::Platform.local), "arm === armv7") + refute((armv5 === Gem::Platform.local), "armv5 === armv7") + assert((armv7 === Gem::Platform.local), "armv7 === armv7") + refute((Gem::Platform.local === arm), "armv7 === arm") + end + + def test_equals3_universal_mingw + uni_mingw = Gem::Platform.new "universal-mingw" + mingw32 = Gem::Platform.new "x64-mingw32" + mingw_ucrt = Gem::Platform.new "x64-mingw-ucrt" + + util_set_arch "x64-mingw32" + assert((uni_mingw === Gem::Platform.local), "uni_mingw === mingw32") + assert((mingw32 === Gem::Platform.local), "mingw32 === mingw32") + refute((mingw_ucrt === Gem::Platform.local), "mingw32 === mingw_ucrt") + + util_set_arch "x64-mingw-ucrt" + assert((uni_mingw === Gem::Platform.local), "uni_mingw === mingw32") + assert((mingw_ucrt === Gem::Platform.local), "mingw_ucrt === mingw_ucrt") + refute((mingw32 === Gem::Platform.local), "mingw32 === mingw_ucrt") end def test_equals3_version - util_set_arch 'i686-darwin8' + util_set_arch "i686-darwin8" - x86_darwin = Gem::Platform.new ['x86', 'darwin', nil] - x86_darwin7 = Gem::Platform.new ['x86', 'darwin', '7'] - x86_darwin8 = Gem::Platform.new ['x86', 'darwin', '8'] - x86_darwin9 = Gem::Platform.new ['x86', 'darwin', '9'] + x86_darwin = Gem::Platform.new ["x86", "darwin", nil] + x86_darwin7 = Gem::Platform.new ["x86", "darwin", "7"] + x86_darwin8 = Gem::Platform.new ["x86", "darwin", "8"] + x86_darwin9 = Gem::Platform.new ["x86", "darwin", "9"] - assert((x86_darwin === Gem::Platform.local), 'x86_darwin === x86_darwin8') - assert((x86_darwin8 === Gem::Platform.local), 'x86_darwin8 === x86_darwin8') + assert((x86_darwin === Gem::Platform.local), "x86_darwin === x86_darwin8") + assert((x86_darwin8 === Gem::Platform.local), "x86_darwin8 === x86_darwin8") - refute((x86_darwin7 === Gem::Platform.local), 'x86_darwin7 === x86_darwin8') - refute((x86_darwin9 === Gem::Platform.local), 'x86_darwin9 === x86_darwin8') + refute((x86_darwin7 === Gem::Platform.local), "x86_darwin7 === x86_darwin8") + refute((x86_darwin9 === Gem::Platform.local), "x86_darwin9 === x86_darwin8") end def test_equals_tilde - util_set_arch 'i386-mswin32' + util_set_arch "i386-mswin32" - assert_local_match 'mswin32' - assert_local_match 'i386-mswin32' + assert_local_match "mswin32" + assert_local_match "i386-mswin32" # oddballs - assert_local_match 'i386-mswin32-mq5.3' - assert_local_match 'i386-mswin32-mq6' - refute_local_match 'win32-1.8.2-VC7' - refute_local_match 'win32-1.8.4-VC6' - refute_local_match 'win32-source' - refute_local_match 'windows' - - util_set_arch 'i686-linux' - assert_local_match 'i486-linux' - assert_local_match 'i586-linux' - assert_local_match 'i686-linux' - - util_set_arch 'i686-darwin8' - assert_local_match 'i686-darwin8.4.1' - assert_local_match 'i686-darwin8.8.2' - - util_set_arch 'java' - assert_local_match 'java' - assert_local_match 'jruby' - - util_set_arch 'universal-dotnet2.0' - assert_local_match 'universal-dotnet' - assert_local_match 'universal-dotnet-2.0' - refute_local_match 'universal-dotnet-4.0' - assert_local_match 'dotnet' - assert_local_match 'dotnet-2.0' - refute_local_match 'dotnet-4.0' - - util_set_arch 'universal-dotnet4.0' - assert_local_match 'universal-dotnet' - refute_local_match 'universal-dotnet-2.0' - assert_local_match 'universal-dotnet-4.0' - assert_local_match 'dotnet' - refute_local_match 'dotnet-2.0' - assert_local_match 'dotnet-4.0' - - util_set_arch 'universal-macruby-1.0' - assert_local_match 'universal-macruby' - assert_local_match 'macruby' - refute_local_match 'universal-macruby-0.10' - assert_local_match 'universal-macruby-1.0' - - util_set_arch 'powerpc-darwin' - assert_local_match 'powerpc-darwin' - - util_set_arch 'powerpc-darwin7' - assert_local_match 'powerpc-darwin7.9.0' - - util_set_arch 'powerpc-darwin8' - assert_local_match 'powerpc-darwin8.10.0' - - util_set_arch 'sparc-solaris2.8' - assert_local_match 'sparc-solaris2.8-mq5.3' + assert_local_match "i386-mswin32-mq5.3" + assert_local_match "i386-mswin32-mq6" + refute_local_match "win32-1.8.2-VC7" + refute_local_match "win32-1.8.4-VC6" + refute_local_match "win32-source" + refute_local_match "windows" + + util_set_arch "i686-linux" + assert_local_match "i486-linux" + assert_local_match "i586-linux" + assert_local_match "i686-linux" + + util_set_arch "i686-darwin8" + assert_local_match "i686-darwin8.4.1" + assert_local_match "i686-darwin8.8.2" + + util_set_arch "java" + assert_local_match "java" + assert_local_match "jruby" + + util_set_arch "universal-dotnet2.0" + assert_local_match "universal-dotnet" + assert_local_match "universal-dotnet-2.0" + refute_local_match "universal-dotnet-4.0" + assert_local_match "dotnet" + assert_local_match "dotnet-2.0" + refute_local_match "dotnet-4.0" + + util_set_arch "universal-dotnet4.0" + assert_local_match "universal-dotnet" + refute_local_match "universal-dotnet-2.0" + assert_local_match "universal-dotnet-4.0" + assert_local_match "dotnet" + refute_local_match "dotnet-2.0" + assert_local_match "dotnet-4.0" + + util_set_arch "universal-macruby-1.0" + assert_local_match "universal-macruby" + assert_local_match "macruby" + refute_local_match "universal-macruby-0.10" + assert_local_match "universal-macruby-1.0" + + util_set_arch "powerpc-darwin" + assert_local_match "powerpc-darwin" + + util_set_arch "powerpc-darwin7" + assert_local_match "powerpc-darwin7.9.0" + + util_set_arch "powerpc-darwin8" + assert_local_match "powerpc-darwin8.10.0" + + util_set_arch "sparc-solaris2.8" + assert_local_match "sparc-solaris2.8-mq5.3" end def test_inspect @@ -365,6 +483,15 @@ class TestGemPlatform < Gem::TestCase assert_equal 1, result.scan(/@version=/).size end + def test_gem_platform_match_with_string_argument + util_set_arch "x86_64-linux-musl" + + Gem::Deprecate.skip_during do + assert(Gem::Platform.match(Gem::Platform.new("x86_64-linux")), "should match Gem::Platform") + assert(Gem::Platform.match("x86_64-linux"), "should match String platform") + end + end + def assert_local_match(name) assert_match Gem::Platform.local, name end |