Imported Upstream version 1.46.0
[platform/upstream/nghttp2.git] / third-party / mruby / test / t / kernel.rb
1 ##
2 # Kernel ISO Test
3
4 assert('Kernel', '15.3.1') do
5   assert_equal Module, Kernel.class
6 end
7
8 assert('Kernel.block_given?', '15.3.1.2.2') do
9   def bg_try(&b)
10     if Kernel.block_given?
11       yield
12     else
13       "no block"
14     end
15   end
16
17   assert_false Kernel.block_given?
18   # test without block
19   assert_equal "no block", bg_try
20   # test with block
21   assert_equal "block" do
22     bg_try { "block" }
23   end
24   # test with block
25   assert_equal "block" do
26     bg_try do
27       "block"
28     end
29   end
30 end
31
32 # Kernel.eval is provided by the mruby-eval mrbgem. '15.3.1.2.3'
33
34 assert('Kernel.iterator?', '15.3.1.2.5') do
35   assert_false Kernel.iterator?
36 end
37
38 assert('Kernel.lambda', '15.3.1.2.6') do
39   l = Kernel.lambda do
40     true
41   end
42
43   m = Kernel.lambda(&l)
44
45   assert_true l.call
46   assert_equal Proc, l.class
47   assert_true m.call
48   assert_equal Proc, m.class
49 end
50
51 assert('Kernel.loop', '15.3.1.2.8') do
52   i = 0
53
54   Kernel.loop do
55     i += 1
56     break if i == 100
57   end
58
59   assert_equal 100, i
60 end
61
62 # Kernel.p is provided by the mruby-print mrbgem. '15.3.1.2.9'
63
64 # Kernel.print is provided by the mruby-print mrbgem. '15.3.1.2.10'
65
66 # Kernel.puts is provided by the mruby-print mrbgem. '15.3.1.2.11'
67
68 assert('Kernel.raise', '15.3.1.2.12') do
69   assert_raise RuntimeError do
70     Kernel.raise
71   end
72
73   assert_raise RuntimeError do
74     Kernel.raise RuntimeError.new
75   end
76 end
77
78 assert('Kernel#__id__', '15.3.1.3.3') do
79   assert_equal Fixnum, __id__.class
80 end
81
82 assert('Kernel#__send__', '15.3.1.3.4') do
83   # test with block
84   l = __send__(:lambda) do
85     true
86   end
87
88   assert_true l.call
89   assert_equal Proc, l.class
90   # test with argument
91   assert_true __send__(:respond_to?, :nil?)
92   # test without argument and without block
93   assert_equal String, __send__(:to_s).class
94
95   args = [:respond_to?, :nil?]
96   assert_true __send__(*args)
97   assert_equal [:respond_to?, :nil?], args
98 end
99
100 assert('Kernel#block_given?', '15.3.1.3.6') do
101   def bg_try(&b)
102     if block_given?
103       yield
104     else
105       "no block"
106     end
107   end
108
109   assert_false block_given?
110   assert_equal "no block", bg_try
111   assert_equal "block" do
112     bg_try { "block" }
113   end
114   assert_equal "block" do
115     bg_try do
116       "block"
117     end
118   end
119
120   def bg_try_in_block
121     -> { block_given? }[]
122   end
123
124   assert_false bg_try_in_block
125   assert_true bg_try_in_block{}
126 end
127
128 assert('Kernel#class', '15.3.1.3.7') do
129   assert_equal Module, Kernel.class
130 end
131
132 assert('Kernel#clone', '15.3.1.3.8') do
133   class KernelCloneTest
134     def initialize
135       @v = 0
136     end
137
138     def get
139       @v
140     end
141
142     def set(v)
143       @v = v
144     end
145   end
146
147   a = KernelCloneTest.new
148   a.set(1)
149   b = a.clone
150
151   def a.test
152   end
153   a.set(2)
154   c = a.clone
155
156   immutables = [ 1, :foo, true, false, nil ]
157   error_count = 0
158   immutables.each do |i|
159     begin
160       i.clone
161     rescue TypeError
162       error_count += 1
163     end
164   end
165
166   assert_equal 2, a.get
167   assert_equal 1, b.get
168   assert_equal 2, c.get
169   assert_true a.respond_to?(:test)
170   assert_false b.respond_to?(:test)
171   assert_true c.respond_to?(:test)
172
173   a.freeze
174   d = a.clone
175   assert_true d.frozen?
176 end
177
178 assert('Kernel#dup', '15.3.1.3.9') do
179   class KernelDupTest
180     def initialize
181       @v = 0
182     end
183
184     def get
185       @v
186     end
187
188     def set(v)
189       @v = v
190     end
191   end
192
193   a = KernelDupTest.new
194   a.set(1)
195   b = a.dup
196
197   def a.test
198   end
199   a.set(2)
200   c = a.dup
201
202   assert_equal 2, a.get
203   assert_equal 1, b.get
204   assert_equal 2, c.get
205   assert_true a.respond_to?(:test)
206   assert_false b.respond_to?(:test)
207   assert_false c.respond_to?(:test)
208 end
209
210 assert('Kernel#dup class') do
211   assert_nothing_raised do
212     Array.dup.new(200)
213     Range.dup.new(2, 3)
214     String.dup.new("a"*50)
215   end
216 end
217
218 # Kernel#eval is provided by mruby-eval mrbgem '15.3.1.3.12'
219
220 assert('Kernel#extend', '15.3.1.3.13') do
221   class Test4ExtendClass
222   end
223
224   module Test4ExtendModule
225     def test_method; end
226   end
227
228   a = Test4ExtendClass.new
229   a.extend(Test4ExtendModule)
230   b = Test4ExtendClass.new
231
232   assert_true a.respond_to?(:test_method)
233   assert_false b.respond_to?(:test_method)
234
235   assert_raise(FrozenError) { Object.new.freeze.extend(Test4ExtendModule) }
236   assert_raise(FrozenError, TypeError) { :sym.extend(Test4ExtendModule) }
237 end
238
239 assert('Kernel#extend works on toplevel', '15.3.1.3.13') do
240   module Test4ExtendModule
241     def test_method; end
242   end
243   # This would crash...
244   extend(Test4ExtendModule)
245
246   assert_true respond_to?(:test_method)
247 end
248
249 assert('Kernel#freeze') do
250   obj = Object.new
251   assert_equal obj, obj.freeze
252   assert_equal 0, 0.freeze
253   assert_equal :a, :a.freeze
254   assert_equal true, true.freeze
255   assert_equal false, false.freeze
256   assert_equal nil, nil.freeze
257   skip unless Object.const_defined?(:Float)
258   assert_equal 0.0, 0.0.freeze
259 end
260
261 assert('Kernel#frozen?') do
262   assert_false "".frozen?
263   assert_true "".freeze.frozen?
264   assert_true 0.frozen?
265   assert_true :a.frozen?
266   assert_true true.frozen?
267   assert_true false.frozen?
268   assert_true nil.frozen?
269   skip unless Object.const_defined?(:Float)
270   assert_true 0.0.frozen?
271 end
272
273 assert('Kernel#hash', '15.3.1.3.15') do
274   assert_equal hash, hash
275 end
276
277 assert('Kernel#inspect', '15.3.1.3.17') do
278   s = inspect
279
280   assert_equal String, s.class
281   assert_equal "main", s
282 end
283
284 assert('Kernel#is_a?', '15.3.1.3.24') do
285   assert_true is_a?(Kernel)
286   assert_false is_a?(Array)
287
288   assert_raise TypeError do
289     42.is_a?(42)
290   end
291 end
292
293 assert('Kernel#iterator?', '15.3.1.3.25') do
294   assert_false iterator?
295 end
296
297 assert('Kernel#kind_of?', '15.3.1.3.26') do
298   assert_true kind_of?(Kernel)
299   assert_false kind_of?(Array)
300 end
301
302 assert('Kernel#lambda', '15.3.1.3.27') do
303   l = lambda do
304     true
305   end
306
307   m = lambda(&l)
308
309   assert_true l.call
310   assert_equal Proc, l.class
311   assert_true m.call
312   assert_equal Proc, m.class
313 end
314
315 assert('Kernel#loop', '15.3.1.3.29') do
316   i = 0
317
318   loop do
319     i += 1
320     break if i == 100
321   end
322
323   assert_equal i, 100
324 end
325
326 assert('Kernel#method_missing', '15.3.1.3.30') do
327   class MMTestClass
328     def method_missing(sym)
329       "A call to #{sym}"
330     end
331   end
332   mm_test = MMTestClass.new
333   assert_equal 'A call to no_method_named_this', mm_test.no_method_named_this
334
335   class SuperMMTestClass < MMTestClass
336     def no_super_method_named_this
337       super
338     end
339   end
340   super_mm_test = SuperMMTestClass.new
341   assert_equal 'A call to no_super_method_named_this', super_mm_test.no_super_method_named_this
342
343   class NoSuperMethodTestClass
344     def no_super_method_named_this
345       super
346     end
347   end
348   no_super_test = NoSuperMethodTestClass.new
349   msg = "undefined method 'no_super_method_named_this'"
350   assert_raise_with_message(NoMethodError, msg) do
351     no_super_test.no_super_method_named_this
352   end
353
354   a = String.new
355   msg = "undefined method 'no_method_named_this'"
356   assert_raise_with_message(NoMethodError, msg) do
357     a.no_method_named_this
358   end
359 end
360
361 assert('Kernel#nil?', '15.3.1.3.32') do
362   assert_false nil?
363 end
364
365 assert('Kernel#object_id', '15.3.1.3.33') do
366   a = ""
367   b = ""
368   assert_not_equal a.object_id, b.object_id
369
370   assert_kind_of Numeric, object_id
371   assert_kind_of Numeric, "".object_id
372   assert_kind_of Numeric, true.object_id
373   assert_kind_of Numeric, false.object_id
374   assert_kind_of Numeric, nil.object_id
375   assert_kind_of Numeric, :no.object_id
376   assert_kind_of Numeric, 1.object_id
377   assert_kind_of Numeric, 1.0.object_id
378 end
379
380 # Kernel#p is defined in mruby-print mrbgem. '15.3.1.3.34'
381
382 # Kernel#print is defined in mruby-print mrbgem. '15.3.1.3.35'
383
384 # Kernel#puts is defined in mruby-print mrbgem. '15.3.1.3.39'
385
386 assert('Kernel#raise', '15.3.1.3.40') do
387   assert_raise RuntimeError do
388     raise
389   end
390
391   assert_raise RuntimeError do
392     raise RuntimeError.new
393   end
394 end
395
396 assert('Kernel#remove_instance_variable', '15.3.1.3.41') do
397   class Test4RemoveInstanceVar
398     attr_reader :var
399     def initialize
400       @var = 99
401     end
402     def remove
403       remove_instance_variable(:@var)
404     end
405   end
406
407   tri = Test4RemoveInstanceVar.new
408   assert_equal 99, tri.var
409   assert_equal 99, tri.remove
410   assert_equal nil, tri.var
411   assert_raise(NameError) { tri.remove }
412   assert_raise(NameError) { tri.remove_instance_variable(:var) }
413   assert_raise(FrozenError) { tri.freeze.remove }
414   assert_raise(FrozenError, NameError) { :a.remove_instance_variable(:@v) }
415 end
416
417 # Kernel#require is defined in mruby-require. '15.3.1.3.42'
418
419 assert('Kernel#respond_to?', '15.3.1.3.43') do
420   class Test4RespondTo
421     def valid_method; end
422
423     def test_method; end
424     undef test_method
425   end
426
427   assert_raise TypeError do
428     Test4RespondTo.new.respond_to?(1)
429   end
430
431   assert_raise ArgumentError do
432     Test4RespondTo.new.respond_to?
433   end
434
435   assert_raise ArgumentError do
436     Test4RespondTo.new.respond_to? :a, true, :aa
437   end
438
439   assert_true respond_to?(:nil?)
440   assert_true Test4RespondTo.new.respond_to?(:valid_method)
441   assert_true Test4RespondTo.new.respond_to?('valid_method')
442   assert_false Test4RespondTo.new.respond_to?(:test_method)
443 end
444
445 assert('Kernel#to_s', '15.3.1.3.46') do
446   assert_equal to_s.class, String
447 end
448
449 assert('Kernel#!=') do
450   str1 = "hello"
451   str2 = str1
452   str3 = "world"
453
454   assert_false (str1[1] != 'e')
455   assert_true (str1 != str3)
456   assert_false (str2 != str1)
457 end
458
459 # operator "!~" is defined in ISO Ruby 11.4.4.
460 assert('Kernel#!~') do
461   x = "x"
462   def x.=~(other)
463     other == "x"
464   end
465   assert_false x !~ "x"
466   assert_true  x !~ "z"
467
468   y = "y"
469   def y.=~(other)
470     other == "y"
471   end
472   def y.!~(other)
473     other == "not y"
474   end
475   assert_false y !~ "y"
476   assert_false y !~ "z"
477   assert_true  y !~ "not y"
478 end
479
480 assert('Kernel#respond_to_missing?') do
481   class Test4RespondToMissing
482     def respond_to_missing?(method_name, include_private = false)
483       method_name == :a_method
484     end
485   end
486
487   assert_true Test4RespondToMissing.new.respond_to?(:a_method)
488   assert_false Test4RespondToMissing.new.respond_to?(:no_method)
489 end
490
491 assert('stack extend') do
492   def recurse(count, stop)
493     return count if count > stop
494     recurse(count+1, stop)
495   end
496
497   assert_equal 6, recurse(0, 5)
498 end