summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorshugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-06 15:12:36 +0000
committershugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-06 15:12:36 +0000
commitd87b56c411304260b269e475a0c4b40dd30d1962 (patch)
treec6b76cbff048b69abe99f09147096424f2432cdf /test
parent2b0af2858978dcfb1e604d6f4dec43bac339d468 (diff)
* test/ruby/test_refinement.rb: fix some tests to use neither
Module#using nor Module#module_eval. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38241 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_refinement.rb160
1 files changed, 85 insertions, 75 deletions
diff --git a/test/ruby/test_refinement.rb b/test/ruby/test_refinement.rb
index 2b55a66d8a..c2fc4e94c6 100644
--- a/test/ruby/test_refinement.rb
+++ b/test/ruby/test_refinement.rb
@@ -60,42 +60,46 @@ class TestRefinement < Test::Unit::TestCase
end
end
- class FooExtClient
- using FooExt
+ eval <<-EOF, TOPLEVEL_BINDING
+ using TestRefinement::FooExt
- def self.invoke_x_on(foo)
- return foo.x
- end
+ class TestRefinement::FooExtClient
+ def self.invoke_x_on(foo)
+ return foo.x
+ end
- def self.invoke_y_on(foo)
- return foo.y
- end
+ def self.invoke_y_on(foo)
+ return foo.y
+ end
- def self.invoke_z_on(foo)
- return foo.z
- end
+ def self.invoke_z_on(foo)
+ return foo.z
+ end
- def self.send_z_on(foo)
- return foo.send(:z)
- end
+ def self.send_z_on(foo)
+ return foo.send(:z)
+ end
- def self.method_z(foo)
- return foo.method(:z)
- end
+ def self.method_z(foo)
+ return foo.method(:z)
+ end
- def self.invoke_call_x_on(foo)
- return foo.call_x
+ def self.invoke_call_x_on(foo)
+ return foo.call_x
+ end
end
- end
+ EOF
- class FooExtClient2
- using FooExt
- using FooExt2
+ eval <<-EOF, TOPLEVEL_BINDING
+ using TestRefinement::FooExt
+ using TestRefinement::FooExt2
- def self.invoke_y_on(foo)
- return foo.y
+ class TestRefinement::FooExtClient2
+ def self.invoke_y_on(foo)
+ return foo.y
+ end
end
- end
+ EOF
def test_override
foo = Foo.new
@@ -175,34 +179,36 @@ class TestRefinement < Test::Unit::TestCase
assert_equal("Foo#x", foo.x)
end
- def test_instance_eval
+ def test_instance_eval_without_refinement
foo = Foo.new
ext_client = FooExtClient.new
assert_equal("Foo#x", foo.x)
- assert_equal("FooExt#x", ext_client.instance_eval { foo.x })
+ assert_equal("Foo#x", ext_client.instance_eval { foo.x })
assert_equal("Foo#x", foo.x)
end
+ module FixnumSlashExt
+ refine Fixnum do
+ def /(other) quo(other) end
+ end
+ end
+
def test_override_builtin_method
- m = Module.new {
- refine Fixnum do
- def /(other) quo(other) end
- end
- }
assert_equal(0, 1 / 2)
- assert_equal(Rational(1, 2), m.module_eval { 1 / 2 })
+ assert_equal(Rational(1, 2), eval_using(FixnumSlashExt, "1 / 2"))
assert_equal(0, 1 / 2)
end
+ module FixnumPlusExt
+ refine Fixnum do
+ def self.method_added(*args); end
+ def +(other) "overriden" end
+ end
+ end
+
def test_override_builtin_method_with_method_added
- m = Module.new {
- refine Fixnum do
- def self.method_added(*args); end
- def +(other) "overriden" end
- end
- }
assert_equal(3, 1 + 2)
- assert_equal("overriden", m.module_eval { 1 + 2 })
+ assert_equal("overriden", eval_using(FixnumPlusExt, "1 + 2"))
assert_equal(3, 1 + 2)
end
@@ -217,25 +223,23 @@ class TestRefinement < Test::Unit::TestCase
assert_equal mod, result
end
- def test_refine_same_class_twice
- result1 = nil
- result2 = nil
- result3 = nil
- m = Module.new {
- result1 = refine(Fixnum) {
- def foo; return "foo" end
- }
- result2 = refine(Fixnum) {
- def bar; return "bar" end
- }
- result3 = refine(String) {
- def baz; return "baz" end
- }
+ module RefineSameClass
+ REFINEMENT1 = refine(Fixnum) {
+ def foo; return "foo" end
+ }
+ REFINEMENT2 = refine(Fixnum) {
+ def bar; return "bar" end
+ }
+ REFINEMENT3 = refine(String) {
+ def baz; return "baz" end
}
- assert_equal("foo", m.module_eval { 1.foo })
- assert_equal("bar", m.module_eval { 1.bar })
- assert_equal(result1, result2)
- assert_not_equal(result1, result3)
+ end
+
+ def test_refine_same_class_twice
+ assert_equal("foo", eval_using(RefineSameClass, "1.foo"))
+ assert_equal("bar", eval_using(RefineSameClass, "1.bar"))
+ assert_equal(RefineSameClass::REFINEMENT1, RefineSameClass::REFINEMENT2)
+ assert_not_equal(RefineSameClass::REFINEMENT1, RefineSameClass::REFINEMENT3)
end
def test_respond_to?
@@ -249,25 +253,25 @@ class TestRefinement < Test::Unit::TestCase
assert_equal(false, 1.respond_to?(:foo))
end
- def test_builtin_method_no_local_rebinding
- m = Module.new {
- refine String do
- def <=>(other) return 0 end
- end
- }
- assert_equal(false, m.module_eval { "1" >= "2" })
+ module StringCmpExt
+ refine String do
+ def <=>(other) return 0 end
+ end
+ end
- m2 = Module.new {
- refine Array do
- def each
- super do |i|
- yield 2 * i
- end
+ module ArrayEachExt
+ refine Array do
+ def each
+ super do |i|
+ yield 2 * i
end
end
- }
- a = [1, 2, 3]
- assert_equal(1, m2.module_eval { a.min })
+ end
+ end
+
+ def test_builtin_method_no_local_rebinding
+ assert_equal(false, eval_using(StringCmpExt, '"1" >= "2"'))
+ assert_equal(1, eval_using(ArrayEachExt, "[1, 2, 3].min"))
end
def test_module_inclusion
@@ -859,4 +863,10 @@ class TestRefinement < Test::Unit::TestCase
c = RedifineRefinedMethod::C.new
assert_equal("refined", RedifineRefinedMethod::M.module_eval { c.foo })
end
+
+ private
+
+ def eval_using(mod, s)
+ eval("using #{mod}; #{s}", TOPLEVEL_BINDING)
+ end
end