mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
576b2e64cd
This allows easy differentiation between ABI incompatible platforms like MSWIN64 and MSVCRT-based MINGW32. This also implicates a distinct rubygem platform which is also "x64-mingw-ucrt". Although the term "mingw32" is the OS-part for 64 bit systems as well, the "32" is misleading and confusing for many users. Therefore the new platform string drops the "32" from the OS part to just "mingw". This conforms to the common practice of windows platform testing per RUBY_PLATFORM=~/mswin|mingw/ .
375 lines
14 KiB
Ruby
375 lines
14 KiB
Ruby
# frozen_string_literal: true
|
|
require_relative 'helper'
|
|
require 'rubygems/platform'
|
|
require 'rbconfig'
|
|
|
|
class TestGemPlatform < Gem::TestCase
|
|
def test_self_local
|
|
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'
|
|
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'
|
|
end
|
|
|
|
def test_self_match_spec?
|
|
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'
|
|
end
|
|
|
|
def test_self_match_spec_with_match_gem_override
|
|
make_spec = -> name, platform do
|
|
util_spec name, '1' do |s|
|
|
s.platform = platform
|
|
end
|
|
end
|
|
|
|
class << Gem::Platform
|
|
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'
|
|
match_platforms?(platform, [Gem::Platform::RUBY, Gem::Platform.local])
|
|
else
|
|
match_platforms?(platform, Gem.platforms)
|
|
end
|
|
end
|
|
end
|
|
|
|
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))
|
|
|
|
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
|
|
remove_method :original_match_gem?
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_self_new
|
|
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('')
|
|
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],
|
|
}
|
|
|
|
test_cases.each do |arch, expected|
|
|
platform = Gem::Platform.new arch
|
|
assert_equal expected, platform.to_a, arch.inspect
|
|
end
|
|
end
|
|
|
|
def test_initialize_command_line
|
|
expected = ['x86', 'mswin32', nil]
|
|
|
|
platform = Gem::Platform.new 'i386-mswin32'
|
|
|
|
assert_equal expected, platform.to_a, 'i386-mswin32'
|
|
|
|
expected = ['x86', 'mswin32', '80']
|
|
|
|
platform = Gem::Platform.new 'i386-mswin32-80'
|
|
|
|
assert_equal expected, platform.to_a, 'i386-mswin32-80'
|
|
|
|
expected = ['x86', 'solaris', '2.10']
|
|
|
|
platform = Gem::Platform.new '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'
|
|
|
|
expected = ['x86', 'mswin32', nil]
|
|
|
|
platform = Gem::Platform.new 'i386-mswin32'
|
|
|
|
assert_equal expected, platform.to_a, 'i386-mswin32 VC6'
|
|
ensure
|
|
if orig_RUBY_SO_NAME
|
|
RbConfig::CONFIG['RUBY_SO_NAME'] = orig_RUBY_SO_NAME
|
|
else
|
|
RbConfig::CONFIG.delete 'RUBY_SO_NAME'
|
|
end
|
|
end
|
|
|
|
def test_initialize_platform
|
|
platform = Gem::Platform.new 'cpu-my_platform1'
|
|
|
|
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
|
|
end
|
|
|
|
def test_to_s
|
|
if win_platform?
|
|
assert_equal 'x86-mswin32-60', Gem::Platform.local.to_s
|
|
else
|
|
assert_equal 'x86-darwin-8', Gem::Platform.local.to_s
|
|
end
|
|
end
|
|
|
|
def test_equals2
|
|
my = Gem::Platform.new %w[cpu my_platform 1]
|
|
other = Gem::Platform.new %w[cpu other_platform 1]
|
|
|
|
assert_equal my, my
|
|
refute_equal my, other
|
|
refute_equal other, my
|
|
end
|
|
|
|
def test_equals3
|
|
my = Gem::Platform.new %w[cpu my_platform 1]
|
|
other = Gem::Platform.new %w[cpu other_platform 1]
|
|
|
|
assert(my === my)
|
|
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')
|
|
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')
|
|
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')
|
|
end
|
|
|
|
def test_equals3_version
|
|
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']
|
|
|
|
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')
|
|
end
|
|
|
|
def test_equals_tilde
|
|
util_set_arch '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'
|
|
end
|
|
|
|
def test_inspect
|
|
result = Gem::Platform.new("universal-java11").inspect
|
|
|
|
assert_equal 1, result.scan(/@cpu=/).size
|
|
assert_equal 1, result.scan(/@os=/).size
|
|
assert_equal 1, result.scan(/@version=/).size
|
|
end
|
|
|
|
def assert_local_match(name)
|
|
assert_match Gem::Platform.local, name
|
|
end
|
|
|
|
def refute_local_match(name)
|
|
refute_match Gem::Platform.local, name
|
|
end
|
|
end
|