760aa0996f
Tests for an issue with line continuation failing in paste mode due to the lexer only checking for \n in the "following" character position, before next_char() has had a chance to convert \r and \r\n to \n.
79 lines
1.3 KiB
Python
79 lines
1.3 KiB
Python
# test the lexer
|
|
|
|
# __debug__ is a special symbol
|
|
print(type(__debug__))
|
|
|
|
# short input
|
|
exec("")
|
|
exec("\n")
|
|
exec("\n\n")
|
|
exec("\r")
|
|
exec("\r\r")
|
|
exec("\t")
|
|
exec("\r\n")
|
|
exec("\nprint(1)")
|
|
exec("\rprint(2)")
|
|
exec("\r\nprint(3)")
|
|
exec("\n5")
|
|
exec("\r6")
|
|
exec("\r\n7")
|
|
print(eval("1"))
|
|
print(eval("12"))
|
|
print(eval("123"))
|
|
print(eval("1\n"))
|
|
print(eval("12\n"))
|
|
print(eval("123\n"))
|
|
print(eval("1\r"))
|
|
print(eval("12\r"))
|
|
print(eval("123\r"))
|
|
|
|
# line continuation
|
|
print(eval("'123' \\\r '456'"))
|
|
print(eval("'123' \\\n '456'"))
|
|
print(eval("'123' \\\r\n '456'"))
|
|
print(eval("'123'\\\r'456'"))
|
|
print(eval("'123'\\\n'456'"))
|
|
print(eval("'123'\\\r\n'456'"))
|
|
|
|
# backslash used to escape a line-break in a string
|
|
print('a\
|
|
b')
|
|
|
|
# lots of indentation
|
|
def a(x):
|
|
if x:
|
|
if x:
|
|
if x:
|
|
if x:
|
|
if x:
|
|
if x:
|
|
if x:
|
|
if x:
|
|
if x:
|
|
if x:
|
|
if x:
|
|
if x:
|
|
if x:
|
|
if x:
|
|
if x:
|
|
print(x)
|
|
a(1)
|
|
|
|
# badly formed hex escape sequences
|
|
try:
|
|
exec(r"'\x0'")
|
|
except SyntaxError:
|
|
print("SyntaxError")
|
|
try:
|
|
exec(r"b'\x0'")
|
|
except SyntaxError:
|
|
print("SyntaxError")
|
|
try:
|
|
exec(r"'\u000'")
|
|
except SyntaxError:
|
|
print("SyntaxError")
|
|
try:
|
|
exec(r"'\U0000000'")
|
|
except SyntaxError:
|
|
print("SyntaxError")
|