source: EcnlProtoTool/trunk/mruby-1.3.0/test/t/class.rb@ 331

Last change on this file since 331 was 331, checked in by coas-nagasima, 6 years ago

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 8.3 KB
Line 
1##
2# Class ISO Test
3
4assert('Class', '15.2.3') do
5 assert_equal(Class, Class.class)
6end
7
8assert('Class#initialize', '15.2.3.3.1') do
9 c = Class.new do
10 def test
11 :test
12 end
13 end.new
14
15 assert_equal(c.test, :test)
16end
17
18assert('Class#initialize_copy', '15.2.3.3.2') do
19 class TestClass
20 attr_accessor :n
21 def initialize(n)
22 @n = n
23 end
24 def initialize_copy(obj)
25 @n = n
26 end
27 end
28
29 c1 = TestClass.new('Foo')
30 c2 = c1.dup
31 c3 = TestClass.new('Bar')
32
33 assert_equal(c1.n, c2.n)
34 assert_not_equal(c1.n, c3.n)
35end
36
37assert('Class#new', '15.2.3.3.3') do
38 assert_raise(TypeError, 'Singleton should raise TypeError') do
39 "a".singleton_class.new
40 end
41
42 class TestClass
43 def initialize args, &block
44 @result = if not args.nil? and block.nil?
45 # only arguments
46 :only_args
47 elsif not args.nil? and not block.nil?
48 # args and block is given
49 :args_and_block
50 else
51 # this should never happen
52 :broken
53 end
54 end
55
56 def result; @result; end
57 end
58
59 assert_equal(:only_args, TestClass.new(:arg).result)
60 # with block doesn't work yet
61end
62
63assert('Class#superclass', '15.2.3.3.4') do
64 class SubClass < String; end
65 assert_equal(String, SubClass.superclass)
66end
67
68# Not ISO specified
69
70assert('Class 1') do
71 class C1; end
72 assert_equal(Class, C1.class)
73end
74
75assert('Class 2') do
76 class C2; end
77 assert_equal(C2, C2.new.class)
78end
79
80assert('Class 3') do
81 class C3; end
82 assert_equal(Class, C3.new.class.class)
83end
84
85assert('Class 4') do
86 class C4_A; end
87 class C4 < C4_A; end
88 assert_equal(Class, C4.class)
89end
90
91assert('Class 5') do
92 class C5_A; end
93 class C5 < C5_A; end
94 assert_equal(C5, C5.new.class)
95end
96
97assert('Class 6') do
98 class C6_A; end
99 class C6 < C6_A; end
100 assert_equal(Class, C6.new.class.class)
101end
102
103assert('Class 7') do
104 class C7_A; end
105 class C7_B; end
106
107 class C7 < C7_A; end
108
109 assert_raise(TypeError) do
110 # Different superclass.
111 class C7 < C7_B; end
112 end
113end
114
115assert('Class 8') do
116 class C8_A; end
117
118 class C8; end # superclass is Object
119
120 assert_raise(TypeError) do
121 # Different superclass.
122 class C8 < C8_A; end
123 end
124end
125
126assert('Class 9') do
127 Class9Const = "a"
128
129 assert_raise(TypeError) do
130 class Class9Const; end
131 end
132end
133
134assert('Class Module 1') do
135 module M; end
136 assert_equal(Module, M.class)
137end
138
139assert('Class Module 2') do
140 module M; end
141 class C; include M; end
142 assert_equal(C, C.new.class)
143end
144
145# nested class
146assert('Class Nested 1') do
147 class A; end
148 class A::B; end
149 assert_equal(A::B, A::B)
150end
151
152assert('Class Nested 2') do
153 class A; end
154 class A::B; end
155 assert_equal(A::B, A::B.new.class)
156end
157
158assert('Class Nested 3') do
159 class A; end
160 class A::B; end
161 assert_equal(Class, A::B.new.class.class)
162end
163
164assert('Class Nested 4') do
165 class A; end
166 class A::B; end
167 class A::B::C; end
168 assert_equal(A::B::C, A::B::C)
169end
170
171assert('Class Nested 5') do
172 class A; end
173 class A::B; end
174 class A::B::C; end
175 assert_equal(Class, A::B::C.class)
176end
177
178assert('Class Nested 6') do
179 class A; end
180 class A::B; end
181 class A::B::C; end
182 assert_equal(A::B::C, A::B::C.new.class)
183end
184
185assert('Class Nested 7') do
186 class A; end
187 class A::B; end
188 class A::B2 < A::B; end
189 assert_equal(A::B2, A::B2)
190end
191
192assert('Class Nested 8') do
193 class A; end
194 class A::B; end
195 class A::B2 < A::B; end
196 assert_equal(Class, A::B2.class)
197end
198
199assert('Class Colon 1') do
200 class A; end
201 A::C = 1
202 assert_equal(1, A::C)
203end
204
205assert('Class Colon 2') do
206 class A; class ::C; end end
207 assert_equal(C, C)
208end
209
210assert('Class Colon 3') do
211 class A; class ::C; end end
212 assert_equal(Class, C.class)
213end
214
215assert('Class Dup 1') do
216 class C; end
217 assert_equal(Class, C.dup.class)
218end
219
220assert('Class Dup 2') do
221 module M; end
222 assert_equal(Module, M.dup.class)
223end
224
225assert('Class.new') do
226 assert_equal(Class, Class.new.class)
227 a = []
228 klass = Class.new do |c|
229 a << c
230 end
231 assert_equal([klass], a)
232end
233
234assert('class to return the last value') do
235 m = class C; :m end
236 assert_equal(m, :m)
237end
238
239assert('raise when superclass is not a class') do
240 module FirstModule; end
241 assert_raise(TypeError, 'should raise TypeError') do
242 class FirstClass < FirstModule; end
243 end
244
245 class SecondClass; end
246 assert_raise(TypeError, 'should raise TypeError') do
247 class SecondClass < false; end
248 end
249
250 class ThirdClass; end
251 assert_raise(TypeError, 'should raise TypeError') do
252 class ThirdClass < ThirdClass; end
253 end
254end
255
256assert('Class#inherited') do
257 class Foo
258 @@subclass_name = nil
259 def self.inherited(subclass)
260 @@subclass_name = subclass
261 end
262 def self.subclass_name
263 @@subclass_name
264 end
265 end
266
267 assert_equal(nil, Foo.subclass_name)
268
269 class Bar < Foo
270 end
271
272 assert_equal(Bar, Foo.subclass_name)
273
274 class Baz < Bar
275 end
276
277 assert_equal(Baz, Foo.subclass_name)
278end
279
280assert('singleton tests') do
281 module FooMod
282 def run_foo_mod
283 100
284 end
285 end
286
287 bar = String.new
288
289 baz = class << bar
290 extend FooMod
291 def self.run_baz
292 200
293 end
294 end
295
296 assert_false baz.singleton_methods.include? :run_foo_mod
297 assert_false baz.singleton_methods.include? :run_baz
298
299 assert_raise(NoMethodError, 'should raise NoMethodError') do
300 baz.run_foo_mod
301 end
302 assert_raise(NoMethodError, 'should raise NoMethodError') do
303 baz.run_baz
304 end
305
306 assert_raise(NoMethodError, 'should raise NoMethodError') do
307 bar.run_foo_mod
308 end
309 assert_raise(NoMethodError, 'should raise NoMethodError') do
310 bar.run_baz
311 end
312
313 baz = class << bar
314 extend FooMod
315 def self.run_baz
316 300
317 end
318 self
319 end
320
321 assert_true baz.singleton_methods.include? :run_baz
322 assert_true baz.singleton_methods.include? :run_foo_mod
323 assert_equal 100, baz.run_foo_mod
324 assert_equal 300, baz.run_baz
325
326 assert_raise(NoMethodError, 'should raise NoMethodError') do
327 bar.run_foo_mod
328 end
329 assert_raise(NoMethodError, 'should raise NoMethodError') do
330 bar.run_baz
331 end
332
333 fv = false
334 class << fv
335 def self.run_false
336 5
337 end
338 end
339
340 nv = nil
341 class << nv
342 def self.run_nil
343 6
344 end
345 end
346
347 tv = true
348 class << tv
349 def self.run_nil
350 7
351 end
352 end
353
354 assert_raise(TypeError, 'should raise TypeError') do
355 num = 1.0
356 class << num
357 def self.run_nil
358 7
359 end
360 end
361 end
362end
363
364assert('clone Class') do
365 class Foo
366 def func
367 true
368 end
369 end
370
371 Foo.clone.new.func
372end
373
374assert('class variable and class << self style class method') do
375 class ClassVariableTest
376 @@class_variable = "value"
377 class << self
378 def class_variable
379 @@class_variable
380 end
381 end
382 end
383
384 assert_equal("value", ClassVariableTest.class_variable)
385end
386
387assert('class variable definition in singleton_class') do
388 class ClassVariableDefinitionInSingletonTest
389 class << self
390 @@class_variable = "value"
391 end
392 def class_variable
393 @@class_variable
394 end
395 end
396
397 assert_equal("value", ClassVariableDefinitionInSingletonTest.new.class_variable)
398end
399
400assert('class variable in module and class << self style class method') do
401 module ClassVariableInModuleTest
402 @@class_variable = "value"
403 class << self
404 def class_variable
405 @@class_variable
406 end
407 end
408 end
409
410 assert_equal("value", ClassVariableInModuleTest.class_variable)
411end
412
413assert('child class/module defined in singleton class get parent constant') do
414 actual = module GetParentConstantTest
415 EXPECT = "value"
416 class << self
417 class CHILD
418 class << self
419 EXPECT
420 end
421 end
422 end
423 end
424 assert_equal("value", actual)
425end
426
427assert('overriding class variable with a module (#3235)') do
428 module ModuleWithCVar
429 @@class_variable = 1
430 end
431 class CVarOverrideTest
432 @@class_variable = 2
433 include ModuleWithCVar
434
435 assert_equal(1, @@class_variable)
436 end
437end
438
439assert('class with non-class/module outer raises TypeError') do
440 assert_raise(TypeError) { class 0::C1; end }
441 assert_raise(TypeError) { class []::C2; end }
442end
443
444assert("remove_method doesn't segfault if the passed in argument isn't a symbol") do
445 klass = Class.new
446 assert_raise(TypeError) { klass.remove_method nil }
447 assert_raise(TypeError) { klass.remove_method 123 }
448 assert_raise(TypeError) { klass.remove_method 1.23 }
449 assert_raise(NameError) { klass.remove_method "hello" }
450 assert_raise(TypeError) { klass.remove_method Class.new }
451end
Note: See TracBrowser for help on using the repository browser.