summaryrefslogtreecommitdiff
path: root/test/-ext-
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-10-06 07:29:33 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-10-06 07:29:33 +0000
commit89fef02f1305887d97ddcf96cc4df9109ce414e2 (patch)
tree1af1003f121923e1b7970be82d2a8df7e7122bd7 /test/-ext-
parent60d83c5da49aade87ee4a45ca777637000f60cfb (diff)
* vm_eval.c (make_no_method_execption): extract from
raise_method_missing(). * vm_eval.c (send_internal): remove inadvertent symbol creation from public_send. based on a patch by Jeremy Evans <code AT jeremyevans.net> in [ruby-core:38576]. [Feature #5112] * vm_insnhelper.c (vm_call_method): remove inadvertent symbol creation from send and __send__, too. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33419 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/-ext-')
-rw-r--r--test/-ext-/symbol/test_inadvertent_creation.rb44
1 files changed, 44 insertions, 0 deletions
diff --git a/test/-ext-/symbol/test_inadvertent_creation.rb b/test/-ext-/symbol/test_inadvertent_creation.rb
new file mode 100644
index 00000000000..987cab56efd
--- /dev/null
+++ b/test/-ext-/symbol/test_inadvertent_creation.rb
@@ -0,0 +1,44 @@
+require 'test/unit'
+require "-test-/symbol/symbol"
+
+module Test_Symbol
+ class TestInadvertent < Test::Unit::TestCase
+ def self.noninterned_name
+ th = Thread.current.object_id.to_s(36)
+ begin
+ name = "#{th}.#{rand(0x1000).to_s(16)}.#{Time.now.usec}"
+ end while Bug::Symbol.interned?(name)
+ name
+ end
+
+ def setup
+ @obj = Object.new
+ end
+
+ Feature5112 = '[ruby-core:38576]'
+
+ def test_public_send
+ name = self.class.noninterned_name
+ e = assert_raise(NoMethodError) {@obj.public_send(name, Feature5112)}
+ assert_not_send([Bug::Symbol, :interned?, name])
+ assert_equal(name, e.name)
+ assert_equal([Feature5112], e.args)
+ end
+
+ def test_send
+ name = self.class.noninterned_name
+ e = assert_raise(NoMethodError) {@obj.send(name, Feature5112)}
+ assert_not_send([Bug::Symbol, :interned?, name])
+ assert_equal(name, e.name)
+ assert_equal([Feature5112], e.args)
+ end
+
+ def test___send__
+ name = self.class.noninterned_name
+ e = assert_raise(NoMethodError) {@obj.__send__(name, Feature5112)}
+ assert_not_send([Bug::Symbol, :interned?, name])
+ assert_equal(name, e.name)
+ assert_equal([Feature5112], e.args)
+ end
+ end
+end