4 assert('Kernel', '15.3.1') do
5 assert_equal Module, Kernel.class
8 assert('Kernel.block_given?', '15.3.1.2.2') do
10 if Kernel.block_given?
17 assert_false Kernel.block_given?
19 assert_equal "no block", bg_try
21 assert_equal "block" do
25 assert_equal "block" do
32 # Kernel.eval is provided by the mruby-gem mrbgem. '15.3.1.2.3'
34 assert('Kernel.global_variables', '15.3.1.2.4') do
35 assert_equal Array, Kernel.global_variables.class
38 assert('Kernel.iterator?', '15.3.1.2.5') do
39 assert_false Kernel.iterator?
42 assert('Kernel.lambda', '15.3.1.2.6') do
50 assert_equal Proc, l.class
52 assert_equal Proc, m.class
55 assert('Kernel.loop', '15.3.1.2.8') do
66 assert('Kernel.p', '15.3.1.2.9') do
67 # TODO search for a way to test p to stdio
71 assert('Kernel.print', '15.3.1.2.10') do
72 # TODO search for a way to test print to stdio
76 assert('Kernel.puts', '15.3.1.2.11') do
77 # TODO search for a way to test puts to stdio
81 assert('Kernel.raise', '15.3.1.2.12') do
82 assert_raise RuntimeError do
86 assert_raise RuntimeError do
87 Kernel.raise RuntimeError.new
91 assert('Kernel#__id__', '15.3.1.3.3') do
92 assert_equal Fixnum, __id__.class
95 assert('Kernel#block_given?', '15.3.1.3.6') do
104 assert_false block_given?
105 assert_equal "no block", bg_try
106 assert_equal "block" do
109 assert_equal "block" do
116 assert('Kernel#class', '15.3.1.3.7') do
117 assert_equal Module, Kernel.class
120 assert('Kernel#clone', '15.3.1.3.8') do
121 class KernelCloneTest
135 a = KernelCloneTest.new
144 immutables = [ 1, :foo, true, false, nil ]
146 immutables.each do |i|
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)
163 assert_true d.frozen?
166 assert('Kernel#dup', '15.3.1.3.9') do
181 a = KernelDupTest.new
190 immutables = [ 1, :foo, true, false, nil ]
192 immutables.each do |i|
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)
209 assert('Kernel#dup class') do
210 assert_nothing_raised do
213 String.dup.new("a"*50)
217 # Kernel#eval is provided by mruby-eval mrbgem '15.3.1.3.12'
219 assert('Kernel#extend', '15.3.1.3.13') do
220 class Test4ExtendClass
223 module Test4ExtendModule
227 a = Test4ExtendClass.new
228 a.extend(Test4ExtendModule)
229 b = Test4ExtendClass.new
231 assert_true a.respond_to?(:test_method)
232 assert_false b.respond_to?(:test_method)
235 assert('Kernel#extend works on toplevel', '15.3.1.3.13') do
236 module Test4ExtendModule
239 # This would crash...
240 extend(Test4ExtendModule)
242 assert_true respond_to?(:test_method)
245 assert('Kernel#freeze') do
247 assert_equal obj, obj.freeze
248 assert_equal 0, 0.freeze
249 assert_equal :a, :a.freeze
252 assert('Kernel#global_variables', '15.3.1.3.14') do
253 assert_equal Array, global_variables.class
256 assert('Kernel#hash', '15.3.1.3.15') do
257 assert_equal hash, hash
260 assert('Kernel#inspect', '15.3.1.3.17') do
263 assert_equal String, s.class
264 assert_equal "main", s
267 assert('Kernel#is_a?', '15.3.1.3.24') do
268 assert_true is_a?(Kernel)
269 assert_false is_a?(Array)
271 assert_raise TypeError do
276 assert('Kernel#iterator?', '15.3.1.3.25') do
277 assert_false iterator?
280 assert('Kernel#kind_of?', '15.3.1.3.26') do
281 assert_true kind_of?(Kernel)
282 assert_false kind_of?(Array)
285 assert('Kernel#lambda', '15.3.1.3.27') do
293 assert_equal Proc, l.class
295 assert_equal Proc, m.class
298 assert('Kernel#loop', '15.3.1.3.29') do
309 assert('Kernel#method_missing', '15.3.1.3.30') do
311 def method_missing(sym)
315 mm_test = MMTestClass.new
316 assert_equal 'A call to no_method_named_this', mm_test.no_method_named_this
318 class SuperMMTestClass < MMTestClass
319 def no_super_method_named_this
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
326 class NoSuperMethodTestClass
327 def no_super_method_named_this
331 no_super_test = NoSuperMethodTestClass.new
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
340 a.no_method_named_this
341 rescue NoMethodError => e
342 assert_equal "undefined method 'no_method_named_this'", e.message
346 assert('Kernel#nil?', '15.3.1.3.32') do
350 assert('Kernel#object_id', '15.3.1.3.33') do
353 assert_not_equal a.object_id, b.object_id
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
365 # Kernel#p is defined in mruby-print mrbgem. '15.3.1.3.34'
367 # Kernel#print is defined in mruby-print mrbgem. '15.3.1.3.35'
369 # Kernel#puts is defined in mruby-print mrbgem. '15.3.1.3.39'
371 assert('Kernel#raise', '15.3.1.3.40') do
372 assert_raise RuntimeError do
376 assert_raise RuntimeError do
377 raise RuntimeError.new
381 assert('Kernel#remove_instance_variable', '15.3.1.3.41') do
382 class Test4RemoveInstanceVar
388 remove_instance_variable(:@var)
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) }
400 # Kernel#require is defined in mruby-require. '15.3.1.3.42'
402 assert('Kernel#respond_to?', '15.3.1.3.43') do
404 def valid_method; end
410 assert_raise TypeError do
411 Test4RespondTo.new.respond_to?(1)
414 assert_raise ArgumentError do
415 Test4RespondTo.new.respond_to?
418 assert_raise ArgumentError do
419 Test4RespondTo.new.respond_to? :a, true, :aa
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)
428 assert('Kernel#to_s', '15.3.1.3.46') do
429 assert_equal to_s.class, String
432 assert('Kernel#!=') do
437 assert_false (str1[1] != 'e')
438 assert_true (str1 != str3)
439 assert_false (str2 != str1)
442 # operator "!~" is defined in ISO Ruby 11.4.4.
443 assert('Kernel#!~') do
448 assert_false x !~ "x"
458 assert_false y !~ "y"
459 assert_false y !~ "z"
460 assert_true y !~ "not y"
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
470 assert_true Test4RespondToMissing.new.respond_to?(:a_method)
471 assert_false Test4RespondToMissing.new.respond_to?(:no_method)
474 assert('Kernel#global_variables') do
475 variables = global_variables
477 assert_equal variables.include?(:"$#{i}"), true
481 assert('stack extend') do
482 def recurse(count, stop)
483 return count if count > stop
484 recurse(count+1, stop)
487 assert_equal 6, recurse(0, 5)