summaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/t/codegen.rb9
-rw-r--r--test/t/kernel.rb15
-rw-r--r--test/t/nomethoderror.rb31
-rw-r--r--test/t/proc.rb16
4 files changed, 71 insertions, 0 deletions
diff --git a/test/t/codegen.rb b/test/t/codegen.rb
index 1ac689a82..bb0f5c306 100644
--- a/test/t/codegen.rb
+++ b/test/t/codegen.rb
@@ -54,3 +54,12 @@ A
B
assert_equal "\n", a
end
+
+assert('splat in case splat') do
+ a = *case
+ when 0
+ * = 1
+ end
+
+ assert_equal [1], a
+end
diff --git a/test/t/kernel.rb b/test/t/kernel.rb
index d240e59dc..e59bd6a10 100644
--- a/test/t/kernel.rb
+++ b/test/t/kernel.rb
@@ -520,6 +520,21 @@ assert('Kernel#to_s', '15.3.1.3.46') do
assert_equal to_s.class, String
end
+assert('Kernel#to_s on primitives') do
+ begin
+ Fixnum.alias_method :to_s_, :to_s
+ Fixnum.remove_method :to_s
+
+ assert_nothing_raised do
+ # segfaults if mrb_cptr is used
+ 1.to_s
+ end
+ ensure
+ Fixnum.alias_method :to_s, :to_s_
+ Fixnum.remove_method :to_s_
+ end
+end
+
assert('Kernel.local_variables', '15.3.1.2.7') do
a, b = 0, 1
a += b
diff --git a/test/t/nomethoderror.rb b/test/t/nomethoderror.rb
index 5fed79689..1c09bc20e 100644
--- a/test/t/nomethoderror.rb
+++ b/test/t/nomethoderror.rb
@@ -20,3 +20,34 @@ assert('NoMethodError#args', '15.2.32.2.1') do
end
end
end
+
+assert('Can still raise when BasicObject#method_missing is removed') do
+ assert_raise(NoMethodError) do
+ begin
+ BasicObject.alias_method(:old_method_missing, :method_missing)
+ BasicObject.remove_method(:method_missing)
+ 1.__send__(:foo)
+ ensure
+ BasicObject.alias_method(:method_missing, :old_method_missing)
+ BasicObject.remove_method(:old_method_missing)
+ end
+ end
+end
+
+assert('Can still call super when BasicObject#method_missing is removed') do
+ assert_raise(NoMethodError) do
+ class A
+ def foo
+ super
+ end
+ end
+ begin
+ BasicObject.alias_method(:old_method_missing, :method_missing)
+ BasicObject.remove_method(:method_missing)
+ A.new.foo
+ ensure
+ BasicObject.alias_method(:method_missing, :old_method_missing)
+ BasicObject.remove_method(:old_method_missing)
+ end
+ end
+end
diff --git a/test/t/proc.rb b/test/t/proc.rb
index bc9821f7c..29530e8dd 100644
--- a/test/t/proc.rb
+++ b/test/t/proc.rb
@@ -163,3 +163,19 @@ assert('&obj call to_proc if defined') do
assert_raise(TypeError){ mock(&(Object.new)) }
end
+
+assert('initialize_copy works when initialize is removed') do
+ begin
+ Proc.alias_method(:old_initialize, :initialize)
+ Proc.remove_method(:initialize)
+
+ a = Proc.new {}
+ b = Proc.new {}
+ assert_nothing_raised do
+ a.initialize_copy(b)
+ end
+ ensure
+ Proc.alias_method(:initialize, :old_initialize)
+ Proc.remove_method(:old_initialize)
+ end
+end