diff options
| author | Jeremy Evans <code@jeremyevans.net> | 2024-06-24 11:32:58 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-24 11:32:58 -0700 |
| commit | ae0c7faa79029ebe615487d23c8ee1ca44ce4a36 (patch) | |
| tree | 8c8afcacc8ae884f172b2d4d0bb4cd49141c3548 /test/ruby | |
| parent | e428ee7bbe07fd12f65e45be0839e7f0b1e4cda6 (diff) | |
Handle hash and splat nodes in defined?
This supports the nodes in both in the parse.y and prism compilers.
Fixes [Bug #20043]
Co-authored-by: Kevin Newton <kddnewton@gmail.com>
Diffstat (limited to 'test/ruby')
| -rw-r--r-- | test/ruby/test_defined.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/test/ruby/test_defined.rb b/test/ruby/test_defined.rb index 0505bdada6..3a8065d959 100644 --- a/test/ruby/test_defined.rb +++ b/test/ruby/test_defined.rb @@ -139,6 +139,41 @@ class TestDefined < Test::Unit::TestCase 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)) |
