@@ -515,4 +515,111 @@ describe('visitWithTypeInfo', () => {
515
515
[ 'leave' , 'SelectionSet' , null , 'Human' , 'Human' ] ,
516
516
] ) ;
517
517
} ) ;
518
+
519
+ it ( 'supports traversals of fragment arguments' , ( ) => {
520
+ const typeInfo = new TypeInfo ( testSchema ) ;
521
+
522
+ const ast = parse ( `
523
+ query {
524
+ ...Foo(x: 4)
525
+ }
526
+
527
+ fragment Foo(
528
+ "Human to get"
529
+ $x: ID!
530
+ ) on QueryRoot {
531
+ human(id: $x) { name }
532
+ }
533
+ ` ) ;
534
+
535
+ const visited : Array < any > = [ ] ;
536
+ visit (
537
+ ast ,
538
+ visitWithTypeInfo ( typeInfo , {
539
+ enter ( node ) {
540
+ const type = typeInfo . getType ( ) ;
541
+ const inputType = typeInfo . getInputType ( ) ;
542
+ visited . push ( [
543
+ 'enter' ,
544
+ node . kind ,
545
+ node . kind === 'Name' ? node . value : null ,
546
+ String ( type ) ,
547
+ String ( inputType ) ,
548
+ ] ) ;
549
+ } ,
550
+ leave ( node ) {
551
+ const type = typeInfo . getType ( ) ;
552
+ const inputType = typeInfo . getInputType ( ) ;
553
+ visited . push ( [
554
+ 'leave' ,
555
+ node . kind ,
556
+ node . kind === 'Name' ? node . value : null ,
557
+ String ( type ) ,
558
+ String ( inputType ) ,
559
+ ] ) ;
560
+ } ,
561
+ } ) ,
562
+ ) ;
563
+
564
+ expect ( visited ) . to . deep . equal ( [
565
+ [ 'enter' , 'Document' , null , 'undefined' , 'undefined' ] ,
566
+ [ 'enter' , 'OperationDefinition' , null , 'QueryRoot' , 'undefined' ] ,
567
+ [ 'enter' , 'SelectionSet' , null , 'QueryRoot' , 'undefined' ] ,
568
+ [ 'enter' , 'FragmentSpread' , null , 'QueryRoot' , 'undefined' ] ,
569
+ [ 'enter' , 'Name' , 'Foo' , 'QueryRoot' , 'undefined' ] ,
570
+ [ 'leave' , 'Name' , 'Foo' , 'QueryRoot' , 'undefined' ] ,
571
+ [ 'enter' , 'Argument' , null , 'QueryRoot' , 'ID!' ] ,
572
+ [ 'enter' , 'Name' , 'x' , 'QueryRoot' , 'ID!' ] ,
573
+ [ 'leave' , 'Name' , 'x' , 'QueryRoot' , 'ID!' ] ,
574
+ [ 'enter' , 'IntValue' , null , 'QueryRoot' , 'ID!' ] ,
575
+ [ 'leave' , 'IntValue' , null , 'QueryRoot' , 'ID!' ] ,
576
+ [ 'leave' , 'Argument' , null , 'QueryRoot' , 'ID!' ] ,
577
+ [ 'leave' , 'FragmentSpread' , null , 'QueryRoot' , 'undefined' ] ,
578
+ [ 'leave' , 'SelectionSet' , null , 'QueryRoot' , 'undefined' ] ,
579
+ [ 'leave' , 'OperationDefinition' , null , 'QueryRoot' , 'undefined' ] ,
580
+ [ 'enter' , 'FragmentDefinition' , null , 'QueryRoot' , 'undefined' ] ,
581
+ [ 'enter' , 'Name' , 'Foo' , 'QueryRoot' , 'undefined' ] ,
582
+ [ 'leave' , 'Name' , 'Foo' , 'QueryRoot' , 'undefined' ] ,
583
+ [ 'enter' , 'FragmentArgumentDefinition' , null , 'QueryRoot' , 'ID!' ] ,
584
+ [ 'enter' , 'StringValue' , null , 'QueryRoot' , 'ID!' ] ,
585
+ [ 'leave' , 'StringValue' , null , 'QueryRoot' , 'ID!' ] ,
586
+ [ 'enter' , 'Variable' , null , 'QueryRoot' , 'ID!' ] ,
587
+ [ 'enter' , 'Name' , 'x' , 'QueryRoot' , 'ID!' ] ,
588
+ [ 'leave' , 'Name' , 'x' , 'QueryRoot' , 'ID!' ] ,
589
+ [ 'leave' , 'Variable' , null , 'QueryRoot' , 'ID!' ] ,
590
+ [ 'enter' , 'NonNullType' , null , 'QueryRoot' , 'ID!' ] ,
591
+ [ 'enter' , 'NamedType' , null , 'QueryRoot' , 'ID!' ] ,
592
+ [ 'enter' , 'Name' , 'ID' , 'QueryRoot' , 'ID!' ] ,
593
+ [ 'leave' , 'Name' , 'ID' , 'QueryRoot' , 'ID!' ] ,
594
+ [ 'leave' , 'NamedType' , null , 'QueryRoot' , 'ID!' ] ,
595
+ [ 'leave' , 'NonNullType' , null , 'QueryRoot' , 'ID!' ] ,
596
+ [ 'leave' , 'FragmentArgumentDefinition' , null , 'QueryRoot' , 'ID!' ] ,
597
+ [ 'enter' , 'NamedType' , null , 'QueryRoot' , 'undefined' ] ,
598
+ [ 'enter' , 'Name' , 'QueryRoot' , 'QueryRoot' , 'undefined' ] ,
599
+ [ 'leave' , 'Name' , 'QueryRoot' , 'QueryRoot' , 'undefined' ] ,
600
+ [ 'leave' , 'NamedType' , null , 'QueryRoot' , 'undefined' ] ,
601
+ [ 'enter' , 'SelectionSet' , null , 'QueryRoot' , 'undefined' ] ,
602
+ [ 'enter' , 'Field' , null , 'Human' , 'undefined' ] ,
603
+ [ 'enter' , 'Name' , 'human' , 'Human' , 'undefined' ] ,
604
+ [ 'leave' , 'Name' , 'human' , 'Human' , 'undefined' ] ,
605
+ [ 'enter' , 'Argument' , null , 'Human' , 'ID' ] ,
606
+ [ 'enter' , 'Name' , 'id' , 'Human' , 'ID' ] ,
607
+ [ 'leave' , 'Name' , 'id' , 'Human' , 'ID' ] ,
608
+ [ 'enter' , 'Variable' , null , 'Human' , 'ID' ] ,
609
+ [ 'enter' , 'Name' , 'x' , 'Human' , 'ID' ] ,
610
+ [ 'leave' , 'Name' , 'x' , 'Human' , 'ID' ] ,
611
+ [ 'leave' , 'Variable' , null , 'Human' , 'ID' ] ,
612
+ [ 'leave' , 'Argument' , null , 'Human' , 'ID' ] ,
613
+ [ 'enter' , 'SelectionSet' , null , 'Human' , 'undefined' ] ,
614
+ [ 'enter' , 'Field' , null , 'String' , 'undefined' ] ,
615
+ [ 'enter' , 'Name' , 'name' , 'String' , 'undefined' ] ,
616
+ [ 'leave' , 'Name' , 'name' , 'String' , 'undefined' ] ,
617
+ [ 'leave' , 'Field' , null , 'String' , 'undefined' ] ,
618
+ [ 'leave' , 'SelectionSet' , null , 'Human' , 'undefined' ] ,
619
+ [ 'leave' , 'Field' , null , 'Human' , 'undefined' ] ,
620
+ [ 'leave' , 'SelectionSet' , null , 'QueryRoot' , 'undefined' ] ,
621
+ [ 'leave' , 'FragmentDefinition' , null , 'QueryRoot' , 'undefined' ] ,
622
+ [ 'leave' , 'Document' , null , 'undefined' , 'undefined' ] ,
623
+ ] ) ;
624
+ } ) ;
518
625
} ) ;
0 commit comments