@@ -290,6 +290,53 @@ describe('Visitor', () => {
290
290
] ) ;
291
291
} ) ;
292
292
293
+ it ( 'Experimental: visits variables defined in fragments' , ( ) => {
294
+ const ast = parse ( 'fragment a($v: Boolean = false) on t { f }' , {
295
+ experimentalFragmentVariables : true ,
296
+ } ) ;
297
+ const visited = [ ] ;
298
+
299
+ visit ( ast , {
300
+ enter ( node ) {
301
+ visited . push ( [ 'enter' , node . kind , node . value ] ) ;
302
+ } ,
303
+ leave ( node ) {
304
+ visited . push ( [ 'leave' , node . kind , node . value ] ) ;
305
+ } ,
306
+ } ) ;
307
+
308
+ expect ( visited ) . to . deep . equal ( [
309
+ [ 'enter' , 'Document' , undefined ] ,
310
+ [ 'enter' , 'FragmentDefinition' , undefined ] ,
311
+ [ 'enter' , 'Name' , 'a' ] ,
312
+ [ 'leave' , 'Name' , 'a' ] ,
313
+ [ 'enter' , 'VariableDefinition' , undefined ] ,
314
+ [ 'enter' , 'Variable' , undefined ] ,
315
+ [ 'enter' , 'Name' , 'v' ] ,
316
+ [ 'leave' , 'Name' , 'v' ] ,
317
+ [ 'leave' , 'Variable' , undefined ] ,
318
+ [ 'enter' , 'NamedType' , undefined ] ,
319
+ [ 'enter' , 'Name' , 'Boolean' ] ,
320
+ [ 'leave' , 'Name' , 'Boolean' ] ,
321
+ [ 'leave' , 'NamedType' , undefined ] ,
322
+ [ 'enter' , 'BooleanValue' , false ] ,
323
+ [ 'leave' , 'BooleanValue' , false ] ,
324
+ [ 'leave' , 'VariableDefinition' , undefined ] ,
325
+ [ 'enter' , 'NamedType' , undefined ] ,
326
+ [ 'enter' , 'Name' , 't' ] ,
327
+ [ 'leave' , 'Name' , 't' ] ,
328
+ [ 'leave' , 'NamedType' , undefined ] ,
329
+ [ 'enter' , 'SelectionSet' , undefined ] ,
330
+ [ 'enter' , 'Field' , undefined ] ,
331
+ [ 'enter' , 'Name' , 'f' ] ,
332
+ [ 'leave' , 'Name' , 'f' ] ,
333
+ [ 'leave' , 'Field' , undefined ] ,
334
+ [ 'leave' , 'SelectionSet' , undefined ] ,
335
+ [ 'leave' , 'FragmentDefinition' , undefined ] ,
336
+ [ 'leave' , 'Document' , undefined ] ,
337
+ ] ) ;
338
+ } ) ;
339
+
293
340
const kitchenSink = readFileSync ( join ( __dirname , '/kitchen-sink.graphql' ) , {
294
341
encoding : 'utf8' ,
295
342
} ) ;
0 commit comments