mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* iseq.c (simple_default_value): extracts simplest default
argument value. * iseq.c (rb_iseq_parameters): returns parameter list. * proc.c (get_proc_iseq, get_method_iseq): handles ifunc and bmethod. * proc.c (rb_proc_parameters, rb_method_parameters): added Proc#parameters and Method#parameters. [ruby-core:19759] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20384 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
4d3f3af836
commit
46e3b0fe7b
5 changed files with 273 additions and 2 deletions
|
@ -20,6 +20,8 @@ class TestMethod < Test::Unit::TestCase
|
|||
def mo4(a, *b, &c) end
|
||||
def mo5(a, *b, c) end
|
||||
def mo6(a, *b, c, &d) end
|
||||
def mo7(a, b = nil, *c, d, &e) end
|
||||
def ma1((a), &b) end
|
||||
|
||||
class Base
|
||||
def foo() :base end
|
||||
|
@ -237,4 +239,72 @@ class TestMethod < Test::Unit::TestCase
|
|||
assert !M.public_instance_methods.include?(:func), 'module methods are private by default'
|
||||
assert M.public_instance_methods.include?(:meth), 'normal methods are public by default'
|
||||
end
|
||||
|
||||
define_method(:pm0) {||}
|
||||
define_method(:pm1) {|a|}
|
||||
define_method(:pm2) {|a, b|}
|
||||
define_method(:pmo1) {|a = nil, &b|}
|
||||
define_method(:pmo2) {|a, b = nil|}
|
||||
define_method(:pmo3) {|*a|}
|
||||
define_method(:pmo4) {|a, *b, &c|}
|
||||
define_method(:pmo5) {|a, *b, c|}
|
||||
define_method(:pmo6) {|a, *b, c, &d|}
|
||||
define_method(:pmo7) {|a, b = nil, *c, d, &e|}
|
||||
define_method(:pma1) {|(a), &b|}
|
||||
|
||||
def test_bound_parameters
|
||||
assert_equal([], method(:m0).parameters)
|
||||
assert_equal([[:req, :a]], method(:m1).parameters)
|
||||
assert_equal([[:req, :a], [:req, :b]], method(:m2).parameters)
|
||||
assert_equal([[:opt, :a, nil], [:block, :b]], method(:mo1).parameters)
|
||||
assert_equal([[:req, :a], [:opt, :b, nil]], method(:mo2).parameters)
|
||||
assert_equal([[:rest, :a]], method(:mo3).parameters)
|
||||
assert_equal([[:req, :a], [:rest, :b], [:block, :c]], method(:mo4).parameters)
|
||||
assert_equal([[:req, :a], [:rest, :b], [:req, :c]], method(:mo5).parameters)
|
||||
assert_equal([[:req, :a], [:rest, :b], [:req, :c], [:block, :d]], method(:mo6).parameters)
|
||||
assert_equal([[:req, :a], [:opt, :b, nil], [:rest, :c], [:req, :d], [:block, :e]], method(:mo7).parameters)
|
||||
assert_equal([[:req], [:block, :b]], method(:ma1).parameters)
|
||||
end
|
||||
|
||||
def test_unbound_parameters
|
||||
assert_equal([], self.class.instance_method(:m0).parameters)
|
||||
assert_equal([[:req, :a]], self.class.instance_method(:m1).parameters)
|
||||
assert_equal([[:req, :a], [:req, :b]], self.class.instance_method(:m2).parameters)
|
||||
assert_equal([[:opt, :a, nil], [:block, :b]], self.class.instance_method(:mo1).parameters)
|
||||
assert_equal([[:req, :a], [:opt, :b, nil]], self.class.instance_method(:mo2).parameters)
|
||||
assert_equal([[:rest, :a]], self.class.instance_method(:mo3).parameters)
|
||||
assert_equal([[:req, :a], [:rest, :b], [:block, :c]], self.class.instance_method(:mo4).parameters)
|
||||
assert_equal([[:req, :a], [:rest, :b], [:req, :c]], self.class.instance_method(:mo5).parameters)
|
||||
assert_equal([[:req, :a], [:rest, :b], [:req, :c], [:block, :d]], self.class.instance_method(:mo6).parameters)
|
||||
assert_equal([[:req, :a], [:opt, :b, nil], [:rest, :c], [:req, :d], [:block, :e]], self.class.instance_method(:mo7).parameters)
|
||||
assert_equal([[:req], [:block, :b]], self.class.instance_method(:ma1).parameters)
|
||||
end
|
||||
|
||||
def test_bmethod_bound_parameters
|
||||
assert_equal([], method(:pm0).parameters)
|
||||
assert_equal([[:req, :a]], method(:pm1).parameters)
|
||||
assert_equal([[:req, :a], [:req, :b]], method(:pm2).parameters)
|
||||
assert_equal([[:opt, :a, nil], [:block, :b]], method(:pmo1).parameters)
|
||||
assert_equal([[:req, :a], [:opt, :b, nil]], method(:pmo2).parameters)
|
||||
assert_equal([[:rest, :a]], method(:pmo3).parameters)
|
||||
assert_equal([[:req, :a], [:rest, :b], [:block, :c]], method(:pmo4).parameters)
|
||||
assert_equal([[:req, :a], [:rest, :b], [:req, :c]], method(:pmo5).parameters)
|
||||
assert_equal([[:req, :a], [:rest, :b], [:req, :c], [:block, :d]], method(:pmo6).parameters)
|
||||
assert_equal([[:req, :a], [:opt, :b, nil], [:rest, :c], [:req, :d], [:block, :e]], method(:pmo7).parameters)
|
||||
assert_equal([[:req], [:block, :b]], method(:pma1).parameters)
|
||||
end
|
||||
|
||||
def test_bmethod_unbound_parameters
|
||||
assert_equal([], self.class.instance_method(:pm0).parameters)
|
||||
assert_equal([[:req, :a]], self.class.instance_method(:pm1).parameters)
|
||||
assert_equal([[:req, :a], [:req, :b]], self.class.instance_method(:pm2).parameters)
|
||||
assert_equal([[:opt, :a, nil], [:block, :b]], self.class.instance_method(:pmo1).parameters)
|
||||
assert_equal([[:req, :a], [:opt, :b, nil]], self.class.instance_method(:pmo2).parameters)
|
||||
assert_equal([[:rest, :a]], self.class.instance_method(:pmo3).parameters)
|
||||
assert_equal([[:req, :a], [:rest, :b], [:block, :c]], self.class.instance_method(:pmo4).parameters)
|
||||
assert_equal([[:req, :a], [:rest, :b], [:req, :c]], self.class.instance_method(:pmo5).parameters)
|
||||
assert_equal([[:req, :a], [:rest, :b], [:req, :c], [:block, :d]], self.class.instance_method(:pmo6).parameters)
|
||||
assert_equal([[:req, :a], [:opt, :b, nil], [:rest, :c], [:req, :d], [:block, :e]], self.class.instance_method(:pmo7).parameters)
|
||||
assert_equal([[:req], [:block, :b]], self.class.instance_method(:pma1).parameters)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue