@@ -9,7 +9,13 @@ import { inspect } from '../../jsutils/inspect';
9
9
import { Kind } from '../kinds' ;
10
10
import { Source } from '../source' ;
11
11
import { 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' ;
13
19
14
20
import { toJSONDeep } from './toJSONDeep' ;
15
21
@@ -619,4 +625,129 @@ describe('Parser', () => {
619
625
} ) ;
620
626
} ) ;
621
627
} ) ;
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
+ ofDirective : false ,
636
+ name : {
637
+ kind : Kind . NAME ,
638
+ loc : { start : 0 , end : 6 } ,
639
+ value : 'MyType' ,
640
+ } ,
641
+ memberName : 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
+ ofDirective : false ,
652
+ name : {
653
+ kind : Kind . NAME ,
654
+ loc : { start : 0 , end : 6 } ,
655
+ value : 'MyType' ,
656
+ } ,
657
+ memberName : {
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
+ ofDirective : false ,
681
+ name : {
682
+ kind : Kind . NAME ,
683
+ loc : { start : 0 , end : 6 } ,
684
+ value : 'MyType' ,
685
+ } ,
686
+ memberName : {
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
+ ofDirective : true ,
714
+ name : {
715
+ kind : Kind . NAME ,
716
+ loc : { start : 1 , end : 12 } ,
717
+ value : 'myDirective' ,
718
+ } ,
719
+ memberName : 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
+ ofDirective : true ,
730
+ name : {
731
+ kind : Kind . NAME ,
732
+ loc : { start : 1 , end : 12 } ,
733
+ value : 'myDirective' ,
734
+ } ,
735
+ memberName : 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
+ } ) ;
622
753
} ) ;
0 commit comments