1 require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
3 require 'rubygems/platform'
6 class TestGemPlatform < RubyGemTestCase
8 def test_self_const_missing
9 consts = [:DARWIN, :LINUX_586, :MSWIN32, :PPC_DARWIN, :WIN32, :X86_LINUX]
11 consts.each do |const|
12 e = assert_raise NameError do
13 Gem::Platform.const_missing const
16 assert_equal "#{const} has been removed, use CURRENT instead",
22 util_set_arch 'i686-darwin8.10.1'
24 assert_equal Gem::Platform.new(%w[x86 darwin 8]), Gem::Platform.local
28 assert Gem::Platform.match(nil), 'nil == ruby'
29 assert Gem::Platform.match(Gem::Platform.local), 'exact match'
30 assert Gem::Platform.match(Gem::Platform.local.to_s), '=~ match'
31 assert Gem::Platform.match(Gem::Platform::RUBY), 'ruby'
35 assert_equal Gem::Platform.local, Gem::Platform.new(Gem::Platform::CURRENT)
36 assert_equal Gem::Platform::RUBY, Gem::Platform.new(Gem::Platform::RUBY)
37 assert_equal Gem::Platform::RUBY, Gem::Platform.new(nil)
38 assert_equal Gem::Platform::RUBY, Gem::Platform.new('')
43 'amd64-freebsd6' => ['amd64', 'freebsd', '6'],
44 'hppa2.0w-hpux11.31' => ['hppa2.0w', 'hpux', '11'],
45 'java' => [nil, 'java', nil],
46 'jruby' => [nil, 'java', nil],
47 'powerpc-aix5.3.0.0' => ['powerpc', 'aix', '5'],
48 'powerpc-darwin7' => ['powerpc', 'darwin', '7'],
49 'powerpc-darwin8' => ['powerpc', 'darwin', '8'],
50 'powerpc-linux' => ['powerpc', 'linux', nil],
51 'powerpc64-linux' => ['powerpc64', 'linux', nil],
52 'sparc-solaris2.10' => ['sparc', 'solaris', '2.10'],
53 'sparc-solaris2.8' => ['sparc', 'solaris', '2.8'],
54 'sparc-solaris2.9' => ['sparc', 'solaris', '2.9'],
55 'universal-darwin8' => ['universal', 'darwin', '8'],
56 'universal-darwin9' => ['universal', 'darwin', '9'],
57 'i386-cygwin' => ['x86', 'cygwin', nil],
58 'i686-darwin' => ['x86', 'darwin', nil],
59 'i686-darwin8.4.1' => ['x86', 'darwin', '8'],
60 'i386-freebsd4.11' => ['x86', 'freebsd', '4'],
61 'i386-freebsd5' => ['x86', 'freebsd', '5'],
62 'i386-freebsd6' => ['x86', 'freebsd', '6'],
63 'i386-freebsd7' => ['x86', 'freebsd', '7'],
64 'i386-java1.5' => ['x86', 'java', '1.5'],
65 'x86-java1.6' => ['x86', 'java', '1.6'],
66 'i386-java1.6' => ['x86', 'java', '1.6'],
67 'i686-linux' => ['x86', 'linux', nil],
68 'i586-linux' => ['x86', 'linux', nil],
69 'i486-linux' => ['x86', 'linux', nil],
70 'i386-linux' => ['x86', 'linux', nil],
71 'i586-linux-gnu' => ['x86', 'linux', nil],
72 'i386-linux-gnu' => ['x86', 'linux', nil],
73 'i386-mingw32' => ['x86', 'mingw32', nil],
74 'i386-mswin32' => ['x86', 'mswin32', nil],
75 'i386-mswin32_80' => ['x86', 'mswin32', '80'],
76 'i386-mswin32-80' => ['x86', 'mswin32', '80'],
77 'x86-mswin32' => ['x86', 'mswin32', nil],
78 'x86-mswin32_60' => ['x86', 'mswin32', '60'],
79 'x86-mswin32-60' => ['x86', 'mswin32', '60'],
80 'i386-netbsdelf' => ['x86', 'netbsdelf', nil],
81 'i386-openbsd4.0' => ['x86', 'openbsd', '4.0'],
82 'i386-solaris2.10' => ['x86', 'solaris', '2.10'],
83 'i386-solaris2.8' => ['x86', 'solaris', '2.8'],
84 'mswin32' => ['x86', 'mswin32', nil],
85 'x86_64-linux' => ['x86_64', 'linux', nil],
86 'x86_64-openbsd3.9' => ['x86_64', 'openbsd', '3.9'],
87 'x86_64-openbsd4.0' => ['x86_64', 'openbsd', '4.0'],
90 test_cases.each do |arch, expected|
91 platform = Gem::Platform.new arch
92 assert_equal expected, platform.to_a, arch.inspect
96 def test_initialize_command_line
97 expected = ['x86', 'mswin32', nil]
99 platform = Gem::Platform.new 'i386-mswin32'
101 assert_equal expected, platform.to_a, 'i386-mswin32'
103 expected = ['x86', 'mswin32', '80']
105 platform = Gem::Platform.new 'i386-mswin32-80'
107 assert_equal expected, platform.to_a, 'i386-mswin32-80'
110 def test_initialize_mswin32_vc6
111 orig_RUBY_SO_NAME = Config::CONFIG['RUBY_SO_NAME']
112 Config::CONFIG['RUBY_SO_NAME'] = 'msvcrt-ruby18'
114 expected = ['x86', 'mswin32', nil]
116 platform = Gem::Platform.new 'i386-mswin32'
118 assert_equal expected, platform.to_a, 'i386-mswin32 VC6'
120 Config::CONFIG['RUBY_SO_NAME'] = orig_RUBY_SO_NAME
123 def test_initialize_platform
124 platform = Gem::Platform.new 'cpu-my_platform1'
125 expected = Gem::Platform.new platform
127 assert_equal 'cpu', platform.cpu
128 assert_equal 'my_platform', platform.os
129 assert_equal '1', platform.version
132 def test_initialize_test
133 platform = Gem::Platform.new 'cpu-my_platform1'
134 assert_equal 'cpu', platform.cpu
135 assert_equal 'my_platform', platform.os
136 assert_equal '1', platform.version
138 platform = Gem::Platform.new 'cpu-other_platform1'
139 assert_equal 'cpu', platform.cpu
140 assert_equal 'other_platform', platform.os
141 assert_equal '1', platform.version
145 if win_platform? then
146 assert_equal 'x86-mswin32-60', Gem::Platform.local.to_s
148 assert_equal 'x86-darwin-8', Gem::Platform.local.to_s
153 my = Gem::Platform.new %w[cpu my_platform 1]
154 other = Gem::Platform.new %w[cpu other_platform 1]
157 assert_not_equal my, other
158 assert_not_equal other, my
162 my = Gem::Platform.new %w[cpu my_platform 1]
163 other = Gem::Platform.new %w[cpu other_platform 1]
166 assert !(other === my)
167 assert !(my === other)
171 ppc_darwin8 = Gem::Platform.new 'powerpc-darwin8.0'
172 uni_darwin8 = Gem::Platform.new 'universal-darwin8.0'
173 x86_darwin8 = Gem::Platform.new 'i686-darwin8.0'
175 util_set_arch 'powerpc-darwin8'
176 assert((ppc_darwin8 === Gem::Platform.local), 'powerpc =~ universal')
177 assert((uni_darwin8 === Gem::Platform.local), 'powerpc =~ universal')
178 assert !(x86_darwin8 === Gem::Platform.local), 'powerpc =~ universal'
180 util_set_arch 'i686-darwin8'
181 assert !(ppc_darwin8 === Gem::Platform.local), 'powerpc =~ universal'
182 assert((uni_darwin8 === Gem::Platform.local), 'x86 =~ universal')
183 assert((x86_darwin8 === Gem::Platform.local), 'powerpc =~ universal')
185 util_set_arch 'universal-darwin8'
186 assert((ppc_darwin8 === Gem::Platform.local), 'universal =~ ppc')
187 assert((uni_darwin8 === Gem::Platform.local), 'universal =~ universal')
188 assert((x86_darwin8 === Gem::Platform.local), 'universal =~ x86')
191 def test_equals3_version
192 util_set_arch 'i686-darwin8'
194 x86_darwin = Gem::Platform.new ['x86', 'darwin', nil]
195 x86_darwin7 = Gem::Platform.new ['x86', 'darwin', '7']
196 x86_darwin8 = Gem::Platform.new ['x86', 'darwin', '8']
197 x86_darwin9 = Gem::Platform.new ['x86', 'darwin', '9']
199 assert((x86_darwin === Gem::Platform.local), 'x86_darwin === x86_darwin8')
200 assert((x86_darwin8 === Gem::Platform.local), 'x86_darwin8 === x86_darwin8')
202 assert !(x86_darwin7 === Gem::Platform.local), 'x86_darwin7 === x86_darwin8'
203 assert !(x86_darwin9 === Gem::Platform.local), 'x86_darwin9 === x86_darwin8'
206 def test_equals_tilde
207 util_set_arch 'i386-mswin32'
209 assert_match 'mswin32', Gem::Platform.local
210 assert_match 'i386-mswin32', Gem::Platform.local
213 assert_match 'i386-mswin32-mq5.3', Gem::Platform.local
214 assert_match 'i386-mswin32-mq6', Gem::Platform.local
215 deny_match 'win32-1.8.2-VC7', Gem::Platform.local
216 deny_match 'win32-1.8.4-VC6', Gem::Platform.local
217 deny_match 'win32-source', Gem::Platform.local
218 deny_match 'windows', Gem::Platform.local
220 util_set_arch 'i686-linux'
221 assert_match 'i486-linux', Gem::Platform.local
222 assert_match 'i586-linux', Gem::Platform.local
223 assert_match 'i686-linux', Gem::Platform.local
225 util_set_arch 'i686-darwin8'
226 assert_match 'i686-darwin8.4.1', Gem::Platform.local
227 assert_match 'i686-darwin8.8.2', Gem::Platform.local
230 assert_match 'java', Gem::Platform.local
231 assert_match 'jruby', Gem::Platform.local
233 util_set_arch 'powerpc-darwin'
234 assert_match 'powerpc-darwin', Gem::Platform.local
236 util_set_arch 'powerpc-darwin7'
237 assert_match 'powerpc-darwin7.9.0', Gem::Platform.local
239 util_set_arch 'powerpc-darwin8'
240 assert_match 'powerpc-darwin8.10.0', Gem::Platform.local
242 util_set_arch 'sparc-solaris2.8'
243 assert_match 'sparc-solaris2.8-mq5.3', Gem::Platform.local
246 def assert_match(pattern, platform, message = '')
247 full_message = build_message message, "<?> expected to be =~\n<?>.",
249 assert_block(full_message) { platform =~ pattern }
252 def deny_match(pattern, platform, message = '')
253 full_message = build_message message, "<?> expected to be !~\n<?>.",
255 assert_block(full_message) { platform !~ pattern }