Skip to content

Commit

Permalink
[PRISM] Enable TestParse#test_string
Browse files Browse the repository at this point in the history
  • Loading branch information
kddnewton committed May 16, 2024
1 parent 92af705 commit 854cbbd
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 24 deletions.
1 change: 0 additions & 1 deletion test/.excludes-prism/TestParse.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
exclude(:test_string, "error message format")
exclude(:test_truncated_source_line, "truncate error message")
exclude(:test_void_value_in_rhs, "missing raising error for some void value expressions")
54 changes: 31 additions & 23 deletions test/ruby/test_parse.rb
Original file line number Diff line number Diff line change
Expand Up @@ -555,34 +555,42 @@ def test_string
mesg = 'from the backslash through the invalid char'

e = assert_syntax_error('"\xg1"', /hex escape/)
assert_equal(' ^~'"\n", e.message.lines.last, mesg)
assert_match(/(^|\| ) \^~(?!~)/, e.message.lines.last, mesg)

e = assert_syntax_error('"\u{1234"', 'unterminated Unicode escape')
assert_equal(' ^'"\n", e.message.lines.last, mesg)
assert_match(/(^|\| ) \^(?!~)/, e.message.lines.last, mesg)

e = assert_syntax_error('"\u{xxxx}"', 'invalid Unicode escape')
assert_equal(' ^'"\n", e.message.lines.last, mesg)
assert_match(/(^|\| ) \^(?!~)/, e.message.lines.last, mesg)

e = assert_syntax_error('"\u{xxxx', 'Unicode escape')
assert_pattern_list([
/.*: invalid Unicode escape\n.*\n/,
/ \^/,
/\n/,
/.*: unterminated Unicode escape\n.*\n/,
/ \^/,
/\n/,
/.*: unterminated string.*\n.*\n/,
/ \^\n/,
], e.message)
if e.message.lines.first == "#{__FILE__}:#{__LINE__ - 1}: syntax errors found\n"
assert_pattern_list([
/\s+\| \^ unterminated string;.+\n/,
/\s+\| \^ unterminated Unicode escape\n/,
/\s+\| \^ invalid Unicode escape sequence\n/,
], e.message.lines[2..-1].join)
else
assert_pattern_list([
/.*: invalid Unicode escape\n.*\n/,
/ \^/,
/\n/,
/.*: unterminated Unicode escape\n.*\n/,
/ \^/,
/\n/,
/.*: unterminated string.*\n.*\n/,
/ \^\n/,
], e.message)
end

e = assert_syntax_error('"\M1"', /escape character syntax/)
assert_equal(' ^~~'"\n", e.message.lines.last, mesg)
assert_match(/(^|\| ) \^~~(?!~)/, e.message.lines.last, mesg)

e = assert_syntax_error('"\C1"', /escape character syntax/)
assert_equal(' ^~~'"\n", e.message.lines.last, mesg)
assert_match(/(^|\| ) \^~~(?!~)/, e.message.lines.last, mesg)

src = '"\xD0\u{90'"\n""000000000000000000000000"
assert_syntax_error(src, /:#{__LINE__}: unterminated/o)
assert_syntax_error(src, /(:#{__LINE__}:|> #{__LINE__} \|.+) unterminated/om)

assert_syntax_error('"\u{100000000}"', /invalid Unicode escape/)
assert_equal("", eval('"\u{}"'))
Expand All @@ -605,22 +613,22 @@ def test_string
assert_syntax_error("\"\\C-\\M-\x01\"", 'Invalid escape character syntax')

e = assert_syntax_error('"\c\u0000"', 'Invalid escape character syntax')
assert_equal(' ^~~~'"\n", e.message.lines.last)
assert_match(/(^|\| ) \^~~~(?!~)/, e.message.lines.last)
e = assert_syntax_error('"\c\U0000"', 'Invalid escape character syntax')
assert_equal(' ^~~~'"\n", e.message.lines.last)
assert_match(/(^|\| ) \^~~~(?!~)/, e.message.lines.last)

e = assert_syntax_error('"\C-\u0000"', 'Invalid escape character syntax')
assert_equal(' ^~~~~'"\n", e.message.lines.last)
assert_match(/(^|\| ) \^~~~~(?!~)/, e.message.lines.last)
e = assert_syntax_error('"\C-\U0000"', 'Invalid escape character syntax')
assert_equal(' ^~~~~'"\n", e.message.lines.last)
assert_match(/(^|\| ) \^~~~~(?!~)/, e.message.lines.last)

e = assert_syntax_error('"\M-\u0000"', 'Invalid escape character syntax')
assert_equal(' ^~~~~'"\n", e.message.lines.last)
assert_match(/(^|\| ) \^~~~~(?!~)/, e.message.lines.last)
e = assert_syntax_error('"\M-\U0000"', 'Invalid escape character syntax')
assert_equal(' ^~~~~'"\n", e.message.lines.last)
assert_match(/(^|\| ) \^~~~~(?!~)/, e.message.lines.last)

e = assert_syntax_error(%["\\C-\u3042"], 'Invalid escape character syntax')
assert_match(/^\s \^(?# \\ ) ~(?# C ) ~(?# - ) ~+(?# U+3042 )$/x, e.message.lines.last)
assert_match(/(^|\|\s)\s \^(?# \\ ) ~(?# C ) ~(?# - ) ~+(?# U+3042 )($|\s)/x, e.message.lines.last)
assert_not_include(e.message, "invalid multibyte char")
end

Expand Down

0 comments on commit 854cbbd

Please sign in to comment.