2003-09-04 16:18:59 +00:00
|
|
|
require 'test/unit'
|
2008-07-14 06:17:36 +00:00
|
|
|
require_relative 'envutil'
|
2003-09-04 16:18:59 +00:00
|
|
|
|
|
|
|
class TestVariable < Test::Unit::TestCase
|
|
|
|
class Gods
|
|
|
|
@@rule = "Uranus"
|
|
|
|
def ruler0
|
|
|
|
@@rule
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.ruler1 # <= per method definition style
|
|
|
|
@@rule
|
2003-09-05 15:15:43 +00:00
|
|
|
end
|
2003-09-04 16:18:59 +00:00
|
|
|
class << self # <= multiple method definition style
|
|
|
|
def ruler2
|
|
|
|
@@rule
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
module Olympians
|
|
|
|
@@rule ="Zeus"
|
|
|
|
def ruler3
|
|
|
|
@@rule
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class Titans < Gods
|
2007-10-03 06:48:06 +00:00
|
|
|
@@rule = "Cronus" # modifies @@rule in Gods
|
2004-03-19 07:13:01 +00:00
|
|
|
include Olympians
|
|
|
|
def ruler4
|
|
|
|
@@rule
|
|
|
|
end
|
2003-09-04 16:18:59 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_variable
|
2003-09-06 17:27:58 +00:00
|
|
|
assert_instance_of(Fixnum, $$)
|
2009-03-06 03:56:38 +00:00
|
|
|
|
2003-09-04 16:18:59 +00:00
|
|
|
# read-only variable
|
2008-09-24 17:44:39 +00:00
|
|
|
assert_raise(NameError) do
|
2003-09-04 16:18:59 +00:00
|
|
|
$$ = 5
|
|
|
|
end
|
2008-10-14 03:23:57 +00:00
|
|
|
assert_normal_exit("$*=0; $*", "[ruby-dev:36698]")
|
2003-09-05 15:15:43 +00:00
|
|
|
|
2003-09-04 16:18:59 +00:00
|
|
|
foobar = "foobar"
|
|
|
|
$_ = foobar
|
2003-09-05 15:15:43 +00:00
|
|
|
assert_equal(foobar, $_)
|
2003-09-04 16:18:59 +00:00
|
|
|
|
2007-10-03 06:48:06 +00:00
|
|
|
assert_equal("Cronus", Gods.new.ruler0)
|
|
|
|
assert_equal("Cronus", Gods.ruler1)
|
|
|
|
assert_equal("Cronus", Gods.ruler2)
|
|
|
|
assert_equal("Cronus", Titans.ruler1)
|
|
|
|
assert_equal("Cronus", Titans.ruler2)
|
2003-09-04 16:18:59 +00:00
|
|
|
atlas = Titans.new
|
2007-10-03 06:48:06 +00:00
|
|
|
assert_equal("Cronus", atlas.ruler0)
|
2003-09-05 15:15:43 +00:00
|
|
|
assert_equal("Zeus", atlas.ruler3)
|
2004-03-19 07:13:01 +00:00
|
|
|
assert_equal("Cronus", atlas.ruler4)
|
2011-08-24 00:52:04 +00:00
|
|
|
assert_nothing_raised do
|
|
|
|
class << Gods
|
|
|
|
defined?(@@rule) && @@rule
|
|
|
|
end
|
|
|
|
end
|
2003-09-04 16:18:59 +00:00
|
|
|
end
|
2008-03-09 10:16:20 +00:00
|
|
|
|
|
|
|
def test_local_variables
|
|
|
|
lvar = 1
|
|
|
|
assert_instance_of(Symbol, local_variables[0], "[ruby-dev:34008]")
|
|
|
|
end
|
2008-05-12 14:42:17 +00:00
|
|
|
|
|
|
|
def test_local_variables2
|
|
|
|
x = 1
|
|
|
|
proc do |y|
|
|
|
|
assert_equal([:x, :y], local_variables.sort)
|
|
|
|
end.call
|
|
|
|
end
|
2008-05-14 12:52:17 +00:00
|
|
|
|
|
|
|
def test_local_variables3
|
|
|
|
x = 1
|
|
|
|
proc do |y|
|
|
|
|
1.times do |z|
|
|
|
|
assert_equal([:x, :y, :z], local_variables.sort)
|
|
|
|
end
|
|
|
|
end.call
|
|
|
|
end
|
2008-07-14 06:17:36 +00:00
|
|
|
|
|
|
|
def test_global_variable_0
|
2008-07-15 15:26:04 +00:00
|
|
|
assert_in_out_err(["-e", "$0='t'*1000;print $0"], "", /\At+\z/, [])
|
2008-07-14 06:17:36 +00:00
|
|
|
end
|
2010-01-21 16:08:40 +00:00
|
|
|
|
|
|
|
def test_global_variable_poped
|
|
|
|
assert_nothing_raised { eval("$foo; 1") }
|
|
|
|
end
|
2010-01-22 14:53:12 +00:00
|
|
|
|
|
|
|
def test_constant_poped
|
|
|
|
assert_nothing_raised { eval("TestVariable::Gods; 1") }
|
|
|
|
end
|
2003-09-04 16:18:59 +00:00
|
|
|
end
|