1require 'test/unit' 2require_relative 'envutil' 3 4class TestVariable < Test::Unit::TestCase 5 class Gods 6 @@rule = "Uranus" 7 def ruler0 8 @@rule 9 end 10 11 def self.ruler1 # <= per method definition style 12 @@rule 13 end 14 class << self # <= multiple method definition style 15 def ruler2 16 @@rule 17 end 18 end 19 end 20 21 module Olympians 22 @@rule ="Zeus" 23 def ruler3 24 @@rule 25 end 26 end 27 28 class Titans < Gods 29 @@rule = "Cronus" # modifies @@rule in Gods 30 include Olympians 31 def ruler4 32 @@rule 33 end 34 end 35 36 def test_variable 37 assert_instance_of(Fixnum, $$) 38 39 # read-only variable 40 assert_raise(NameError) do 41 $$ = 5 42 end 43 assert_normal_exit("$*=0; $*", "[ruby-dev:36698]") 44 45 foobar = "foobar" 46 $_ = foobar 47 assert_equal(foobar, $_) 48 49 assert_equal("Cronus", Gods.new.ruler0) 50 assert_equal("Cronus", Gods.ruler1) 51 assert_equal("Cronus", Gods.ruler2) 52 assert_equal("Cronus", Titans.ruler1) 53 assert_equal("Cronus", Titans.ruler2) 54 atlas = Titans.new 55 assert_equal("Cronus", atlas.ruler0) 56 assert_equal("Zeus", atlas.ruler3) 57 assert_equal("Cronus", atlas.ruler4) 58 assert_nothing_raised do 59 class << Gods 60 defined?(@@rule) && @@rule 61 end 62 end 63 end 64 65 def test_local_variables 66 lvar = 1 67 assert_instance_of(Symbol, local_variables[0], "[ruby-dev:34008]") 68 end 69 70 def test_local_variables2 71 x = 1 72 proc do |y| 73 assert_equal([:x, :y], local_variables.sort) 74 end.call 75 end 76 77 def test_local_variables3 78 x = 1 79 proc do |y| 80 1.times do |z| 81 assert_equal([:x, :y, :z], local_variables.sort) 82 end 83 end.call 84 end 85 86 def test_global_variable_0 87 assert_in_out_err(["-e", "$0='t'*1000;print $0"], "", /\At+\z/, []) 88 end 89 90 def test_global_variable_poped 91 assert_nothing_raised { eval("$foo; 1") } 92 end 93 94 def test_constant_poped 95 assert_nothing_raised { eval("TestVariable::Gods; 1") } 96 end 97end 98