[PRISM] Enable TestParse#test_string

This commit is contained in:
Kevin Newton 2024-05-16 14:41:11 -04:00
parent 92af705498
commit 854cbbd5a9
2 changed files with 31 additions and 24 deletions

View File

@ -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")

View File

@ -555,34 +555,42 @@ class TestParse < Test::Unit::TestCase
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{}"'))
@ -605,22 +613,22 @@ class TestParse < Test::Unit::TestCase
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