summaryrefslogtreecommitdiff
path: root/test/ruby/test_defined.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby/test_defined.rb')
-rw-r--r--test/ruby/test_defined.rb81
1 files changed, 81 insertions, 0 deletions
diff --git a/test/ruby/test_defined.rb b/test/ruby/test_defined.rb
index 3324a09afe..db1fdc8e25 100644
--- a/test/ruby/test_defined.rb
+++ b/test/ruby/test_defined.rb
@@ -127,6 +127,53 @@ class TestDefined < Test::Unit::TestCase
assert_equal nil, defined?($2)
end
+ def test_defined_assignment
+ assert_equal("assignment", defined?(a = 1))
+ assert_equal("assignment", defined?(a += 1))
+ assert_equal("assignment", defined?(a &&= 1))
+ assert_equal("assignment", eval('defined?(A = 1)'))
+ assert_equal("assignment", eval('defined?(A += 1)'))
+ assert_equal("assignment", eval('defined?(A &&= 1)'))
+ assert_equal("assignment", eval('defined?(A::B = 1)'))
+ assert_equal("assignment", eval('defined?(A::B += 1)'))
+ assert_equal("assignment", eval('defined?(A::B &&= 1)'))
+ end
+
+ def test_defined_splat
+ assert_nil(defined?([*a]))
+ assert_nil(defined?(itself(*a)))
+ assert_equal("expression", defined?([*itself]))
+ assert_equal("method", defined?(itself(*itself)))
+ end
+
+ def test_defined_hash
+ assert_nil(defined?({a: a}))
+ assert_nil(defined?({a => 1}))
+ assert_nil(defined?({a => a}))
+ assert_nil(defined?({**a}))
+ assert_nil(defined?(itself(a: a)))
+ assert_nil(defined?(itself(a => 1)))
+ assert_nil(defined?(itself(a => a)))
+ assert_nil(defined?(itself(**a)))
+ assert_nil(defined?(itself({a: a})))
+ assert_nil(defined?(itself({a => 1})))
+ assert_nil(defined?(itself({a => a})))
+ assert_nil(defined?(itself({**a})))
+
+ assert_equal("expression", defined?({a: itself}))
+ assert_equal("expression", defined?({itself => 1}))
+ assert_equal("expression", defined?({itself => itself}))
+ assert_equal("expression", defined?({**itself}))
+ assert_equal("method", defined?(itself(a: itself)))
+ assert_equal("method", defined?(itself(itself => 1)))
+ assert_equal("method", defined?(itself(itself => itself)))
+ assert_equal("method", defined?(itself(**itself)))
+ assert_equal("method", defined?(itself({a: itself})))
+ assert_equal("method", defined?(itself({itself => 1})))
+ assert_equal("method", defined?(itself({itself => itself})))
+ assert_equal("method", defined?(itself({**itself})))
+ end
+
def test_defined_literal
assert_equal("nil", defined?(nil))
assert_equal("true", defined?(true))
@@ -196,6 +243,26 @@ class TestDefined < Test::Unit::TestCase
assert_nil(defined?(p () + 1))
end
+ def test_defined_paren_void_stmts
+ assert_equal("expression", defined? (;x))
+ assert_equal("expression", defined? (x;))
+ assert_nil(defined? (
+
+ x
+
+ ))
+
+ x = 1
+
+ assert_equal("expression", defined? (;x))
+ assert_equal("expression", defined? (x;))
+ assert_equal("local-variable", defined? (
+
+ x
+
+ ))
+ end
+
def test_defined_impl_specific
feature7035 = '[ruby-core:47558]' # not spec
assert_predicate(defined?(Foo), :frozen?, feature7035)
@@ -303,6 +370,20 @@ class TestDefined < Test::Unit::TestCase
assert_equal("super", o.x, bug8367)
end
+ def test_super_in_basic_object
+ BasicObject.class_eval do
+ def a
+ defined?(super)
+ end
+ end
+
+ assert_nil(a)
+ ensure
+ BasicObject.class_eval do
+ undef_method :a if defined?(a)
+ end
+ end
+
def test_super_toplevel
assert_separately([], "assert_nil(defined?(super))")
end