@@ -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
@@ -864,4 +870,129 @@ describe('Parser', () => {
864
870
} ) ;
865
871
} ) ;
866
872
} ) ;
873
+
874
+ describe ( 'parseSchemaCoordinate' , ( ) => {
875
+ it ( 'parses Name' , ( ) => {
876
+ const result = parseSchemaCoordinate ( 'MyType' ) ;
877
+ expectJSON ( result ) . toDeepEqual ( {
878
+ kind : Kind . SCHEMA_COORDINATE ,
879
+ loc : { start : 0 , end : 6 } ,
880
+ ofDirective : false ,
881
+ name : {
882
+ kind : Kind . NAME ,
883
+ loc : { start : 0 , end : 6 } ,
884
+ value : 'MyType' ,
885
+ } ,
886
+ memberName : undefined ,
887
+ argumentName : undefined ,
888
+ } ) ;
889
+ } ) ;
890
+
891
+ it ( 'parses Name . Name' , ( ) => {
892
+ const result = parseSchemaCoordinate ( 'MyType.field' ) ;
893
+ expectJSON ( result ) . toDeepEqual ( {
894
+ kind : Kind . SCHEMA_COORDINATE ,
895
+ loc : { start : 0 , end : 12 } ,
896
+ ofDirective : false ,
897
+ name : {
898
+ kind : Kind . NAME ,
899
+ loc : { start : 0 , end : 6 } ,
900
+ value : 'MyType' ,
901
+ } ,
902
+ memberName : {
903
+ kind : Kind . NAME ,
904
+ loc : { start : 7 , end : 12 } ,
905
+ value : 'field' ,
906
+ } ,
907
+ argumentName : undefined ,
908
+ } ) ;
909
+ } ) ;
910
+
911
+ it ( 'rejects Name . Name . Name' , ( ) => {
912
+ expectToThrowJSON ( ( ) =>
913
+ parseSchemaCoordinate ( 'MyType.field.deep' ) ,
914
+ ) . to . deep . equal ( {
915
+ message : 'Syntax Error: Expected <EOF>, found ".".' ,
916
+ locations : [ { line : 1 , column : 13 } ] ,
917
+ } ) ;
918
+ } ) ;
919
+
920
+ it ( 'parses Name . Name ( Name : )' , ( ) => {
921
+ const result = parseSchemaCoordinate ( 'MyType.field(arg:)' ) ;
922
+ expectJSON ( result ) . toDeepEqual ( {
923
+ kind : Kind . SCHEMA_COORDINATE ,
924
+ loc : { start : 0 , end : 18 } ,
925
+ ofDirective : false ,
926
+ name : {
927
+ kind : Kind . NAME ,
928
+ loc : { start : 0 , end : 6 } ,
929
+ value : 'MyType' ,
930
+ } ,
931
+ memberName : {
932
+ kind : Kind . NAME ,
933
+ loc : { start : 7 , end : 12 } ,
934
+ value : 'field' ,
935
+ } ,
936
+ argumentName : {
937
+ kind : Kind . NAME ,
938
+ loc : { start : 13 , end : 16 } ,
939
+ value : 'arg' ,
940
+ } ,
941
+ } ) ;
942
+ } ) ;
943
+
944
+ it ( 'rejects Name . Name ( Name : Name )' , ( ) => {
945
+ expectToThrowJSON ( ( ) =>
946
+ parseSchemaCoordinate ( 'MyType.field(arg: value)' ) ,
947
+ ) . to . deep . equal ( {
948
+ message : 'Syntax Error: Expected ")", found Name "value".' ,
949
+ locations : [ { line : 1 , column : 19 } ] ,
950
+ } ) ;
951
+ } ) ;
952
+
953
+ it ( 'parses @ Name' , ( ) => {
954
+ const result = parseSchemaCoordinate ( '@myDirective' ) ;
955
+ expectJSON ( result ) . toDeepEqual ( {
956
+ kind : Kind . SCHEMA_COORDINATE ,
957
+ loc : { start : 0 , end : 12 } ,
958
+ ofDirective : true ,
959
+ name : {
960
+ kind : Kind . NAME ,
961
+ loc : { start : 1 , end : 12 } ,
962
+ value : 'myDirective' ,
963
+ } ,
964
+ memberName : undefined ,
965
+ argumentName : undefined ,
966
+ } ) ;
967
+ } ) ;
968
+
969
+ it ( 'parses @ Name ( Name : )' , ( ) => {
970
+ const result = parseSchemaCoordinate ( '@myDirective(arg:)' ) ;
971
+ expectJSON ( result ) . toDeepEqual ( {
972
+ kind : Kind . SCHEMA_COORDINATE ,
973
+ loc : { start : 0 , end : 18 } ,
974
+ ofDirective : true ,
975
+ name : {
976
+ kind : Kind . NAME ,
977
+ loc : { start : 1 , end : 12 } ,
978
+ value : 'myDirective' ,
979
+ } ,
980
+ memberName : undefined ,
981
+ argumentName : {
982
+ kind : Kind . NAME ,
983
+ loc : { start : 13 , end : 16 } ,
984
+ value : 'arg' ,
985
+ } ,
986
+ } ) ;
987
+ } ) ;
988
+
989
+ it ( 'rejects @ Name . Name' , ( ) => {
990
+ expectToThrowJSON ( ( ) =>
991
+ parseSchemaCoordinate ( '@myDirective.field' ) ,
992
+ ) . to . deep . equal ( {
993
+ message : 'Syntax Error: Expected <EOF>, found ".".' ,
994
+ locations : [ { line : 1 , column : 13 } ] ,
995
+ } ) ;
996
+ } ) ;
997
+ } ) ;
867
998
} ) ;
0 commit comments