@@ -757,6 +757,180 @@ describe('Parser', () => {
757757 } ) ;
758758 } ) ;
759759
760+ describe ( 'parseSchemaCoordinate' , ( ) => {
761+ it ( 'parses Name' , ( ) => {
762+ const result = parseSchemaCoordinate ( 'MyType' ) ;
763+ expectJSON ( result ) . toDeepEqual ( {
764+ kind : Kind . TYPE_COORDINATE ,
765+ loc : { start : 0 , end : 6 } ,
766+ name : {
767+ kind : Kind . NAME ,
768+ loc : { start : 0 , end : 6 } ,
769+ value : 'MyType' ,
770+ } ,
771+ } ) ;
772+ } ) ;
773+
774+ it ( 'parses Name . Name' , ( ) => {
775+ const result = parseSchemaCoordinate ( 'MyType.field' ) ;
776+ expectJSON ( result ) . toDeepEqual ( {
777+ kind : Kind . MEMBER_COORDINATE ,
778+ loc : { start : 0 , end : 12 } ,
779+ name : {
780+ kind : Kind . NAME ,
781+ loc : { start : 0 , end : 6 } ,
782+ value : 'MyType' ,
783+ } ,
784+ memberName : {
785+ kind : Kind . NAME ,
786+ loc : { start : 7 , end : 12 } ,
787+ value : 'field' ,
788+ } ,
789+ } ) ;
790+ } ) ;
791+
792+ it ( 'rejects Name . Name . Name' , ( ) => {
793+ expect ( ( ) => parseSchemaCoordinate ( 'MyType.field.deep' ) )
794+ . to . throw ( )
795+ . to . deep . include ( {
796+ message : 'Syntax Error: Expected <EOF>, found ".".' ,
797+ locations : [ { line : 1 , column : 13 } ] ,
798+ } ) ;
799+ } ) ;
800+
801+ it ( 'parses Name . Name ( Name : )' , ( ) => {
802+ const result = parseSchemaCoordinate ( 'MyType.field(arg:)' ) ;
803+ expectJSON ( result ) . toDeepEqual ( {
804+ kind : Kind . ARGUMENT_COORDINATE ,
805+ loc : { start : 0 , end : 18 } ,
806+ name : {
807+ kind : Kind . NAME ,
808+ loc : { start : 0 , end : 6 } ,
809+ value : 'MyType' ,
810+ } ,
811+ fieldName : {
812+ kind : Kind . NAME ,
813+ loc : { start : 7 , end : 12 } ,
814+ value : 'field' ,
815+ } ,
816+ argumentName : {
817+ kind : Kind . NAME ,
818+ loc : { start : 13 , end : 16 } ,
819+ value : 'arg' ,
820+ } ,
821+ } ) ;
822+ } ) ;
823+
824+ it ( 'rejects Name . Name ( Name : Name )' , ( ) => {
825+ expect ( ( ) => parseSchemaCoordinate ( 'MyType.field(arg: value)' ) )
826+ . to . throw ( )
827+ . to . deep . include ( {
828+ message : 'Syntax Error: Invalid character: " ".' ,
829+ locations : [ { line : 1 , column : 18 } ] ,
830+ } ) ;
831+ } ) ;
832+
833+ it ( 'parses @ Name' , ( ) => {
834+ const result = parseSchemaCoordinate ( '@myDirective' ) ;
835+ expectJSON ( result ) . toDeepEqual ( {
836+ kind : Kind . DIRECTIVE_COORDINATE ,
837+ loc : { start : 0 , end : 12 } ,
838+ name : {
839+ kind : Kind . NAME ,
840+ loc : { start : 1 , end : 12 } ,
841+ value : 'myDirective' ,
842+ } ,
843+ } ) ;
844+ } ) ;
845+
846+ it ( 'parses @ Name ( Name : )' , ( ) => {
847+ const result = parseSchemaCoordinate ( '@myDirective(arg:)' ) ;
848+ expectJSON ( result ) . toDeepEqual ( {
849+ kind : Kind . DIRECTIVE_ARGUMENT_COORDINATE ,
850+ loc : { start : 0 , end : 18 } ,
851+ name : {
852+ kind : Kind . NAME ,
853+ loc : { start : 1 , end : 12 } ,
854+ value : 'myDirective' ,
855+ } ,
856+ argumentName : {
857+ kind : Kind . NAME ,
858+ loc : { start : 13 , end : 16 } ,
859+ value : 'arg' ,
860+ } ,
861+ } ) ;
862+ } ) ;
863+
864+ it ( 'parses __Type' , ( ) => {
865+ const result = parseSchemaCoordinate ( '__Type' ) ;
866+ expectJSON ( result ) . toDeepEqual ( {
867+ kind : Kind . TYPE_COORDINATE ,
868+ loc : { start : 0 , end : 6 } ,
869+ name : {
870+ kind : Kind . NAME ,
871+ loc : { start : 0 , end : 6 } ,
872+ value : '__Type' ,
873+ } ,
874+ } ) ;
875+ } ) ;
876+
877+ it ( 'parses Type.__metafield' , ( ) => {
878+ const result = parseSchemaCoordinate ( 'Type.__metafield' ) ;
879+ expectJSON ( result ) . toDeepEqual ( {
880+ kind : Kind . MEMBER_COORDINATE ,
881+ loc : { start : 0 , end : 16 } ,
882+ name : {
883+ kind : Kind . NAME ,
884+ loc : { start : 0 , end : 4 } ,
885+ value : 'Type' ,
886+ } ,
887+ memberName : {
888+ kind : Kind . NAME ,
889+ loc : { start : 5 , end : 16 } ,
890+ value : '__metafield' ,
891+ } ,
892+ } ) ;
893+ } ) ;
894+
895+ it ( 'parses Type.__metafield(arg:)' , ( ) => {
896+ const result = parseSchemaCoordinate ( 'Type.__metafield(arg:)' ) ;
897+ expectJSON ( result ) . toDeepEqual ( {
898+ kind : Kind . ARGUMENT_COORDINATE ,
899+ loc : { start : 0 , end : 22 } ,
900+ name : {
901+ kind : Kind . NAME ,
902+ loc : { start : 0 , end : 4 } ,
903+ value : 'Type' ,
904+ } ,
905+ fieldName : {
906+ kind : Kind . NAME ,
907+ loc : { start : 5 , end : 16 } ,
908+ value : '__metafield' ,
909+ } ,
910+ argumentName : {
911+ kind : Kind . NAME ,
912+ loc : { start : 17 , end : 20 } ,
913+ value : 'arg' ,
914+ } ,
915+ } ) ;
916+ } ) ;
917+
918+ it ( 'rejects @ Name . Name' , ( ) => {
919+ expect ( ( ) => parseSchemaCoordinate ( '@myDirective.field' ) )
920+ . to . throw ( )
921+ . to . deep . include ( {
922+ message : 'Syntax Error: Expected <EOF>, found ".".' ,
923+ locations : [ { line : 1 , column : 13 } ] ,
924+ } ) ;
925+ } ) ;
926+
927+ it ( 'accepts a Source object' , ( ) => {
928+ expect ( parseSchemaCoordinate ( 'MyType' ) ) . to . deep . equal (
929+ parseSchemaCoordinate ( new Source ( 'MyType' ) ) ,
930+ ) ;
931+ } ) ;
932+ } ) ;
933+
760934 describe ( 'operation and variable definition descriptions' , ( ) => {
761935 it ( 'parses operation with description and variable descriptions' , ( ) => {
762936 const result = parse ( dedent `
@@ -771,6 +945,7 @@ describe('Parser', () => {
771945 }
772946 ` ) ;
773947
948+ // Find the operation definition
774949 const opDef = result . definitions . find (
775950 ( d ) => d . kind === Kind . OPERATION_DEFINITION ,
776951 ) ;
@@ -1031,178 +1206,4 @@ describe('Parser', () => {
10311206 } ) ;
10321207 } ) ;
10331208 } ) ;
1034-
1035- describe ( 'parseSchemaCoordinate' , ( ) => {
1036- it ( 'parses Name' , ( ) => {
1037- const result = parseSchemaCoordinate ( 'MyType' ) ;
1038- expectJSON ( result ) . toDeepEqual ( {
1039- kind : Kind . TYPE_COORDINATE ,
1040- loc : { start : 0 , end : 6 } ,
1041- name : {
1042- kind : Kind . NAME ,
1043- loc : { start : 0 , end : 6 } ,
1044- value : 'MyType' ,
1045- } ,
1046- } ) ;
1047- } ) ;
1048-
1049- it ( 'parses Name . Name' , ( ) => {
1050- const result = parseSchemaCoordinate ( 'MyType.field' ) ;
1051- expectJSON ( result ) . toDeepEqual ( {
1052- kind : Kind . MEMBER_COORDINATE ,
1053- loc : { start : 0 , end : 12 } ,
1054- name : {
1055- kind : Kind . NAME ,
1056- loc : { start : 0 , end : 6 } ,
1057- value : 'MyType' ,
1058- } ,
1059- memberName : {
1060- kind : Kind . NAME ,
1061- loc : { start : 7 , end : 12 } ,
1062- value : 'field' ,
1063- } ,
1064- } ) ;
1065- } ) ;
1066-
1067- it ( 'rejects Name . Name . Name' , ( ) => {
1068- expect ( ( ) => parseSchemaCoordinate ( 'MyType.field.deep' ) )
1069- . to . throw ( )
1070- . to . deep . include ( {
1071- message : 'Syntax Error: Expected <EOF>, found ".".' ,
1072- locations : [ { line : 1 , column : 13 } ] ,
1073- } ) ;
1074- } ) ;
1075-
1076- it ( 'parses Name . Name ( Name : )' , ( ) => {
1077- const result = parseSchemaCoordinate ( 'MyType.field(arg:)' ) ;
1078- expectJSON ( result ) . toDeepEqual ( {
1079- kind : Kind . ARGUMENT_COORDINATE ,
1080- loc : { start : 0 , end : 18 } ,
1081- name : {
1082- kind : Kind . NAME ,
1083- loc : { start : 0 , end : 6 } ,
1084- value : 'MyType' ,
1085- } ,
1086- fieldName : {
1087- kind : Kind . NAME ,
1088- loc : { start : 7 , end : 12 } ,
1089- value : 'field' ,
1090- } ,
1091- argumentName : {
1092- kind : Kind . NAME ,
1093- loc : { start : 13 , end : 16 } ,
1094- value : 'arg' ,
1095- } ,
1096- } ) ;
1097- } ) ;
1098-
1099- it ( 'rejects Name . Name ( Name : Name )' , ( ) => {
1100- expect ( ( ) => parseSchemaCoordinate ( 'MyType.field(arg: value)' ) )
1101- . to . throw ( )
1102- . to . deep . include ( {
1103- message : 'Syntax Error: Invalid character: " ".' ,
1104- locations : [ { line : 1 , column : 18 } ] ,
1105- } ) ;
1106- } ) ;
1107-
1108- it ( 'parses @ Name' , ( ) => {
1109- const result = parseSchemaCoordinate ( '@myDirective' ) ;
1110- expectJSON ( result ) . toDeepEqual ( {
1111- kind : Kind . DIRECTIVE_COORDINATE ,
1112- loc : { start : 0 , end : 12 } ,
1113- name : {
1114- kind : Kind . NAME ,
1115- loc : { start : 1 , end : 12 } ,
1116- value : 'myDirective' ,
1117- } ,
1118- } ) ;
1119- } ) ;
1120-
1121- it ( 'parses @ Name ( Name : )' , ( ) => {
1122- const result = parseSchemaCoordinate ( '@myDirective(arg:)' ) ;
1123- expectJSON ( result ) . toDeepEqual ( {
1124- kind : Kind . DIRECTIVE_ARGUMENT_COORDINATE ,
1125- loc : { start : 0 , end : 18 } ,
1126- name : {
1127- kind : Kind . NAME ,
1128- loc : { start : 1 , end : 12 } ,
1129- value : 'myDirective' ,
1130- } ,
1131- argumentName : {
1132- kind : Kind . NAME ,
1133- loc : { start : 13 , end : 16 } ,
1134- value : 'arg' ,
1135- } ,
1136- } ) ;
1137- } ) ;
1138-
1139- it ( 'parses __Type' , ( ) => {
1140- const result = parseSchemaCoordinate ( '__Type' ) ;
1141- expectJSON ( result ) . toDeepEqual ( {
1142- kind : Kind . TYPE_COORDINATE ,
1143- loc : { start : 0 , end : 6 } ,
1144- name : {
1145- kind : Kind . NAME ,
1146- loc : { start : 0 , end : 6 } ,
1147- value : '__Type' ,
1148- } ,
1149- } ) ;
1150- } ) ;
1151-
1152- it ( 'parses Type.__metafield' , ( ) => {
1153- const result = parseSchemaCoordinate ( 'Type.__metafield' ) ;
1154- expectJSON ( result ) . toDeepEqual ( {
1155- kind : Kind . MEMBER_COORDINATE ,
1156- loc : { start : 0 , end : 16 } ,
1157- name : {
1158- kind : Kind . NAME ,
1159- loc : { start : 0 , end : 4 } ,
1160- value : 'Type' ,
1161- } ,
1162- memberName : {
1163- kind : Kind . NAME ,
1164- loc : { start : 5 , end : 16 } ,
1165- value : '__metafield' ,
1166- } ,
1167- } ) ;
1168- } ) ;
1169-
1170- it ( 'parses Type.__metafield(arg:)' , ( ) => {
1171- const result = parseSchemaCoordinate ( 'Type.__metafield(arg:)' ) ;
1172- expectJSON ( result ) . toDeepEqual ( {
1173- kind : Kind . ARGUMENT_COORDINATE ,
1174- loc : { start : 0 , end : 22 } ,
1175- name : {
1176- kind : Kind . NAME ,
1177- loc : { start : 0 , end : 4 } ,
1178- value : 'Type' ,
1179- } ,
1180- fieldName : {
1181- kind : Kind . NAME ,
1182- loc : { start : 5 , end : 16 } ,
1183- value : '__metafield' ,
1184- } ,
1185- argumentName : {
1186- kind : Kind . NAME ,
1187- loc : { start : 17 , end : 20 } ,
1188- value : 'arg' ,
1189- } ,
1190- } ) ;
1191- } ) ;
1192-
1193- it ( 'rejects @ Name . Name' , ( ) => {
1194- expect ( ( ) => parseSchemaCoordinate ( '@myDirective.field' ) )
1195- . to . throw ( )
1196- . to . deep . include ( {
1197- message : 'Syntax Error: Expected <EOF>, found ".".' ,
1198- locations : [ { line : 1 , column : 13 } ] ,
1199- } ) ;
1200- } ) ;
1201-
1202- it ( 'accepts a Source object' , ( ) => {
1203- expect ( parseSchemaCoordinate ( 'MyType' ) ) . to . deep . equal (
1204- parseSchemaCoordinate ( new Source ( 'MyType' ) ) ,
1205- ) ;
1206- } ) ;
1207- } ) ;
12081209} ) ;
0 commit comments