[前][次][番号順一覧][スレッド一覧][生データ]

yarv-diff:185

From: ko1 atdot.net
Date: 30 Dec 2005 04:13:34 -0000
Subject: [yarv-diff:185] r343 - in trunk: . test/ruby

Author: aamine
Date: 2005-12-30 13:13:33 +0900 (Fri, 30 Dec 2005)
New Revision: 343

Modified:
   trunk/ChangeLog
   trunk/test/ruby/test_eval.rb
Log:
* test/ruby/test_eval.rb: more tests for module_eval/instance_eval.


Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2005-12-29 20:12:32 UTC (rev 342)
+++ trunk/ChangeLog	2005-12-30 04:13:33 UTC (rev 343)
@@ -4,6 +4,12 @@
 #  from Mon, 03 May 2004 01:24:19 +0900
 #
 
+2005-12-30(Fri) 13:12:28 +0900  Minero Aoki  <aamine loveruby.net>
+
+	* test/ruby/test_eval.rb: more tests for
+	  module_eval/instance_eval.
+
+
 2005-12-30(Fri) 05:06:49 +0900  Koichi Sasada  <ko1 atdot.net>
 
 	* common.mk : add dependency (yarvcore.h) for gc.c

Modified: trunk/test/ruby/test_eval.rb
===================================================================
--- trunk/test/ruby/test_eval.rb	2005-12-29 20:12:32 UTC (rev 342)
+++ trunk/test/ruby/test_eval.rb	2005-12-30 04:13:33 UTC (rev 343)
@@ -7,7 +7,212 @@
 end
 
 class TestEval < Test::Unit::TestCase
-  # eval with binding
+
+  @ivar = 12
+  @@cvar = 13
+  $gvar__eval = 14
+  Const = 15
+
+  def test_eval_basic
+    assert_equal nil,   eval("nil")
+    assert_equal true,  eval("true")
+    assert_equal false, eval("false")
+    assert_equal self,  eval("self")
+    assert_equal 1,     eval("1")
+    assert_equal :sym,  eval(":sym")
+
+    assert_equal 11,    eval("11")
+    @ivar = 12
+    assert_equal 12,    eval("@ivar")
+    assert_equal 13,    eval("@@cvar")
+    assert_equal 14,    eval("$gvar__eval")
+    assert_equal 15,    eval("Const")
+
+    assert_equal 16,    eval("7 + 9")
+    assert_equal 17,    eval("17.to_i")
+    assert_equal "18",  eval(%q("18"))
+    assert_equal "19",  eval(%q("1#{9}"))
+
+    1.times {
+      assert_equal 12,  eval("@ivar")
+      assert_equal 13,  eval("@@cvar")
+      assert_equal 14,  eval("$gvar__eval")
+      assert_equal 15,  eval("Const")
+    }
+  end
+
+  def test_eval_binding_basic
+    assert_equal nil,   eval("nil", binding())
+    assert_equal true,  eval("true", binding())
+    assert_equal false, eval("false", binding())
+    assert_equal self,  eval("self", binding())
+    assert_equal 1,     eval("1", binding())
+    assert_equal :sym,  eval(":sym", binding())
+
+    assert_equal 11,    eval("11", binding())
+    @ivar = 12
+    assert_equal 12,    eval("@ivar", binding())
+    assert_equal 13,    eval("@@cvar", binding())
+    assert_equal 14,    eval("$gvar__eval", binding())
+    assert_equal 15,    eval("Const", binding())
+
+    assert_equal 16,    eval("7 + 9", binding())
+    assert_equal 17,    eval("17.to_i", binding())
+    assert_equal "18",  eval(%q("18"), binding())
+    assert_equal "19",  eval(%q("1#{9}"), binding())
+
+    1.times {
+      assert_equal 12,  eval("@ivar")
+      assert_equal 13,  eval("@@cvar")
+      assert_equal 14,  eval("$gvar__eval")
+      assert_equal 15,  eval("Const")
+    }
+  end
+
+  def test_module_eval_string_basic
+    c = self.class
+    assert_equal nil,   c.module_eval("nil")
+    assert_equal true,  c.module_eval("true")
+    assert_equal false, c.module_eval("false")
+    assert_equal c,     c.module_eval("self")
+    assert_equal :sym,  c.module_eval(":sym")
+    assert_equal 11,    c.module_eval("11")
+    @ivar = 12
+    assert_equal 12,    c.module_eval("@ivar")
+    assert_equal 13,    c.module_eval("@@cvar")
+    assert_equal 14,    c.module_eval("$gvar__eval")
+    assert_equal 15,    c.module_eval("Const")
+    assert_equal 16,    c.module_eval("7 + 9")
+    assert_equal 17,    c.module_eval("17.to_i")
+    assert_equal "18",  c.module_eval(%q("18"))
+    assert_equal "19",  c.module_eval(%q("1#{9}"))
+
+    @ivar = 12
+    1.times {
+      assert_equal 12,  c.module_eval("@ivar")
+      assert_equal 13,  c.module_eval("@@cvar")
+      assert_equal 14,  c.module_eval("$gvar__eval")
+      assert_equal 15,  c.module_eval("Const")
+    }
+  end
+
+  def test_module_eval_block_basic
+    c = self.class
+    assert_equal nil,   c.module_eval { nil }
+    assert_equal true,  c.module_eval { true }
+    assert_equal false, c.module_eval { false }
+    assert_equal c,     c.module_eval { self }
+    assert_equal :sym,  c.module_eval { :sym }
+    assert_equal 11,    c.module_eval { 11 }
+    @ivar = 12
+    assert_equal 12,    c.module_eval { @ivar }
+    assert_equal 13,    c.module_eval { @@cvar }
+    assert_equal 14,    c.module_eval { $gvar__eval }
+    assert_equal 15,    c.module_eval { Const }
+    assert_equal 16,    c.module_eval { 7 + 9 }
+    assert_equal 17,    c.module_eval { "17".to_i }
+    assert_equal "18",  c.module_eval { "18" }
+    assert_equal "19",  c.module_eval { "1#{9}" }
+
+    @ivar = 12
+    1.times {
+      assert_equal 12,  c.module_eval { @ivar }
+      assert_equal 13,  c.module_eval { @@cvar }
+      assert_equal 14,  c.module_eval { $gvar__eval }
+      assert_equal 15,  c.module_eval { Const }
+    }
+  end
+
+  def forall_TYPE(mid)
+    objects = [Object.new, [], nil, true, false, 77, :sym]
+    objects.each do |obj|
+      obj.instance_variable_set :@ivar, 12
+      obj.class.class_variable_set :@@cvar, 13
+          # Use same value with env. See also test_instance_variable_cvar.
+      obj.class.const_set :Const, 15 unless obj.class.const_defined?(:Const)
+      funcall mid, obj
+    end
+  end
+
+  def test_instance_eval_string_basic
+    forall_TYPE :instance_eval_string_basic_i
+  end
+
+  def instance_eval_string_basic_i(o)
+    assert_equal nil,   o.instance_eval("nil")
+    assert_equal true,  o.instance_eval("true")
+    assert_equal false, o.instance_eval("false")
+    assert_equal o,     o.instance_eval("self")
+    assert_equal 1,     o.instance_eval("1")
+    assert_equal :sym,  o.instance_eval(":sym")
+
+    assert_equal 11,    o.instance_eval("11")
+    assert_equal 12,    o.instance_eval("@ivar")
+    assert_equal 13,    o.instance_eval("@@cvar")
+    assert_equal 14,    o.instance_eval("$gvar__eval")
+    assert_equal 15,    o.instance_eval("Const")
+    assert_equal 16,    o.instance_eval("7 + 9")
+    assert_equal 17,    o.instance_eval("17.to_i")
+    assert_equal "18",  o.instance_eval(%q("18"))
+    assert_equal "19",  o.instance_eval(%q("1#{9}"))
+
+    1.times {
+      assert_equal 12,  o.instance_eval("@ivar")
+      assert_equal 13,  o.instance_eval("@@cvar")
+      assert_equal 14,  o.instance_eval("$gvar__eval")
+      assert_equal 15,  o.instance_eval("Const")
+    }
+  end
+
+  def test_instance_eval_block_basic
+    forall_TYPE :instance_eval_block_basic_i
+  end
+
+  def instance_eval_block_basic_i(o)
+    assert_equal nil,   o.instance_eval { nil }
+    assert_equal true,  o.instance_eval { true }
+    assert_equal false, o.instance_eval { false }
+    assert_equal o,     o.instance_eval { self }
+    assert_equal 1,     o.instance_eval { 1 }
+    assert_equal :sym,  o.instance_eval { :sym }
+
+    assert_equal 11,    o.instance_eval { 11 }
+    assert_equal 12,    o.instance_eval { @ivar }
+    assert_equal 13,    o.instance_eval { @@cvar }
+    assert_equal 14,    o.instance_eval { $gvar__eval }
+    assert_equal 15,    o.instance_eval { Const }
+    assert_equal 16,    o.instance_eval { 7 + 9 }
+    assert_equal 17,    o.instance_eval { 17.to_i }
+    assert_equal "18",  o.instance_eval { "18" }
+    assert_equal "19",  o.instance_eval { "1#{9}" }
+
+    1.times {
+      assert_equal 12,  o.instance_eval { @ivar }
+      assert_equal 13,  o.instance_eval { @@cvar }
+      assert_equal 14,  o.instance_eval { $gvar__eval }
+      assert_equal 15,  o.instance_eval { Const }
+    }
+  end
+
+  def test_instance_eval_cvar
+    env = 13
+    set = 135
+    [Object.new, [], 7, :sym].each do |obj|
+      obj.class.class_variable_set :@@cvar, set
+      assert_equal env, obj.instance_eval("@@cvar")
+      assert_equal env, obj.instance_eval { @@cvar }
+    end
+    [true, false, nil].each do |obj|
+      obj.class.class_variable_set :@@cvar, set
+      assert_equal set, obj.instance_eval("@@cvar")
+      assert_equal env, obj.instance_eval { @@cvar }
+    end
+  end
+
+  # 
+  # From ruby/test/ruby/test_eval.rb
+  #
+
   def test_ev
     local1 = "local1"
     lambda {
@@ -16,7 +221,7 @@
     }.call
   end
 
-  def test_eval
+  def test_eval_orig
     assert_nil(eval(""))
     $bad=false
     eval 'while false; $bad = true; print "foo\n" end'
@@ -160,4 +365,5 @@
       v.call
     }
   end
+
 end


-- 
ML: yarv-diff quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]