@@ -9,7 +9,13 @@ import { inspect } from '../../jsutils/inspect';
99import { Kind } from '../kinds' ;
1010import { Source } from '../source' ;
1111import { TokenKind } from '../tokenKind' ;
12- import { parse , parseValue , parseConstValue , parseType } from '../parser' ;
12+ import {
13+ parse ,
14+ parseValue ,
15+ parseConstValue ,
16+ parseType ,
17+ parseSchemaCoordinate ,
18+ } from '../parser' ;
1319
1420import { toJSONDeep } from './toJSONDeep' ;
1521
@@ -619,4 +625,129 @@ describe('Parser', () => {
619625 } ) ;
620626 } ) ;
621627 } ) ;
628+
629+ describe ( 'parseSchemaCoordinate' , ( ) => {
630+ it ( 'parses Name' , ( ) => {
631+ const result = parseSchemaCoordinate ( 'MyType' ) ;
632+ expect ( toJSONDeep ( result ) ) . to . deep . equal ( {
633+ kind : Kind . SCHEMA_COORDINATE ,
634+ loc : { start : 0 , end : 6 } ,
635+ isDirective : false ,
636+ name : {
637+ kind : Kind . NAME ,
638+ loc : { start : 0 , end : 6 } ,
639+ value : 'MyType' ,
640+ } ,
641+ fieldName : undefined ,
642+ argumentName : undefined ,
643+ } ) ;
644+ } ) ;
645+
646+ it ( 'parses Name . Name' , ( ) => {
647+ const result = parseSchemaCoordinate ( 'MyType.field' ) ;
648+ expect ( toJSONDeep ( result ) ) . to . deep . equal ( {
649+ kind : Kind . SCHEMA_COORDINATE ,
650+ loc : { start : 0 , end : 12 } ,
651+ isDirective : false ,
652+ name : {
653+ kind : Kind . NAME ,
654+ loc : { start : 0 , end : 6 } ,
655+ value : 'MyType' ,
656+ } ,
657+ fieldName : {
658+ kind : Kind . NAME ,
659+ loc : { start : 7 , end : 12 } ,
660+ value : 'field' ,
661+ } ,
662+ argumentName : undefined ,
663+ } ) ;
664+ } ) ;
665+
666+ it ( 'rejects Name . Name . Name' , ( ) => {
667+ expect ( ( ) => parseSchemaCoordinate ( 'MyType.field.deep' ) )
668+ . to . throw ( )
669+ . to . deep . equal ( {
670+ message : 'Syntax Error: Expected <EOF>, found ".".' ,
671+ locations : [ { line : 1 , column : 13 } ] ,
672+ } ) ;
673+ } ) ;
674+
675+ it ( 'parses Name . Name ( Name : )' , ( ) => {
676+ const result = parseSchemaCoordinate ( 'MyType.field(arg:)' ) ;
677+ expect ( toJSONDeep ( result ) ) . to . deep . equal ( {
678+ kind : Kind . SCHEMA_COORDINATE ,
679+ loc : { start : 0 , end : 18 } ,
680+ isDirective : false ,
681+ name : {
682+ kind : Kind . NAME ,
683+ loc : { start : 0 , end : 6 } ,
684+ value : 'MyType' ,
685+ } ,
686+ fieldName : {
687+ kind : Kind . NAME ,
688+ loc : { start : 7 , end : 12 } ,
689+ value : 'field' ,
690+ } ,
691+ argumentName : {
692+ kind : Kind . NAME ,
693+ loc : { start : 13 , end : 16 } ,
694+ value : 'arg' ,
695+ } ,
696+ } ) ;
697+ } ) ;
698+
699+ it ( 'rejects Name . Name ( Name : Name )' , ( ) => {
700+ expect ( ( ) => parseSchemaCoordinate ( 'MyType.field(arg: value)' ) )
701+ . to . throw ( )
702+ . to . deep . equal ( {
703+ message : 'Syntax Error: Expected ")", found Name "value".' ,
704+ locations : [ { line : 1 , column : 19 } ] ,
705+ } ) ;
706+ } ) ;
707+
708+ it ( 'parses @ Name' , ( ) => {
709+ const result = parseSchemaCoordinate ( '@myDirective' ) ;
710+ expect ( toJSONDeep ( result ) ) . to . deep . equal ( {
711+ kind : Kind . SCHEMA_COORDINATE ,
712+ loc : { start : 0 , end : 12 } ,
713+ isDirective : true ,
714+ name : {
715+ kind : Kind . NAME ,
716+ loc : { start : 1 , end : 12 } ,
717+ value : 'myDirective' ,
718+ } ,
719+ fieldName : undefined ,
720+ argumentName : undefined ,
721+ } ) ;
722+ } ) ;
723+
724+ it ( 'parses @ Name ( Name : )' , ( ) => {
725+ const result = parseSchemaCoordinate ( '@myDirective(arg:)' ) ;
726+ expect ( toJSONDeep ( result ) ) . to . deep . equal ( {
727+ kind : Kind . SCHEMA_COORDINATE ,
728+ loc : { start : 0 , end : 18 } ,
729+ isDirective : true ,
730+ name : {
731+ kind : Kind . NAME ,
732+ loc : { start : 1 , end : 12 } ,
733+ value : 'myDirective' ,
734+ } ,
735+ fieldName : undefined ,
736+ argumentName : {
737+ kind : Kind . NAME ,
738+ loc : { start : 13 , end : 16 } ,
739+ value : 'arg' ,
740+ } ,
741+ } ) ;
742+ } ) ;
743+
744+ it ( 'rejects @ Name . Name' , ( ) => {
745+ expect ( ( ) => parseSchemaCoordinate ( '@myDirective.field' ) )
746+ . to . throw ( )
747+ . to . deep . equal ( {
748+ message : 'Syntax Error: Expected <EOF>, found ".".' ,
749+ locations : [ { line : 1 , column : 13 } ] ,
750+ } ) ;
751+ } ) ;
752+ } ) ;
622753} ) ;
0 commit comments