@@ -103,21 +103,122 @@ class ParserTests : XCTestCase {
103
103
) )
104
104
}
105
105
106
- XCTAssertThrowsError ( try parse ( source: " { fieldWithNullableStringInput(input: null) } " ) ) { error in
107
- guard let error = error as? GraphQLError else {
108
- return XCTFail ( )
109
- }
110
-
111
- XCTAssert ( error. message. contains (
112
- " Syntax Error GraphQL (1:39) Unexpected Name \" null \" "
113
- ) )
114
- }
115
106
}
116
107
117
108
func testVariableInlineValues( ) throws {
118
109
_ = try parse ( source: " { field(complex: { a: { b: [ $var ] } }) } " )
119
110
}
120
111
112
+ func testFieldWithArguments( ) throws {
113
+ let query = """
114
+ {
115
+ stringArgField(stringArg: " Hello World " )
116
+ intArgField(intArg: 1)
117
+ floatArgField(floatArg: 3.14)
118
+ falseArgField(boolArg: false)
119
+ trueArgField(boolArg: true)
120
+ nullArgField(value: null)
121
+ enumArgField(enumArg: VALUE)
122
+ multipleArgs(arg1: 1, arg2: false, arg3: THIRD)
123
+ }
124
+ """
125
+
126
+ let expected = Document (
127
+ definitions: [
128
+ OperationDefinition (
129
+ operation: . query,
130
+ selectionSet: SelectionSet (
131
+ selections: [
132
+ Field (
133
+ name: Name ( value: " stringArgField " ) ,
134
+ arguments: [
135
+ Argument (
136
+ name: Name ( value: " stringArg " ) ,
137
+ value: StringValue ( value: " Hello World " , block: false )
138
+ )
139
+ ]
140
+ ) ,
141
+ Field (
142
+ name: Name ( value: " intArgField " ) ,
143
+ arguments: [
144
+ Argument (
145
+ name: Name ( value: " intArg " ) ,
146
+ value: IntValue ( value: " 1 " )
147
+ )
148
+ ]
149
+ ) ,
150
+ Field (
151
+ name: Name ( value: " floatArgField " ) ,
152
+ arguments: [
153
+ Argument (
154
+ name: Name ( value: " floatArg " ) ,
155
+ value: FloatValue ( value: " 3.14 " )
156
+ )
157
+ ]
158
+ ) ,
159
+ Field (
160
+ name: Name ( value: " falseArgField " ) ,
161
+ arguments: [
162
+ Argument (
163
+ name: Name ( value: " boolArg " ) ,
164
+ value: BooleanValue ( value: false )
165
+ )
166
+ ]
167
+ ) ,
168
+ Field (
169
+ name: Name ( value: " trueArgField " ) ,
170
+ arguments: [
171
+ Argument (
172
+ name: Name ( value: " boolArg " ) ,
173
+ value: BooleanValue ( value: true )
174
+ )
175
+ ]
176
+ ) ,
177
+ Field (
178
+ name: Name ( value: " nullArgField " ) ,
179
+ arguments: [
180
+ Argument (
181
+ name: Name ( value: " value " ) ,
182
+ value: NullValue ( )
183
+ )
184
+ ]
185
+ ) ,
186
+ Field (
187
+ name: Name ( value: " enumArgField " ) ,
188
+ arguments: [
189
+ Argument (
190
+ name: Name ( value: " enumArg " ) ,
191
+ value: EnumValue ( value: " VALUE " )
192
+ )
193
+ ]
194
+ ) ,
195
+ Field (
196
+ name: Name ( value: " multipleArgs " ) ,
197
+ arguments: [
198
+ Argument (
199
+ name: Name ( value: " arg1 " ) ,
200
+ value: IntValue ( value: " 1 " )
201
+ ) ,
202
+ Argument (
203
+ name: Name ( value: " arg2 " ) ,
204
+ value: BooleanValue ( value: false )
205
+ ) ,
206
+ Argument (
207
+ name: Name ( value: " arg3 " ) ,
208
+ value: EnumValue ( value: " THIRD " )
209
+ ) ,
210
+ ]
211
+ ) ,
212
+ ]
213
+ )
214
+ )
215
+ ]
216
+ )
217
+
218
+ let document = try parse ( source: query)
219
+ XCTAssert ( document == expected)
220
+ }
221
+
121
222
// it('parses multi-byte characters', async () => {
122
223
// // Note: \u0A0A could be naively interpretted as two line-feed chars.
123
224
// expect(
@@ -325,4 +426,34 @@ class ParserTests : XCTestCase {
325
426
326
427
XCTAssert ( try parseType ( source: source) == expected)
327
428
}
429
+
430
+ func testParseDirective( ) throws {
431
+ let source = #"""
432
+ directive @restricted(
433
+ """The reason for this restriction"""
434
+ reason: String = null
435
+ ) on FIELD_DEFINITION
436
+ """#
437
+
438
+ let expected = Document ( definitions: [
439
+ DirectiveDefinition (
440
+ description: nil ,
441
+ name: Name ( value: " restricted " ) ,
442
+ arguments: [
443
+ InputValueDefinition (
444
+ description: StringValue ( value: " The reason for this restriction " , block: true ) ,
445
+ name: Name ( value: " reason " ) ,
446
+ type: NamedType ( name: Name ( value: " String " ) ) ,
447
+ defaultValue: NullValue ( )
448
+ )
449
+ ] ,
450
+ locations: [
451
+ Name ( value: " FIELD_DEFINITION " )
452
+ ]
453
+ )
454
+ ] )
455
+
456
+ let document = try parse ( source: source)
457
+ XCTAssert ( document == expected)
458
+ }
328
459
}
0 commit comments