@@ -176,32 +176,26 @@ public function testAllowsEditingNodeOnEnterAndOnLeave(): void
176
176
{
177
177
$ ast = Parser::parse ('{ a, b, c { a, b, c } } ' , ['noLocation ' => true ]);
178
178
179
- /** @var SelectionSetNode|null $selectionSet */
180
- $ selectionSet = null ;
179
+ $ directive1 = Parser:: directive ( ' @x ' );
180
+ $ directive2 = Parser:: directive ( ' @y ' ) ;
181
181
182
182
$ editedAst = Visitor::visit (
183
183
$ ast ,
184
184
[
185
185
NodeKind::OPERATION_DEFINITION => [
186
- 'enter ' => function (OperationDefinitionNode $ node ) use (& $ selectionSet , $ ast ): OperationDefinitionNode {
186
+ 'enter ' => function (OperationDefinitionNode $ node ) use ($ ast , $ directive1 ): OperationDefinitionNode {
187
187
$ this ->checkVisitorFnArgs ($ ast , \func_get_args ());
188
188
189
- $ selectionSet = $ node ->selectionSet ;
190
-
191
189
$ newNode = clone $ node ;
192
- $ newNode ->selectionSet = new SelectionSetNode (['selections ' => new NodeList ([])]);
193
- $ newNode ->didEnter = true ;
190
+ $ newNode ->directives = new NodeList ([$ directive1 ]);
194
191
195
192
return $ newNode ;
196
193
},
197
- 'leave ' => function (OperationDefinitionNode $ node ) use (& $ selectionSet , $ ast ): OperationDefinitionNode {
194
+ 'leave ' => function (OperationDefinitionNode $ node ) use ($ ast , $ directive2 ): OperationDefinitionNode {
198
195
$ this ->checkVisitorFnArgs ($ ast , \func_get_args (), true );
199
196
200
- self ::assertInstanceOf (SelectionSetNode::class, $ selectionSet );
201
-
202
197
$ newNode = clone $ node ;
203
- $ newNode ->selectionSet = $ selectionSet ;
204
- $ newNode ->didLeave = true ;
198
+ $ newNode ->directives = $ node ->directives ->merge ([$ directive2 ]);
205
199
206
200
return $ newNode ;
207
201
},
@@ -211,47 +205,48 @@ public function testAllowsEditingNodeOnEnterAndOnLeave(): void
211
205
212
206
self ::assertNotEquals ($ ast , $ editedAst );
213
207
214
- /** @var DocumentNode $expected */
215
208
$ expected = $ ast ->cloneDeep ();
216
- $ expected ->definitions [0 ]->didEnter = true ;
217
- $ expected ->definitions [0 ]->didLeave = true ;
209
+ $ operationNode = $ expected ->definitions [0 ];
210
+ assert ($ operationNode instanceof OperationDefinitionNode);
211
+ $ operationNode ->directives = new NodeList ([$ directive1 , $ directive2 ]);
218
212
219
213
self ::assertEquals ($ expected , $ editedAst );
220
214
}
221
215
222
216
public function testAllowsEditingRootNodeOnEnterAndLeave (): void
223
217
{
224
218
$ ast = Parser::parse ('{ a, b, c { a, b, c } } ' , ['noLocation ' => true ]);
225
- $ definitions = $ ast ->definitions ;
219
+
220
+ $ definition1 = Parser::operationDefinition ('{ x } ' );
221
+ $ definition2 = Parser::operationDefinition ('{ x } ' );
226
222
227
223
$ editedAst = Visitor::visit (
228
224
$ ast ,
229
225
[
230
226
NodeKind::DOCUMENT => [
231
- 'enter ' => function (DocumentNode $ node ) use ($ ast ): DocumentNode {
227
+ 'enter ' => function (DocumentNode $ node ) use ($ ast, $ definition1 ): DocumentNode {
232
228
$ this ->checkVisitorFnArgs ($ ast , \func_get_args ());
233
- $ tmp = clone $ node ;
234
- $ tmp ->definitions = new NodeList ([]);
235
- $ tmp ->didEnter = true ;
236
229
237
- return $ tmp ;
230
+ $ newNode = clone $ node ;
231
+ $ newNode ->definitions = $ node ->definitions ->merge ([$ definition1 ]);
232
+
233
+ return $ newNode ;
238
234
},
239
- 'leave ' => function (DocumentNode $ node ) use ($ definitions , $ ast ): void {
235
+ 'leave ' => function (DocumentNode $ node ) use ($ ast , $ definition2 ): void {
240
236
$ this ->checkVisitorFnArgs ($ ast , \func_get_args (), true );
241
- $ node -> definitions = $ definitions ;
242
- $ node ->didLeave = true ;
237
+
238
+ $ node ->definitions = $ node -> definitions -> merge ([ $ definition2 ]) ;
243
239
},
244
240
],
245
241
]
246
242
);
247
243
248
244
self ::assertNotEquals ($ ast , $ editedAst );
249
245
250
- $ tmp = $ ast ->cloneDeep ();
251
- $ tmp ->didEnter = true ;
252
- $ tmp ->didLeave = true ;
246
+ $ expected = $ ast ->cloneDeep ();
247
+ $ expected ->definitions = $ ast ->definitions ->merge ([$ definition1 , $ definition2 ]);
253
248
254
- self ::assertEquals ($ tmp , $ editedAst );
249
+ self ::assertEquals ($ expected , $ editedAst );
255
250
}
256
251
257
252
public function testAllowsForEditingOnEnter (): void
@@ -367,7 +362,7 @@ public function testAllowsSkippingASubTree(): void
367
362
[
368
363
'enter ' => function (Node $ node ) use (&$ visited , $ ast ): ?VisitorOperation {
369
364
$ this ->checkVisitorFnArgs ($ ast , \func_get_args ());
370
- $ visited [] = ['enter ' , $ node ->kind , $ node ->value ?? null ];
365
+ $ visited [] = ['enter ' , $ node ->kind , property_exists ( $ node, ' value ' ) ? $ node ->value : null ];
371
366
if ($ node instanceof FieldNode && $ node ->name ->value === 'b ' ) {
372
367
return Visitor::skipNode ();
373
368
}
@@ -376,7 +371,7 @@ public function testAllowsSkippingASubTree(): void
376
371
},
377
372
'leave ' => function (Node $ node ) use (&$ visited , $ ast ): void {
378
373
$ this ->checkVisitorFnArgs ($ ast , \func_get_args ());
379
- $ visited [] = ['leave ' , $ node ->kind , $ node ->value ?? null ];
374
+ $ visited [] = ['leave ' , $ node ->kind , property_exists ( $ node, ' value ' ) ? $ node ->value : null ];
380
375
},
381
376
]
382
377
);
@@ -412,7 +407,7 @@ public function testAllowsEarlyExitWhileVisiting(): void
412
407
[
413
408
'enter ' => function (Node $ node ) use (&$ visited , $ ast ): ?VisitorOperation {
414
409
$ this ->checkVisitorFnArgs ($ ast , \func_get_args ());
415
- $ visited [] = ['enter ' , $ node ->kind , $ node ->value ?? null ];
410
+ $ visited [] = ['enter ' , $ node ->kind , property_exists ( $ node, ' value ' ) ? $ node ->value : null ];
416
411
if ($ node instanceof NameNode && $ node ->value === 'x ' ) {
417
412
return Visitor::stop ();
418
413
}
@@ -421,7 +416,7 @@ public function testAllowsEarlyExitWhileVisiting(): void
421
416
},
422
417
'leave ' => function (Node $ node ) use (&$ visited , $ ast ): void {
423
418
$ this ->checkVisitorFnArgs ($ ast , \func_get_args ());
424
- $ visited [] = ['leave ' , $ node ->kind , $ node ->value ?? null ];
419
+ $ visited [] = ['leave ' , $ node ->kind , property_exists ( $ node, ' value ' ) ? $ node ->value : null ];
425
420
},
426
421
]
427
422
);
0 commit comments