From eaeb130b11fefe91aaf61f294ea32af76dada74f Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 3 Jul 2022 14:45:24 +0900 Subject: [Bug #18890] newline should be insignificant after pattern label --- test/ruby/test_parse.rb | 33 +++++++++++++++++++++++++++++++++ test/ruby/test_pattern_matching.rb | 15 +++++++++++++++ 2 files changed, 48 insertions(+) (limited to 'test') diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb index 8b7c8f0e5b..16764a2146 100644 --- a/test/ruby/test_parse.rb +++ b/test/ruby/test_parse.rb @@ -1370,6 +1370,39 @@ x = __ENCODING__ assert_syntax_error('x = \ 42', /escaped space/) end + def test_label + expected = {:foo => 1} + + code = '{"foo": 1}' + assert_valid_syntax(code) + assert_equal(expected, eval(code)) + + code = '{foo: 1}' + assert_valid_syntax(code) + assert_equal(expected, eval(code)) + + class << (obj = Object.new) + attr_reader :arg + def set(arg) + @arg = arg + end + end + + assert_valid_syntax(code = "#{<<~"do;"}\n#{<<~'end;'}") + do; + obj.set foo: + 1 + end; + assert_equal(expected, eval(code)) + + assert_valid_syntax(code = "#{<<~"do;"}\n#{<<~'end;'}") + do; + obj.set "foo": + 1 + end; + assert_equal(expected, eval(code)) + end + =begin def test_past_scope_variable assert_warning(/past scope/) {catch {|tag| eval("BEGIN{throw tag}; tap {a = 1}; a")}} diff --git a/test/ruby/test_pattern_matching.rb b/test/ruby/test_pattern_matching.rb index 7531466f91..b8c445c806 100644 --- a/test/ruby/test_pattern_matching.rb +++ b/test/ruby/test_pattern_matching.rb @@ -1155,6 +1155,21 @@ END end end + [{a: 42}, {b: 42}].each do |i| + assert_block('newline should be insignificant after pattern label') do + case i + in a: + 0 + true + in "b": + 0 + true + else + false + end + end + end + assert_syntax_error(%q{ case _ in a:, a: -- cgit v1.2.3