@@ -372,6 +372,128 @@ describe('Parser', () => {
372
372
expect ( ( ) => parse ( document ) ) . to . throw ( 'Syntax Error' ) ;
373
373
} ) ;
374
374
375
+ it ( 'Legacy: allows parsing fragment spread arguments if `allowLegacyFragmentVariables` is enabled' , ( ) => {
376
+ const fragmentSpread = '{ ...Foo(v: $v) }' ;
377
+
378
+ expect ( ( ) =>
379
+ parse ( fragmentSpread , { allowLegacyFragmentVariables : true } ) ,
380
+ ) . to . not . throw ( ) ;
381
+ expect ( ( ) => parse ( fragmentSpread ) ) . to . throw ( 'Syntax Error' ) ;
382
+ } ) ;
383
+
384
+ it ( 'Legacy: does not parse arguments on inline fragments' , ( ) => {
385
+ const inlineFragment = '{ ... on Foo(v: $v) { id } }' ;
386
+ expect ( ( ) =>
387
+ parse ( inlineFragment , { allowLegacyFragmentVariables : true } ) ,
388
+ ) . to . throw ( 'Syntax Error' ) ;
389
+ } ) ;
390
+
391
+ it ( 'Legacy: parses fragment spread arguments' , ( ) => {
392
+ const document = parse ( '{ ...Foo(v: $v) }' , {
393
+ allowLegacyFragmentVariables : true ,
394
+ } ) ;
395
+
396
+ expect ( toJSONDeep ( document ) ) . to . have . deep . nested . property (
397
+ 'definitions[0].selectionSet.selections[0]' ,
398
+ {
399
+ arguments : [
400
+ {
401
+ kind : Kind . ARGUMENT ,
402
+ loc : { end : 14 , start : 9 } ,
403
+ name : {
404
+ kind : Kind . NAME ,
405
+ loc : { end : 10 , start : 9 } ,
406
+ value : 'v' ,
407
+ } ,
408
+ value : {
409
+ kind : Kind . VARIABLE ,
410
+ loc : { end : 14 , start : 12 } ,
411
+ name : {
412
+ kind : Kind . NAME ,
413
+ loc : { end : 14 , start : 13 } ,
414
+ value : 'v' ,
415
+ } ,
416
+ } ,
417
+ } ,
418
+ ] ,
419
+ directives : [ ] ,
420
+ kind : Kind . FRAGMENT_SPREAD ,
421
+ loc : { end : 15 , start : 2 } ,
422
+ name : {
423
+ kind : Kind . NAME ,
424
+ loc : { end : 8 , start : 5 } ,
425
+ value : 'Foo' ,
426
+ } ,
427
+ } ,
428
+ ) ;
429
+ } ) ;
430
+
431
+ it ( 'Legacy: parses fragment spread arguments and directives' , ( ) => {
432
+ const document = parse ( '{ ...Foo(v: $v) @skip(if: true) }' , {
433
+ allowLegacyFragmentVariables : true ,
434
+ } ) ;
435
+
436
+ expect ( toJSONDeep ( document ) ) . to . have . deep . nested . property (
437
+ 'definitions[0].selectionSet.selections[0]' ,
438
+ {
439
+ arguments : [
440
+ {
441
+ kind : Kind . ARGUMENT ,
442
+ loc : { end : 14 , start : 9 } ,
443
+ name : {
444
+ kind : Kind . NAME ,
445
+ loc : { end : 10 , start : 9 } ,
446
+ value : 'v' ,
447
+ } ,
448
+ value : {
449
+ kind : Kind . VARIABLE ,
450
+ loc : { end : 14 , start : 12 } ,
451
+ name : {
452
+ kind : Kind . NAME ,
453
+ loc : { end : 14 , start : 13 } ,
454
+ value : 'v' ,
455
+ } ,
456
+ } ,
457
+ } ,
458
+ ] ,
459
+ directives : [
460
+ {
461
+ arguments : [
462
+ {
463
+ kind : Kind . ARGUMENT ,
464
+ loc : { end : 30 , start : 22 } ,
465
+ name : {
466
+ kind : Kind . NAME ,
467
+ loc : { end : 24 , start : 22 } ,
468
+ value : 'if' ,
469
+ } ,
470
+ value : {
471
+ kind : Kind . BOOLEAN ,
472
+ loc : { end : 30 , start : 26 } ,
473
+ value : true ,
474
+ } ,
475
+ } ,
476
+ ] ,
477
+ kind : Kind . DIRECTIVE ,
478
+ loc : { end : 31 , start : 16 } ,
479
+ name : {
480
+ kind : Kind . NAME ,
481
+ loc : { end : 21 , start : 17 } ,
482
+ value : 'skip' ,
483
+ } ,
484
+ } ,
485
+ ] ,
486
+ kind : Kind . FRAGMENT_SPREAD ,
487
+ loc : { end : 31 , start : 2 } ,
488
+ name : {
489
+ kind : Kind . NAME ,
490
+ loc : { end : 8 , start : 5 } ,
491
+ value : 'Foo' ,
492
+ } ,
493
+ } ,
494
+ ) ;
495
+ } ) ;
496
+
375
497
it ( 'contains location information that only stringifies start/end' , ( ) => {
376
498
const result = parse ( '{ id }' ) ;
377
499
0 commit comments