summaryrefslogtreecommitdiff
path: root/trunk/test/ruby/test_method.rb
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/test/ruby/test_method.rb')
-rw-r--r--trunk/test/ruby/test_method.rb224
1 files changed, 0 insertions, 224 deletions
diff --git a/trunk/test/ruby/test_method.rb b/trunk/test/ruby/test_method.rb
deleted file mode 100644
index d978050dc8..0000000000
--- a/trunk/test/ruby/test_method.rb
+++ /dev/null
@@ -1,224 +0,0 @@
-require 'test/unit'
-require_relative 'envutil'
-
-class TestMethod < Test::Unit::TestCase
- def setup
- @verbose = $VERBOSE
- $VERBOSE = nil
- end
-
- def teardown
- $VERBOSE = @verbose
- end
-
- def m0() end
- def m1(a) end
- def m2(a, b) end
- def mo1(a = nil, &b) end
- def mo2(a, b = nil) end
- def mo3(*a) end
- def mo4(a, *b, &c) end
- def mo5(a, *b, c) end
- def mo6(a, *b, c, &d) end
-
- class Base
- def foo() :base end
- end
- class Derived < Base
- def foo() :derived end
- end
-
- def test_arity
- assert_equal(0, method(:m0).arity)
- assert_equal(1, method(:m1).arity)
- assert_equal(2, method(:m2).arity)
- assert_equal(-1, method(:mo1).arity)
- assert_equal(-2, method(:mo2).arity)
- assert_equal(-1, method(:mo3).arity)
- assert_equal(-2, method(:mo4).arity)
- assert_equal(-3, method(:mo5).arity)
- assert_equal(-3, method(:mo6).arity)
- end
-
- def test_unbind
- assert_equal(:derived, Derived.new.foo)
- um = Derived.new.method(:foo).unbind
- assert_instance_of(UnboundMethod, um)
- Derived.class_eval do
- def foo() :changed end
- end
- assert_equal(:changed, Derived.new.foo)
- assert_equal(:derived, um.bind(Derived.new).call)
- assert_raise(TypeError) do
- um.bind(Base.new)
- end
- end
-
- def test_callee
- assert_equal(:test_callee, __method__)
- assert_equal(:m, Class.new {def m; __method__; end}.new.m)
- assert_equal(:m, Class.new {def m; tap{return __method__}; end}.new.m)
- assert_equal(:m, Class.new {define_method(:m) {__method__}}.new.m)
- assert_equal(:m, Class.new {define_method(:m) {tap{return __method__}}}.new.m)
- assert_nil(eval("class TestCallee; __method__; end"))
- end
-
- def test_body
- o = Object.new
- def o.foo; end
- assert_nothing_raised { RubyVM::InstructionSequence.disasm(o.method(:foo)) }
- end
-
- def test_new
- c1 = Class.new
- c1.class_eval { def foo; :foo; end }
- c2 = Class.new(c1)
- c2.class_eval { private :foo }
- o = c2.new
- o.extend(Module.new)
- assert_raise(NameError) { o.method(:bar) }
- assert_raise(NameError) { o.public_method(:foo) }
- assert_equal(:foo, o.method(:foo).call)
- end
-
- def test_eq
- o = Object.new
- class << o
- def foo; end
- alias bar foo
- def baz; end
- end
- assert_not_equal(o.method(:foo), nil)
- m = o.method(:foo)
- def m.foo; end
- assert_not_equal(o.method(:foo), m)
- assert_equal(o.method(:foo), o.method(:foo))
- assert_equal(o.method(:foo), o.method(:bar))
- assert_not_equal(o.method(:foo), o.method(:baz))
- end
-
- def test_hash
- o = Object.new
- def o.foo; end
- assert_kind_of(Integer, o.method(:foo).hash)
- end
-
- def test_receiver_name_owner
- o = Object.new
- def o.foo; end
- m = o.method(:foo)
- assert_equal(o, m.receiver)
- assert_equal(:foo, m.name)
- assert_equal(class << o; self; end, m.owner)
- assert_equal(:foo, m.unbind.name)
- assert_equal(class << o; self; end, m.unbind.owner)
- end
-
- def test_instance_method
- c = Class.new
- c.class_eval do
- def foo; :foo; end
- private :foo
- end
- o = c.new
- o.method(:foo).unbind
- assert_raise(NoMethodError) { o.foo }
- c.instance_method(:foo).bind(o)
- assert_equal(:foo, o.instance_eval { foo })
- assert_raise(NameError) { c.public_instance_method(:foo) }
- def o.bar; end
- m = o.method(:bar).unbind
- assert_raise(TypeError) { m.bind(Object.new) }
- end
-
- def test_define_method
- c = Class.new
- c.class_eval { def foo; :foo; end }
- o = c.new
- def o.bar; :bar; end
- assert_raise(TypeError) do
- c.class_eval { define_method(:foo, :foo) }
- end
- assert_raise(ArgumentError) do
- c.class_eval { define_method }
- end
- c2 = Class.new(c)
- c2.class_eval { define_method(:baz, o.method(:foo)) }
- assert_equal(:foo, c2.new.baz)
- assert_raise(TypeError) do
- Class.new.class_eval { define_method(:foo, o.method(:foo)) }
- end
- assert_raise(TypeError) do
- Class.new.class_eval { define_method(:bar, o.method(:bar)) }
- end
-
- o = Object.new
- def o.foo(c)
- c.class_eval { define_method(:foo) }
- end
- c = Class.new
- o.foo(c) { :foo }
- assert_equal(:foo, c.new.foo)
-
- o = Object.new
- o.instance_eval { define_singleton_method(:foo) { :foo } }
- assert_equal(:foo, o.foo)
- end
-
- def test_clone
- o = Object.new
- def o.foo; :foo; end
- m = o.method(:foo)
- def m.bar; :bar; end
- assert_equal(:foo, m.clone.call)
- assert_equal(:bar, m.clone.bar)
- end
-
- def test_call
- o = Object.new
- def o.foo; p 1; end
- def o.bar(x); x; end
- m = o.method(:foo)
- m.taint
- assert_raise(SecurityError) { m.call }
- end
-
- def test_inspect
- o = Object.new
- def o.foo; end
- m = o.method(:foo)
- assert_equal("#<Method: #{ o.inspect }.foo>", m.inspect)
- m = o.method(:foo)
- assert_equal("#<UnboundMethod: #{ class << o; self; end.inspect }#foo>", m.unbind.inspect)
-
- c = Class.new
- c.class_eval { def foo; end; }
- m = c.new.method(:foo)
- assert_equal("#<Method: #{ c.inspect }#foo>", m.inspect)
- m = c.instance_method(:foo)
- assert_equal("#<UnboundMethod: #{ c.inspect }#foo>", m.inspect)
-
- c2 = Class.new(c)
- c2.class_eval { private :foo }
- m2 = c2.new.method(:foo)
- assert_equal("#<Method: #{ c2.inspect }(#{ c.inspect })#foo>", m2.inspect)
- end
-
- def test_callee_top_level
- assert_in_out_err([], "p __callee__", %w(nil), [])
- end
-
- def test_caller_negative_level
- assert_raise(ArgumentError) { caller(-1) }
- end
-
- def test_attrset_ivar
- c = Class.new
- c.class_eval { attr_accessor :foo }
- o = c.new
- o.method(:foo=).call(42)
- assert_equal(42, o.foo)
- assert_raise(ArgumentError) { o.method(:foo=).call(1, 2, 3) }
- assert_raise(ArgumentError) { o.method(:foo).call(1) }
- end
-end