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-eval mrbgem. '15.3.1.2.3'
34 assert('Kernel.iterator?', '15.3.1.2.5') do
35 assert_false Kernel.iterator?
38 assert('Kernel.lambda', '15.3.1.2.6') do
46 assert_equal Proc, l.class
48 assert_equal Proc, m.class
51 assert('Kernel.loop', '15.3.1.2.8') do
62 # Kernel.p is provided by the mruby-print mrbgem. '15.3.1.2.9'
64 # Kernel.print is provided by the mruby-print mrbgem. '15.3.1.2.10'
66 # Kernel.puts is provided by the mruby-print mrbgem. '15.3.1.2.11'
68 assert('Kernel.raise', '15.3.1.2.12') do
69 assert_raise RuntimeError do
73 assert_raise RuntimeError do
74 Kernel.raise RuntimeError.new
78 assert('Kernel#__id__', '15.3.1.3.3') do
79 assert_equal Fixnum, __id__.class
82 assert('Kernel#__send__', '15.3.1.3.4') do
84 l = __send__(:lambda) do
89 assert_equal Proc, l.class
91 assert_true __send__(:respond_to?, :nil?)
92 # test without argument and without block
93 assert_equal String, __send__(:to_s).class
95 args = [:respond_to?, :nil?]
96 assert_true __send__(*args)
97 assert_equal [:respond_to?, :nil?], args
100 assert('Kernel#block_given?', '15.3.1.3.6') do
109 assert_false block_given?
110 assert_equal "no block", bg_try
111 assert_equal "block" do
114 assert_equal "block" do
121 -> { block_given? }[]
124 assert_false bg_try_in_block
125 assert_true bg_try_in_block{}
128 assert('Kernel#class', '15.3.1.3.7') do
129 assert_equal Module, Kernel.class
132 assert('Kernel#clone', '15.3.1.3.8') do
133 class KernelCloneTest
147 a = KernelCloneTest.new
156 immutables = [ 1, :foo, true, false, nil ]
158 immutables.each do |i|
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)
175 assert_true d.frozen?
178 assert('Kernel#dup', '15.3.1.3.9') do
193 a = KernelDupTest.new
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)
210 assert('Kernel#dup class') do
211 assert_nothing_raised do
214 String.dup.new("a"*50)
218 # Kernel#eval is provided by mruby-eval mrbgem '15.3.1.3.12'
220 assert('Kernel#extend', '15.3.1.3.13') do
221 class Test4ExtendClass
224 module Test4ExtendModule
228 a = Test4ExtendClass.new
229 a.extend(Test4ExtendModule)
230 b = Test4ExtendClass.new
232 assert_true a.respond_to?(:test_method)
233 assert_false b.respond_to?(:test_method)
235 assert_raise(FrozenError) { Object.new.freeze.extend(Test4ExtendModule) }
236 assert_raise(FrozenError, TypeError) { :sym.extend(Test4ExtendModule) }
239 assert('Kernel#extend works on toplevel', '15.3.1.3.13') do
240 module Test4ExtendModule
243 # This would crash...
244 extend(Test4ExtendModule)
246 assert_true respond_to?(:test_method)
249 assert('Kernel#freeze') do
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
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?
273 assert('Kernel#hash', '15.3.1.3.15') do
274 assert_equal hash, hash
277 assert('Kernel#inspect', '15.3.1.3.17') do
280 assert_equal String, s.class
281 assert_equal "main", s
284 assert('Kernel#is_a?', '15.3.1.3.24') do
285 assert_true is_a?(Kernel)
286 assert_false is_a?(Array)
288 assert_raise TypeError do
293 assert('Kernel#iterator?', '15.3.1.3.25') do
294 assert_false iterator?
297 assert('Kernel#kind_of?', '15.3.1.3.26') do
298 assert_true kind_of?(Kernel)
299 assert_false kind_of?(Array)
302 assert('Kernel#lambda', '15.3.1.3.27') do
310 assert_equal Proc, l.class
312 assert_equal Proc, m.class
315 assert('Kernel#loop', '15.3.1.3.29') do
326 assert('Kernel#method_missing', '15.3.1.3.30') do
328 def method_missing(sym)
332 mm_test = MMTestClass.new
333 assert_equal 'A call to no_method_named_this', mm_test.no_method_named_this
335 class SuperMMTestClass < MMTestClass
336 def no_super_method_named_this
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
343 class NoSuperMethodTestClass
344 def no_super_method_named_this
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
355 msg = "undefined method 'no_method_named_this'"
356 assert_raise_with_message(NoMethodError, msg) do
357 a.no_method_named_this
361 assert('Kernel#nil?', '15.3.1.3.32') do
365 assert('Kernel#object_id', '15.3.1.3.33') do
368 assert_not_equal a.object_id, b.object_id
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
380 # Kernel#p is defined in mruby-print mrbgem. '15.3.1.3.34'
382 # Kernel#print is defined in mruby-print mrbgem. '15.3.1.3.35'
384 # Kernel#puts is defined in mruby-print mrbgem. '15.3.1.3.39'
386 assert('Kernel#raise', '15.3.1.3.40') do
387 assert_raise RuntimeError do
391 assert_raise RuntimeError do
392 raise RuntimeError.new
396 assert('Kernel#remove_instance_variable', '15.3.1.3.41') do
397 class Test4RemoveInstanceVar
403 remove_instance_variable(:@var)
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) }
417 # Kernel#require is defined in mruby-require. '15.3.1.3.42'
419 assert('Kernel#respond_to?', '15.3.1.3.43') do
421 def valid_method; end
427 assert_raise TypeError do
428 Test4RespondTo.new.respond_to?(1)
431 assert_raise ArgumentError do
432 Test4RespondTo.new.respond_to?
435 assert_raise ArgumentError do
436 Test4RespondTo.new.respond_to? :a, true, :aa
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)
445 assert('Kernel#to_s', '15.3.1.3.46') do
446 assert_equal to_s.class, String
449 assert('Kernel#!=') do
454 assert_false (str1[1] != 'e')
455 assert_true (str1 != str3)
456 assert_false (str2 != str1)
459 # operator "!~" is defined in ISO Ruby 11.4.4.
460 assert('Kernel#!~') do
465 assert_false x !~ "x"
475 assert_false y !~ "y"
476 assert_false y !~ "z"
477 assert_true y !~ "not y"
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
487 assert_true Test4RespondToMissing.new.respond_to?(:a_method)
488 assert_false Test4RespondToMissing.new.respond_to?(:no_method)
491 assert('stack extend') do
492 def recurse(count, stop)
493 return count if count > stop
494 recurse(count+1, stop)
497 assert_equal 6, recurse(0, 5)