$testData]; $dataType = null; $dataType = new ObjectType([ 'name' => 'DataType', 'fields' => function () use (&$testType, &$dataType, $data) { return [ 'test' => [ 'type' => $testType ], 'nest' => [ 'type' => $dataType, 'resolve' => function () use ($data) { return $data; } ] ]; } ]); $schema = new Schema([ 'query' => $dataType ]); $ast = Parser::parse('{ nest { test } }'); $result = Executor::execute($schema, $ast, $data); $this->assertArraySubset($expected, $result->toArray()); } // Describe: Execute: Handles list nullability /** * @describe [T] */ public function testHandlesNullableLists() { $type = Type::listOf(Type::int()); // Contains values $this->check( $type, [ 1, 2 ], [ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ] ); // Contains null $this->check( $type, [ 1, null, 2 ], [ 'data' => [ 'nest' => [ 'test' => [ 1, null, 2 ] ] ] ] ); // Returns null $this->check( $type, null, [ 'data' => [ 'nest' => [ 'test' => null ] ] ] ); } /** * @describe [T]! */ public function testHandlesNonNullableLists() { $type = Type::nonNull(Type::listOf(Type::int())); // Contains values $this->check( $type, [ 1, 2 ], [ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ] ); // Contains null $this->check( $type, [ 1, null, 2 ], [ 'data' => [ 'nest' => [ 'test' => [ 1, null, 2 ] ] ] ] ); // Returns null $this->check( $type, null, [ 'data' => [ 'nest' => null ], 'errors' => [ FormattedError::create( 'Cannot return null for non-nullable field DataType.test.', [ new SourceLocation(1, 10) ] ) ] ] ); } /** * @describe [T!] */ public function testHandlesListOfNonNulls() { $type = Type::listOf(Type::nonNull(Type::int())); // Contains values $this->check( $type, [ 1, 2 ], [ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ] ); // Contains null $this->check( $type, [ 1, null, 2 ], [ 'data' => [ 'nest' => [ 'test' => null ] ], 'errors' => [ FormattedError::create( 'Cannot return null for non-nullable field DataType.test.', [ new SourceLocation(1, 10) ] ) ] ] ); // Returns null $this->check( $type, null, [ 'data' => [ 'nest' => [ 'test' => null ] ] ] ); } /** * @describe [T!]! */ public function testHandlesNonNullListOfNonNulls() { $type = Type::nonNull(Type::listOf(Type::nonNull(Type::int()))); // Contains values $this->check( $type, [ 1, 2 ], [ 'data' => [ 'nest' => [ 'test' => [ 1, 2 ] ] ] ] ); // Contains null $this->check( $type, [ 1, null, 2 ], [ 'data' => [ 'nest' => null ], 'errors' => [ FormattedError::create( 'Cannot return null for non-nullable field DataType.test.', [ new SourceLocation(1, 10) ] ) ] ] ); // Returns null $this->check( $type, null, [ 'data' => [ 'nest' => null ], 'errors' => [ FormattedError::create( 'Cannot return null for non-nullable field DataType.test.', [ new SourceLocation(1, 10) ] ) ] ] ); } }