assertSame($err->getPrevious(), $prev); } /** * @see it('converts nodes to positions and locations') */ public function testConvertsNodesToPositionsAndLocations() : void { $source = new Source('{ field }'); $ast = Parser::parse($source); $fieldNode = $ast->definitions[0]->selectionSet->selections[0]; $e = new Error('msg', [$fieldNode]); $this->assertEquals([$fieldNode], $e->nodes); $this->assertEquals($source, $e->getSource()); $this->assertEquals([8], $e->getPositions()); $this->assertEquals([new SourceLocation(2, 7)], $e->getLocations()); } /** * @see it('converts single node to positions and locations') */ public function testConvertSingleNodeToPositionsAndLocations() : void { $source = new Source('{ field }'); $ast = Parser::parse($source); $fieldNode = $ast->definitions[0]->selectionSet->selections[0]; $e = new Error('msg', $fieldNode); // Non-array value. $this->assertEquals([$fieldNode], $e->nodes); $this->assertEquals($source, $e->getSource()); $this->assertEquals([8], $e->getPositions()); $this->assertEquals([new SourceLocation(2, 7)], $e->getLocations()); } /** * @see it('converts node with loc.start === 0 to positions and locations') */ public function testConvertsNodeWithStart0ToPositionsAndLocations() : void { $source = new Source('{ field }'); $ast = Parser::parse($source); $operationNode = $ast->definitions[0]; $e = new Error('msg', [$operationNode]); $this->assertEquals([$operationNode], $e->nodes); $this->assertEquals($source, $e->getSource()); $this->assertEquals([0], $e->getPositions()); $this->assertEquals([new SourceLocation(1, 1)], $e->getLocations()); } /** * @see it('converts source and positions to locations') */ public function testConvertsSourceAndPositionsToLocations() : void { $source = new Source('{ field }'); $e = new Error('msg', null, $source, [10]); $this->assertEquals(null, $e->nodes); $this->assertEquals($source, $e->getSource()); $this->assertEquals([10], $e->getPositions()); $this->assertEquals([new SourceLocation(2, 9)], $e->getLocations()); } /** * @see it('serializes to include message') */ public function testSerializesToIncludeMessage() : void { $e = new Error('msg'); $this->assertEquals(['message' => 'msg'], $e->toSerializableArray()); } /** * @see it('serializes to include message and locations') */ public function testSerializesToIncludeMessageAndLocations() : void { $node = Parser::parse('{ field }')->definitions[0]->selectionSet->selections[0]; $e = new Error('msg', [$node]); $this->assertEquals( ['message' => 'msg', 'locations' => [['line' => 1, 'column' => 3]]], $e->toSerializableArray() ); } /** * @see it('serializes to include path') */ public function testSerializesToIncludePath() : void { $e = new Error( 'msg', null, null, null, ['path', 3, 'to', 'field'] ); $this->assertEquals(['path', 3, 'to', 'field'], $e->path); $this->assertEquals(['message' => 'msg', 'path' => ['path', 3, 'to', 'field']], $e->toSerializableArray()); } /** * @see it('default error formatter includes extension fields') */ public function testDefaultErrorFormatterIncludesExtensionFields() : void { $e = new Error( 'msg', null, null, null, null, null, ['foo' => 'bar'] ); $this->assertEquals(['foo' => 'bar'], $e->getExtensions()); $this->assertEquals( [ 'message' => 'msg', 'extensions' => ['foo' => 'bar'], ], $e->toSerializableArray() ); } }