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