#!/usr/bin/ruby
# Tests for global class variables.
class Example {
Example!hidden = 'secret'
method foo(str) {
str + ' ' + Example!hidden
}
}
assert_eq(Example!hidden, 'secret')
var obj1 = Example()
var obj2 = Example()
assert_eq(obj1.foo('abc'), 'abc secret')
assert_eq(obj2.foo('xyz'), 'xyz secret')
Example!hidden = 'public' # globally change the value of Example!hidden
assert_eq(obj1.foo('abc'), 'abc public')
assert_eq(obj2.foo('xyz'), 'xyz public')
do { # locally change the value of Example!hidden
local Example!hidden = 'bar'
assert_eq(obj1.foo('abc'), 'abc bar')
assert_eq(obj2.foo('xyz'), 'xyz bar')
assert_eq(Example!hidden, 'bar')
}
assert_eq(obj1.foo('abc'), 'abc public')
assert_eq(obj2.foo('xyz'), 'xyz public')
assert_eq(Example!hidden, 'public')
say "** Test passed!"