@@ -19,9 +19,9 @@ def lex_second(s: str) -> Token:
19
19
return lexer .advance ()
20
20
21
21
22
- def assert_syntax_error (text , message , location ):
22
+ def assert_syntax_error (text , message , location , second = False ):
23
23
with raises (GraphQLSyntaxError ) as exc_info :
24
- lex_one (text )
24
+ lex_second ( text ) if second else lex_one (text )
25
25
error = exc_info .value
26
26
assert error .message == f"Syntax Error: { message } "
27
27
assert error .locations == [location ]
@@ -330,6 +330,32 @@ def lex_reports_useful_number_errors():
330
330
"1.23.4" , "Invalid number, expected digit but got: '.'." , (1 , 5 )
331
331
)
332
332
333
+ def lex_does_not_allow_name_start_after_a_number ():
334
+ assert_syntax_error (
335
+ "0xF1" , "Invalid number, expected digit but got: 'x'." , (1 , 2 )
336
+ )
337
+ assert_syntax_error (
338
+ "0b10" , "Invalid number, expected digit but got: 'b'." , (1 , 2 )
339
+ )
340
+ assert_syntax_error (
341
+ "123abc" , "Invalid number, expected digit but got: 'a'." , (1 , 4 )
342
+ )
343
+ assert_syntax_error (
344
+ "1_1234" , "Invalid number, expected digit but got: '_'." , (1 , 2 )
345
+ )
346
+ assert_syntax_error (
347
+ "1_1234" , "Invalid number, expected digit but got: '_'." , (1 , 2 )
348
+ )
349
+ assert_syntax_error (
350
+ "1ß" , "Cannot parse the unexpected character 'ß'." , (1 , 2 ), second = True ,
351
+ )
352
+ assert_syntax_error (
353
+ "1.23f" , "Invalid number, expected digit but got: 'f'." , (1 , 5 )
354
+ )
355
+ assert_syntax_error (
356
+ "12ß" , "Cannot parse the unexpected character 'ß'." , (1 , 3 ), second = True ,
357
+ )
358
+
333
359
# noinspection PyArgumentEqualDefault
334
360
def lexes_punctuation ():
335
361
assert lex_one ("!" ) == Token (TokenKind .BANG , 0 , 1 , 1 , 1 , None , None )
0 commit comments