@@ -11,7 +11,13 @@ import { kitchenSinkQuery } from '../../__testUtils__/kitchenSinkQuery.js';
11
11
import { inspect } from '../../jsutils/inspect.js' ;
12
12
13
13
import { Kind } from '../kinds.js' ;
14
- import { parse , parseConstValue , parseType , parseValue } from '../parser.js' ;
14
+ import {
15
+ parse ,
16
+ parseConstValue ,
17
+ parseSchemaCoordinate ,
18
+ parseType ,
19
+ parseValue ,
20
+ } from '../parser.js' ;
15
21
import { Source } from '../source.js' ;
16
22
import { TokenKind } from '../tokenKind.js' ;
17
23
@@ -679,4 +685,129 @@ describe('Parser', () => {
679
685
} ) ;
680
686
} ) ;
681
687
} ) ;
688
+
689
+ describe ( 'parseSchemaCoordinate' , ( ) => {
690
+ it ( 'parses Name' , ( ) => {
691
+ const result = parseSchemaCoordinate ( 'MyType' ) ;
692
+ expectJSON ( result ) . toDeepEqual ( {
693
+ kind : Kind . SCHEMA_COORDINATE ,
694
+ loc : { start : 0 , end : 6 } ,
695
+ ofDirective : false ,
696
+ name : {
697
+ kind : Kind . NAME ,
698
+ loc : { start : 0 , end : 6 } ,
699
+ value : 'MyType' ,
700
+ } ,
701
+ memberName : undefined ,
702
+ argumentName : undefined ,
703
+ } ) ;
704
+ } ) ;
705
+
706
+ it ( 'parses Name . Name' , ( ) => {
707
+ const result = parseSchemaCoordinate ( 'MyType.field' ) ;
708
+ expectJSON ( result ) . toDeepEqual ( {
709
+ kind : Kind . SCHEMA_COORDINATE ,
710
+ loc : { start : 0 , end : 12 } ,
711
+ ofDirective : false ,
712
+ name : {
713
+ kind : Kind . NAME ,
714
+ loc : { start : 0 , end : 6 } ,
715
+ value : 'MyType' ,
716
+ } ,
717
+ memberName : {
718
+ kind : Kind . NAME ,
719
+ loc : { start : 7 , end : 12 } ,
720
+ value : 'field' ,
721
+ } ,
722
+ argumentName : undefined ,
723
+ } ) ;
724
+ } ) ;
725
+
726
+ it ( 'rejects Name . Name . Name' , ( ) => {
727
+ expectToThrowJSON ( ( ) =>
728
+ parseSchemaCoordinate ( 'MyType.field.deep' ) ,
729
+ ) . to . deep . equal ( {
730
+ message : 'Syntax Error: Expected <EOF>, found ".".' ,
731
+ locations : [ { line : 1 , column : 13 } ] ,
732
+ } ) ;
733
+ } ) ;
734
+
735
+ it ( 'parses Name . Name ( Name : )' , ( ) => {
736
+ const result = parseSchemaCoordinate ( 'MyType.field(arg:)' ) ;
737
+ expectJSON ( result ) . toDeepEqual ( {
738
+ kind : Kind . SCHEMA_COORDINATE ,
739
+ loc : { start : 0 , end : 18 } ,
740
+ ofDirective : false ,
741
+ name : {
742
+ kind : Kind . NAME ,
743
+ loc : { start : 0 , end : 6 } ,
744
+ value : 'MyType' ,
745
+ } ,
746
+ memberName : {
747
+ kind : Kind . NAME ,
748
+ loc : { start : 7 , end : 12 } ,
749
+ value : 'field' ,
750
+ } ,
751
+ argumentName : {
752
+ kind : Kind . NAME ,
753
+ loc : { start : 13 , end : 16 } ,
754
+ value : 'arg' ,
755
+ } ,
756
+ } ) ;
757
+ } ) ;
758
+
759
+ it ( 'rejects Name . Name ( Name : Name )' , ( ) => {
760
+ expectToThrowJSON ( ( ) =>
761
+ parseSchemaCoordinate ( 'MyType.field(arg: value)' ) ,
762
+ ) . to . deep . equal ( {
763
+ message : 'Syntax Error: Expected ")", found Name "value".' ,
764
+ locations : [ { line : 1 , column : 19 } ] ,
765
+ } ) ;
766
+ } ) ;
767
+
768
+ it ( 'parses @ Name' , ( ) => {
769
+ const result = parseSchemaCoordinate ( '@myDirective' ) ;
770
+ expectJSON ( result ) . toDeepEqual ( {
771
+ kind : Kind . SCHEMA_COORDINATE ,
772
+ loc : { start : 0 , end : 12 } ,
773
+ ofDirective : true ,
774
+ name : {
775
+ kind : Kind . NAME ,
776
+ loc : { start : 1 , end : 12 } ,
777
+ value : 'myDirective' ,
778
+ } ,
779
+ memberName : undefined ,
780
+ argumentName : undefined ,
781
+ } ) ;
782
+ } ) ;
783
+
784
+ it ( 'parses @ Name ( Name : )' , ( ) => {
785
+ const result = parseSchemaCoordinate ( '@myDirective(arg:)' ) ;
786
+ expectJSON ( result ) . toDeepEqual ( {
787
+ kind : Kind . SCHEMA_COORDINATE ,
788
+ loc : { start : 0 , end : 18 } ,
789
+ ofDirective : true ,
790
+ name : {
791
+ kind : Kind . NAME ,
792
+ loc : { start : 1 , end : 12 } ,
793
+ value : 'myDirective' ,
794
+ } ,
795
+ memberName : undefined ,
796
+ argumentName : {
797
+ kind : Kind . NAME ,
798
+ loc : { start : 13 , end : 16 } ,
799
+ value : 'arg' ,
800
+ } ,
801
+ } ) ;
802
+ } ) ;
803
+
804
+ it ( 'rejects @ Name . Name' , ( ) => {
805
+ expectToThrowJSON ( ( ) =>
806
+ parseSchemaCoordinate ( '@myDirective.field' ) ,
807
+ ) . to . deep . equal ( {
808
+ message : 'Syntax Error: Expected <EOF>, found ".".' ,
809
+ locations : [ { line : 1 , column : 13 } ] ,
810
+ } ) ;
811
+ } ) ;
812
+ } ) ;
682
813
} ) ;
0 commit comments