@@ -418,6 +418,49 @@ describe('Visitor', () => {
418418 ] ) ;
419419 } ) ;
420420
421+ it ( 'visit nodes with unknown kinds but does not traverse deeper' , ( ) => {
422+ const customAST = parse ( '{ a }' ) ;
423+ // $FlowExpectedError[prop-missing]
424+ customAST . definitions [ 0 ] . selectionSet . selections . push ( {
425+ kind : 'CustomField' ,
426+ name : { kind : 'Name' , value : 'NamedNodeToBeSkipped' } ,
427+ selectionSet : {
428+ kind : 'SelectionSet' ,
429+ selections : [
430+ {
431+ kind : 'CustomField' ,
432+ name : { kind : 'Name' , value : 'NamedNodeToBeSkipped' } ,
433+ } ,
434+ ] ,
435+ } ,
436+ } ) ;
437+
438+ const visited = [ ] ;
439+ visit ( customAST , {
440+ enter ( node ) {
441+ visited . push ( [ 'enter' , node . kind , getValue ( node ) ] ) ;
442+ } ,
443+ leave ( node ) {
444+ visited . push ( [ 'leave' , node . kind , getValue ( node ) ] ) ;
445+ } ,
446+ } ) ;
447+
448+ expect ( visited ) . to . deep . equal ( [
449+ [ 'enter' , 'Document' , undefined ] ,
450+ [ 'enter' , 'OperationDefinition' , undefined ] ,
451+ [ 'enter' , 'SelectionSet' , undefined ] ,
452+ [ 'enter' , 'Field' , undefined ] ,
453+ [ 'enter' , 'Name' , 'a' ] ,
454+ [ 'leave' , 'Name' , 'a' ] ,
455+ [ 'leave' , 'Field' , undefined ] ,
456+ [ 'enter' , 'CustomField' , undefined ] ,
457+ [ 'leave' , 'CustomField' , undefined ] ,
458+ [ 'leave' , 'SelectionSet' , undefined ] ,
459+ [ 'leave' , 'OperationDefinition' , undefined ] ,
460+ [ 'leave' , 'Document' , undefined ] ,
461+ ] ) ;
462+ } ) ;
463+
421464 it ( 'Legacy: visits variables defined in fragments' , ( ) => {
422465 const ast = parse ( 'fragment a($v: Boolean = false) on t { f }' , {
423466 noLocation : true ,
@@ -845,56 +888,6 @@ describe('Visitor', () => {
845888 ] ) ;
846889 } ) ;
847890
848- describe ( 'Support for custom AST nodes' , ( ) => {
849- const customAST = parse ( '{ a }' ) ;
850- ( customAST : any ) . definitions [ 0 ] . selectionSet . selections . push ( {
851- kind : 'CustomField' ,
852- name : {
853- kind : 'Name' ,
854- value : 'b' ,
855- } ,
856- selectionSet : {
857- kind : 'SelectionSet' ,
858- selections : [
859- {
860- kind : 'CustomField' ,
861- name : {
862- kind : 'Name' ,
863- value : 'c' ,
864- } ,
865- } ,
866- ] ,
867- } ,
868- } ) ;
869-
870- it ( 'does not traverse unknown node kinds' , ( ) => {
871- const visited = [ ] ;
872- visit ( customAST , {
873- enter ( node ) {
874- visited . push ( [ 'enter' , node . kind , getValue ( node ) ] ) ;
875- } ,
876- leave ( node ) {
877- visited . push ( [ 'leave' , node . kind , getValue ( node ) ] ) ;
878- } ,
879- } ) ;
880-
881- expect ( visited ) . to . deep . equal ( [
882- [ 'enter' , 'Document' , undefined ] ,
883- [ 'enter' , 'OperationDefinition' , undefined ] ,
884- [ 'enter' , 'SelectionSet' , undefined ] ,
885- [ 'enter' , 'Field' , undefined ] ,
886- [ 'enter' , 'Name' , 'a' ] ,
887- [ 'leave' , 'Name' , 'a' ] ,
888- [ 'leave' , 'Field' , undefined ] ,
889- [ 'enter' , 'CustomField' , undefined ] ,
890- [ 'leave' , 'CustomField' , undefined ] ,
891- [ 'leave' , 'SelectionSet' , undefined ] ,
892- [ 'leave' , 'OperationDefinition' , undefined ] ,
893- [ 'leave' , 'Document' , undefined ] ,
894- ] ) ;
895- } ) ;
896- } ) ;
897-
898891 describe ( 'visitInParallel' , ( ) => {
899892 // Note: nearly identical to the above test of the same test but
900893 // using visitInParallel.
0 commit comments