diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/ripper/test_parser_events.rb | 6 | ||||
-rw-r--r-- | test/ripper/test_sexp.rb | 37 | ||||
-rw-r--r-- | test/ruby/test_pattern_matching.rb | 57 |
3 files changed, 100 insertions, 0 deletions
diff --git a/test/ripper/test_parser_events.rb b/test/ripper/test_parser_events.rb index 544896b15f..d61dba340d 100644 --- a/test/ripper/test_parser_events.rb +++ b/test/ripper/test_parser_events.rb @@ -1548,6 +1548,12 @@ class TestRipper::ParserEvents < Test::Unit::TestCase assert_equal true, thru_aryptn end + def test_fndptn + thru_fndptn = false + parse('case 0; in [*,0,*]; end', :on_fndptn) {thru_fndptn = true} + assert_equal true, thru_fndptn + end + def test_hshptn thru_hshptn = false parse('case 0; in {a:}; end', :on_hshptn) {thru_hshptn = true} diff --git a/test/ripper/test_sexp.rb b/test/ripper/test_sexp.rb index 89b45941a3..47339ba496 100644 --- a/test/ripper/test_sexp.rb +++ b/test/ripper/test_sexp.rb @@ -412,6 +412,43 @@ eot [:@int, "0", [1, 5]], [:in, [:aryptn, nil, nil, nil, nil], [[:void_stmt]], nil]], + [__LINE__, %q{ 0 in [*, a, *] }] => + [:case, + [:@int, "0", [1, 0]], + [:in, + [:fndptn, + nil, + [:var_field, nil], + [[:var_field, [:@ident, "a", [1, 9]]]], + [:var_field, nil]], + nil, + nil]], + + [__LINE__, %q{ 0 in [*a, b, *c] }] => + [:case, + [:@int, "0", [1, 0]], + [:in, + [:fndptn, + nil, + [:var_field, [:@ident, "a", [1, 7]]], + [[:var_field, [:@ident, "b", [1, 10]]]], + [:var_field, [:@ident, "c", [1, 14]]]], + nil, + nil]], + + [__LINE__, %q{ 0 in A(*a, b, c, *d) }] => + [:case, + [:@int, "0", [1, 0]], + [:in, + [:fndptn, + [:var_ref, [:@const, "A", [1, 5]]], + [:var_field, [:@ident, "a", [1, 8]]], + [[:var_field, [:@ident, "b", [1, 11]]], + [:var_field, [:@ident, "c", [1, 14]]]], + [:var_field, [:@ident, "d", [1, 18]]]], + nil, + nil]], + [__LINE__, %q{ case 0; in {a: 0}; end }] => [:case, [:@int, "0", [1, 5]], diff --git a/test/ruby/test_pattern_matching.rb b/test/ruby/test_pattern_matching.rb index 2afa823d53..de8515b397 100644 --- a/test/ruby/test_pattern_matching.rb +++ b/test/ruby/test_pattern_matching.rb @@ -736,6 +736,63 @@ END end end + def test_find_pattern + [0, 1, 2] in [*, 1 => a, *] + assert_equal(1, a) + + [0, 1, 2] in [*a, 1 => b, *c] + assert_equal([0], a) + assert_equal(1, b) + assert_equal([2], c) + + assert_block do + case [0, 1, 2] + in [*, 9, *] + false + else + true + end + end + + assert_block do + case [0, 1, 2] + in [*, Integer, String, *] + false + else + true + end + end + + [0, 1, 2] in [*a, 1 => b, 2 => c, *d] + assert_equal([0], a) + assert_equal(1, b) + assert_equal(2, c) + assert_equal([], d) + + case [0, 1, 2] + in *, 1 => a, *; + assert_equal(1, a) + end + + assert_block do + case [0, 1, 2] + in String(*, 1, *) + false + in Array(*, 1, *) + true + end + end + + assert_block do + case [0, 1, 2] + in String[*, 1, *] + false + in Array[*, 1, *] + true + end + end + end + def test_hash_pattern assert_block do [{}, C.new({})].all? do |i| |