@@ -176,32 +176,26 @@ public function testAllowsEditingNodeOnEnterAndOnLeave(): void
176176 {
177177 $ ast = Parser::parse ('{ a, b, c { a, b, c } } ' , ['noLocation ' => true ]);
178178
179- /** @var SelectionSetNode|null $selectionSet */
180- $ selectionSet = null ;
179+ $ directive1 = Parser:: directive ( ' @x ' );
180+ $ directive2 = Parser:: directive ( ' @y ' ) ;
181181
182182 $ editedAst = Visitor::visit (
183183 $ ast ,
184184 [
185185 NodeKind::OPERATION_DEFINITION => [
186- 'enter ' => function (OperationDefinitionNode $ node ) use (& $ selectionSet , $ ast ): OperationDefinitionNode {
186+ 'enter ' => function (OperationDefinitionNode $ node ) use ($ ast , $ directive1 ): OperationDefinitionNode {
187187 $ this ->checkVisitorFnArgs ($ ast , \func_get_args ());
188188
189- $ selectionSet = $ node ->selectionSet ;
190-
191189 $ newNode = clone $ node ;
192- $ newNode ->selectionSet = new SelectionSetNode (['selections ' => new NodeList ([])]);
193- $ newNode ->didEnter = true ;
190+ $ newNode ->directives = new NodeList ([$ directive1 ]);
194191
195192 return $ newNode ;
196193 },
197- 'leave ' => function (OperationDefinitionNode $ node ) use (& $ selectionSet , $ ast ): OperationDefinitionNode {
194+ 'leave ' => function (OperationDefinitionNode $ node ) use ($ ast , $ directive2 ): OperationDefinitionNode {
198195 $ this ->checkVisitorFnArgs ($ ast , \func_get_args (), true );
199196
200- self ::assertInstanceOf (SelectionSetNode::class, $ selectionSet );
201-
202197 $ newNode = clone $ node ;
203- $ newNode ->selectionSet = $ selectionSet ;
204- $ newNode ->didLeave = true ;
198+ $ newNode ->directives = $ node ->directives ->merge ([$ directive2 ]);
205199
206200 return $ newNode ;
207201 },
@@ -211,47 +205,48 @@ public function testAllowsEditingNodeOnEnterAndOnLeave(): void
211205
212206 self ::assertNotEquals ($ ast , $ editedAst );
213207
214- /** @var DocumentNode $expected */
215208 $ 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 ]);
218212
219213 self ::assertEquals ($ expected , $ editedAst );
220214 }
221215
222216 public function testAllowsEditingRootNodeOnEnterAndLeave (): void
223217 {
224218 $ 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 } ' );
226222
227223 $ editedAst = Visitor::visit (
228224 $ ast ,
229225 [
230226 NodeKind::DOCUMENT => [
231- 'enter ' => function (DocumentNode $ node ) use ($ ast ): DocumentNode {
227+ 'enter ' => function (DocumentNode $ node ) use ($ ast, $ definition1 ): DocumentNode {
232228 $ this ->checkVisitorFnArgs ($ ast , \func_get_args ());
233- $ tmp = clone $ node ;
234- $ tmp ->definitions = new NodeList ([]);
235- $ tmp ->didEnter = true ;
236229
237- return $ tmp ;
230+ $ newNode = clone $ node ;
231+ $ newNode ->definitions = $ node ->definitions ->merge ([$ definition1 ]);
232+
233+ return $ newNode ;
238234 },
239- 'leave ' => function (DocumentNode $ node ) use ($ definitions , $ ast ): void {
235+ 'leave ' => function (DocumentNode $ node ) use ($ ast , $ definition2 ): void {
240236 $ this ->checkVisitorFnArgs ($ ast , \func_get_args (), true );
241- $ node -> definitions = $ definitions ;
242- $ node ->didLeave = true ;
237+
238+ $ node ->definitions = $ node -> definitions -> merge ([ $ definition2 ]) ;
243239 },
244240 ],
245241 ]
246242 );
247243
248244 self ::assertNotEquals ($ ast , $ editedAst );
249245
250- $ tmp = $ ast ->cloneDeep ();
251- $ tmp ->didEnter = true ;
252- $ tmp ->didLeave = true ;
246+ $ expected = $ ast ->cloneDeep ();
247+ $ expected ->definitions = $ ast ->definitions ->merge ([$ definition1 , $ definition2 ]);
253248
254- self ::assertEquals ($ tmp , $ editedAst );
249+ self ::assertEquals ($ expected , $ editedAst );
255250 }
256251
257252 public function testAllowsForEditingOnEnter (): void
@@ -367,7 +362,7 @@ public function testAllowsSkippingASubTree(): void
367362 [
368363 'enter ' => function (Node $ node ) use (&$ visited , $ ast ): ?VisitorOperation {
369364 $ 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 ];
371366 if ($ node instanceof FieldNode && $ node ->name ->value === 'b ' ) {
372367 return Visitor::skipNode ();
373368 }
@@ -376,7 +371,7 @@ public function testAllowsSkippingASubTree(): void
376371 },
377372 'leave ' => function (Node $ node ) use (&$ visited , $ ast ): void {
378373 $ 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 ];
380375 },
381376 ]
382377 );
@@ -412,7 +407,7 @@ public function testAllowsEarlyExitWhileVisiting(): void
412407 [
413408 'enter ' => function (Node $ node ) use (&$ visited , $ ast ): ?VisitorOperation {
414409 $ 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 ];
416411 if ($ node instanceof NameNode && $ node ->value === 'x ' ) {
417412 return Visitor::stop ();
418413 }
@@ -421,7 +416,7 @@ public function testAllowsEarlyExitWhileVisiting(): void
421416 },
422417 'leave ' => function (Node $ node ) use (&$ visited , $ ast ): void {
423418 $ 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 ];
425420 },
426421 ]
427422 );
0 commit comments