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