@@ -515,4 +515,111 @@ describe('visitWithTypeInfo', () => {
515515 [ 'leave' , 'SelectionSet' , null , 'Human' , 'Human' ] ,
516516 ] ) ;
517517 } ) ;
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+ } ) ;
518625} ) ;
0 commit comments