33import pickle
44from copy import deepcopy
55from textwrap import dedent
6- from typing import Optional , Tuple
76
87import pytest
98
2221 InterfaceTypeDefinitionNode ,
2322 InterfaceTypeExtensionNode ,
2423 ListTypeNode ,
24+ Location ,
2525 NamedTypeNode ,
2626 NameNode ,
2727 NonNullTypeNode ,
3232 ScalarTypeDefinitionNode ,
3333 SchemaDefinitionNode ,
3434 SchemaExtensionNode ,
35+ Source ,
3536 StringValueNode ,
37+ Token ,
38+ TokenKind ,
3639 TypeNode ,
3740 UnionTypeDefinitionNode ,
3841 ValueNode ,
4144
4245from ..fixtures import kitchen_sink_sdl # noqa: F401
4346
44- try :
45- from typing import TypeAlias
46- except ImportError : # Python < 3.10
47- from typing_extensions import TypeAlias
4847
49-
50- Location : TypeAlias = Optional [Tuple [int , int ]]
48+ def make_loc (position : tuple [int , int ]) -> Location :
49+ """Create a Location for testing with the given (start, end) offsets."""
50+ source = Source (body = "" )
51+ token = Token (
52+ kind = TokenKind .NAME , start = position [0 ], end = position [1 ], line = 1 , column = 1
53+ )
54+ return Location (start_token = token , end_token = token , source = source )
5155
5256
53- def assert_syntax_error (text : str , message : str , location : Location ) -> None :
57+ def assert_syntax_error (
58+ text : str , message : str , location : tuple [int , int ] | None
59+ ) -> None :
5460 with pytest .raises (GraphQLSyntaxError ) as exc_info :
5561 parse (text )
5662 error = exc_info .value
@@ -59,85 +65,104 @@ def assert_syntax_error(text: str, message: str, location: Location) -> None:
5965 assert error .locations == [location ]
6066
6167
62- def assert_definitions (body : str , loc : Location , num = 1 ):
68+ def assert_definitions (body : str , position : tuple [ int , int ] | None , num : int = 1 ):
6369 doc = parse (body )
6470 assert isinstance (doc , DocumentNode )
65- assert doc .loc == loc
71+ assert doc .loc == position
6672 definitions = doc .definitions
6773 assert isinstance (definitions , tuple )
6874 assert len (definitions ) == num
6975 return definitions [0 ] if num == 1 else definitions
7076
7177
72- def type_node (name : str , loc : Location ):
73- return NamedTypeNode (name = name_node (name , loc ), loc = loc )
78+ def type_node (name : str , position : tuple [ int , int ] ):
79+ return NamedTypeNode (name = name_node (name , position ), loc = make_loc ( position ) )
7480
7581
76- def name_node (name : str , loc : Location ):
77- return NameNode (value = name , loc = loc )
82+ def name_node (name : str , position : tuple [ int , int ] ):
83+ return NameNode (value = name , loc = make_loc ( position ) )
7884
7985
80- def field_node (name : NameNode , type_ : TypeNode , loc : Location ):
81- return field_node_with_args (name , type_ , (), loc )
86+ def field_node (name : NameNode , type_ : TypeNode , position : tuple [ int , int ] ):
87+ return field_node_with_args (name , type_ , (), position )
8288
8389
84- def field_node_with_args (name : NameNode , type_ : TypeNode , args : tuple , loc : Location ):
90+ def field_node_with_args (
91+ name : NameNode , type_ : TypeNode , args : tuple , position : tuple [int , int ]
92+ ):
8593 return FieldDefinitionNode (
86- name = name , arguments = args , type = type_ , directives = (), loc = loc , description = None
94+ name = name ,
95+ arguments = args ,
96+ type = type_ ,
97+ directives = (),
98+ loc = make_loc (position ),
99+ description = None ,
87100 )
88101
89102
90- def non_null_type (type_ : TypeNode , loc : Location ):
91- return NonNullTypeNode (type = type_ , loc = loc )
103+ def non_null_type (type_ : TypeNode , position : tuple [ int , int ] ):
104+ return NonNullTypeNode (type = type_ , loc = make_loc ( position ) )
92105
93106
94- def enum_value_node (name : str , loc : Location ):
107+ def enum_value_node (name : str , position : tuple [ int , int ] ):
95108 return EnumValueDefinitionNode (
96- name = name_node (name , loc ), directives = (), loc = loc , description = None
109+ name = name_node (name , position ),
110+ directives = (),
111+ loc = make_loc (position ),
112+ description = None ,
97113 )
98114
99115
100116def input_value_node (
101- name : NameNode , type_ : TypeNode , default_value : ValueNode | None , loc : Location
117+ name : NameNode ,
118+ type_ : TypeNode ,
119+ default_value : ValueNode | None ,
120+ position : tuple [int , int ],
102121):
103122 return InputValueDefinitionNode (
104123 name = name ,
105124 type = type_ ,
106125 default_value = default_value ,
107126 directives = (),
108- loc = loc ,
127+ loc = make_loc ( position ) ,
109128 description = None ,
110129 )
111130
112131
113- def boolean_value_node (value : bool , loc : Location ):
114- return BooleanValueNode (value = value , loc = loc )
132+ def boolean_value_node (value : bool , position : tuple [ int , int ] ):
133+ return BooleanValueNode (value = value , loc = make_loc ( position ) )
115134
116135
117- def string_value_node (value : str , block : bool | None , loc : Location ):
118- return StringValueNode (value = value , block = block , loc = loc )
136+ def string_value_node (value : str , block : bool | None , position : tuple [ int , int ] ):
137+ return StringValueNode (value = value , block = block , loc = make_loc ( position ) )
119138
120139
121- def list_type_node (type_ : TypeNode , loc : Location ):
122- return ListTypeNode (type = type_ , loc = loc )
140+ def list_type_node (type_ : TypeNode , position : tuple [ int , int ] ):
141+ return ListTypeNode (type = type_ , loc = make_loc ( position ) )
123142
124143
125144def schema_extension_node (
126145 directives : tuple [DirectiveNode , ...],
127146 operation_types : tuple [OperationTypeDefinitionNode , ...],
128- loc : Location ,
147+ position : tuple [ int , int ] ,
129148):
130149 return SchemaExtensionNode (
131- directives = directives , operation_types = operation_types , loc = loc
150+ directives = directives , operation_types = operation_types , loc = make_loc ( position )
132151 )
133152
134153
135- def operation_type_definition (operation : OperationType , type_ : TypeNode , loc : Location ):
136- return OperationTypeDefinitionNode (operation = operation , type = type_ , loc = loc )
154+ def operation_type_definition (
155+ operation : OperationType , type_ : TypeNode , position : tuple [int , int ]
156+ ):
157+ return OperationTypeDefinitionNode (
158+ operation = operation , type = type_ , loc = make_loc (position )
159+ )
137160
138161
139- def directive_node (name : NameNode , arguments : tuple [ArgumentNode , ...], loc : Location ):
140- return DirectiveNode (name = name , arguments = arguments , loc = loc )
162+ def directive_node (
163+ name : NameNode , arguments : tuple [ArgumentNode , ...], position : tuple [int , int ]
164+ ):
165+ return DirectiveNode (name = name , arguments = arguments , loc = make_loc (position ))
141166
142167
143168def describe_schema_parser ():
0 commit comments