createMock(SessionInterface::class); $session->expects($this->exactly(2)) ->method('set') ->willReturnCallback(function (string $key, array $value): void { match ($key) { 'client_info' => $this->assertSame(['name' => 'client-app', 'version' => '1.0.0'], $value), 'client_capabilities' => $this->assertSame([], $value), default => $this->fail("Unexpected session key: {$key}"), }; }); $request = InitializeRequest::fromArray([ 'jsonrpc' => MessageInterface::JSONRPC_VERSION, 'id' => 'request-1', 'method' => InitializeRequest::getMethod(), 'params' => [ 'protocolVersion' => ProtocolVersion::V2024_11_05->value, 'capabilities' => [], 'clientInfo' => [ 'name' => 'client-app', 'version' => '1.0.0', ], ], ]); $response = $handler->handle($request, $session); $this->assertInstanceOf(InitializeResult::class, $response->result); /** @var InitializeResult $result */ $result = $response->result; $this->assertSame($customProtocolVersion, $result->protocolVersion); $this->assertSame( $customProtocolVersion->value, $result->jsonSerialize()['protocolVersion'] ); } }