|
1 | 1 | <?php |
2 | 2 | namespace GraphQL\Tests\Language; |
3 | 3 |
|
4 | | -use GraphQL\Language\AST\BooleanValueNode; |
5 | | -use GraphQL\Language\AST\DocumentNode; |
6 | | -use GraphQL\Language\AST\EnumTypeDefinitionNode; |
7 | | -use GraphQL\Language\AST\EnumValueDefinitionNode; |
8 | | -use GraphQL\Language\AST\FieldDefinitionNode; |
9 | | -use GraphQL\Language\AST\InputObjectTypeDefinitionNode; |
10 | | -use GraphQL\Language\AST\InputValueDefinitionNode; |
11 | | -use GraphQL\Language\AST\InterfaceTypeDefinitionNode; |
12 | | -use GraphQL\Language\AST\ListTypeNode; |
13 | | -use GraphQL\Language\AST\Location; |
14 | | -use GraphQL\Language\AST\NameNode; |
15 | | -use GraphQL\Language\AST\NamedTypeNode; |
16 | | -use GraphQL\Language\AST\Node; |
| 4 | +use GraphQL\Error\SyntaxError; |
17 | 5 | use GraphQL\Language\AST\NodeKind; |
18 | | -use GraphQL\Language\AST\NonNullTypeNode; |
19 | | -use GraphQL\Language\AST\ObjectTypeDefinitionNode; |
20 | | -use GraphQL\Language\AST\ScalarTypeDefinitionNode; |
21 | | -use GraphQL\Language\AST\TypeExtensionDefinitionNode; |
22 | | -use GraphQL\Language\AST\UnionTypeDefinitionNode; |
23 | 6 | use GraphQL\Language\Parser; |
24 | | -use GraphQL\Language\Source; |
25 | 7 |
|
26 | 8 | class SchemaParserTest extends \PHPUnit_Framework_TestCase |
27 | 9 | { |
@@ -541,6 +523,86 @@ public function testUnionWithTwoTypes() |
541 | 523 | $this->assertEquals($expected, TestUtils::nodeToArray($doc)); |
542 | 524 | } |
543 | 525 |
|
| 526 | + |
| 527 | + /** |
| 528 | + * @it Union with two types and leading pipe |
| 529 | + */ |
| 530 | + public function testUnionWithTwoTypesAndLeadingPipe() |
| 531 | + { |
| 532 | + $body = 'union Hello = | Wo | Rld'; |
| 533 | + $doc = Parser::parse($body); |
| 534 | + $expected = [ |
| 535 | + 'kind' => 'Document', |
| 536 | + 'definitions' => [ |
| 537 | + [ |
| 538 | + 'kind' => 'UnionTypeDefinition', |
| 539 | + 'name' => $this->nameNode('Hello', ['start' => 6, 'end' => 11]), |
| 540 | + 'directives' => [], |
| 541 | + 'types' => [ |
| 542 | + $this->typeNode('Wo', ['start' => 16, 'end' => 18]), |
| 543 | + $this->typeNode('Rld', ['start' => 21, 'end' => 24]), |
| 544 | + ], |
| 545 | + 'loc' => ['start' => 0, 'end' => 24], |
| 546 | + 'description' => null |
| 547 | + ] |
| 548 | + ], |
| 549 | + 'loc' => ['start' => 0, 'end' => 24], |
| 550 | + ]; |
| 551 | + $this->assertEquals($expected, TestUtils::nodeToArray($doc)); |
| 552 | + } |
| 553 | + |
| 554 | + /** |
| 555 | + * @it Union fails with no types |
| 556 | + */ |
| 557 | + public function testUnionFailsWithNoTypes() |
| 558 | + { |
| 559 | + $body = 'union Hello = |'; |
| 560 | + try { |
| 561 | + Parser::parse($body); |
| 562 | + } catch (SyntaxError $e) { |
| 563 | + $this->assertContains('Syntax Error GraphQL (1:16) Expected Name, found <EOF>', $e->getMessage()); |
| 564 | + } |
| 565 | + } |
| 566 | + |
| 567 | + /** |
| 568 | + * @it Union fails with leading douple pipe |
| 569 | + */ |
| 570 | + public function testUnionFailsWithLeadingDoublePipe() |
| 571 | + { |
| 572 | + $body = 'union Hello = || Wo | Rld'; |
| 573 | + try { |
| 574 | + Parser::parse($body); |
| 575 | + } catch (SyntaxError $e) { |
| 576 | + $this->assertContains('Syntax Error GraphQL (1:16) Expected Name, found |', $e->getMessage()); |
| 577 | + } |
| 578 | + } |
| 579 | + |
| 580 | + /** |
| 581 | + * @it Union fails with double pipe |
| 582 | + */ |
| 583 | + public function testUnionFailsWithDoublePipe() |
| 584 | + { |
| 585 | + $body = 'union Hello = Wo || Rld'; |
| 586 | + try { |
| 587 | + Parser::parse($body); |
| 588 | + } catch (SyntaxError $e) { |
| 589 | + $this->assertContains('Syntax Error GraphQL (1:19) Expected Name, found |', $e->getMessage()); |
| 590 | + } |
| 591 | + } |
| 592 | + |
| 593 | + /** |
| 594 | + * @it Union fails with trailing pipe |
| 595 | + */ |
| 596 | + public function testUnionFailsWithTrailingPipe() |
| 597 | + { |
| 598 | + $body = 'union Hello = | Wo | Rld |'; |
| 599 | + try { |
| 600 | + Parser::parse($body); |
| 601 | + } catch (SyntaxError $e) { |
| 602 | + $this->assertContains('Syntax Error GraphQL (1:27) Expected Name, found <EOF>', $e->getMessage()); |
| 603 | + } |
| 604 | + } |
| 605 | + |
544 | 606 | /** |
545 | 607 | * @it Scalar |
546 | 608 | */ |
|
0 commit comments