summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-kernel-ext/test/kernel.rb
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-01-16 17:11:47 +0900
committerGitHub <[email protected]>2017-01-16 17:11:47 +0900
commitc59ef59ad9a779473f52d23411192aa392741162 (patch)
tree864011885142c7053e73fd1221e3fb59e0af8d3a /mrbgems/mruby-kernel-ext/test/kernel.rb
parent8d61f2120c7b3c637ce61df4c13e4b066029a4d5 (diff)
parent59d9f313dfc706789b303ec259fb88ff19207ddc (diff)
downloadmruby-c59ef59ad9a779473f52d23411192aa392741162.tar.gz
mruby-c59ef59ad9a779473f52d23411192aa392741162.zip
Merge pull request #3399 from ksss/caller
Implement Kernel.#caller
Diffstat (limited to 'mrbgems/mruby-kernel-ext/test/kernel.rb')
-rw-r--r--mrbgems/mruby-kernel-ext/test/kernel.rb29
1 files changed, 29 insertions, 0 deletions
diff --git a/mrbgems/mruby-kernel-ext/test/kernel.rb b/mrbgems/mruby-kernel-ext/test/kernel.rb
index cc6af13a3..dd7cea86a 100644
--- a/mrbgems/mruby-kernel-ext/test/kernel.rb
+++ b/mrbgems/mruby-kernel-ext/test/kernel.rb
@@ -3,6 +3,35 @@ assert('Kernel.fail, Kernel#fail') do
assert_raise(RuntimeError) { Kernel.fail }
end
+assert('Kernel.caller, Kernel#caller') do
+ skip "backtrace isn't available" if caller(0).empty?
+
+ c = Class.new do
+ def foo(*args)
+ caller(*args)
+ end
+
+ def bar(*args)
+ foo(*args)
+ end
+
+ def baz(*args)
+ bar(*args)
+ end
+ end
+ assert_equal "#bar", c.new.baz[0][-4..-1]
+ assert_equal "#foo", c.new.baz(0)[0][-4..-1]
+ assert_equal "#bar", c.new.baz(1)[0][-4..-1]
+ assert_equal "#baz", c.new.baz(2)[0][-4..-1]
+ assert_equal ["#foo", "#bar"], c.new.baz(0, 2).map { |i| i[-4..-1] }
+ assert_equal ["#bar", "#baz"], c.new.baz(1..2).map { |i| i[-4..-1] }
+ assert_nil c.new.baz(10..20)
+ assert_raise(ArgumentError) { c.new.baz(-1) }
+ assert_raise(ArgumentError) { c.new.baz(-1, 1) }
+ assert_raise(ArgumentError) { c.new.baz(1, -1) }
+ assert_raise(TypeError) { c.new.baz(nil) }
+end
+
assert('Kernel#__method__') do
assert_equal(:m, Class.new {def m; __method__; end}.new.m)
assert_equal(:m, Class.new {define_method(:m) {__method__}}.new.m)