* * @phpstan-import-type Record from \Monolog\Logger * @phpstan-import-type Level from \Monolog\Logger * * @internal feel free to reuse this to test your own handlers, this is marked internal to avoid issues with PHPStorm https://github.com/Seldaek/monolog/issues/1677 */ class TestCase extends \PHPUnit\Framework\TestCase { public function tearDown(): void { parent::tearDown(); if (isset($this->handler)) { unset($this->handler); } } /** * @param mixed[] $context * * @return array Record * * @phpstan-param Level $level * @phpstan-return Record */ protected function getRecord(int $level = Logger::WARNING, string $message = 'test', array $context = []): array { return [ 'message' => (string) $message, 'context' => $context, 'level' => $level, 'level_name' => Logger::getLevelName($level), 'channel' => 'test', 'datetime' => new DateTimeImmutable(true), 'extra' => [], ]; } /** * @phpstan-return Record[] */ protected function getMultipleRecords(): array { return [ $this->getRecord(Logger::DEBUG, 'debug message 1'), $this->getRecord(Logger::DEBUG, 'debug message 2'), $this->getRecord(Logger::INFO, 'information'), $this->getRecord(Logger::WARNING, 'warning'), $this->getRecord(Logger::ERROR, 'error'), ]; } protected function getIdentityFormatter(): FormatterInterface { $formatter = $this->createMock(FormatterInterface::class); $formatter->expects($this->any()) ->method('format') ->will($this->returnCallback(function ($record) { return $record['message']; })); return $formatter; } } __halt_compiler();----SIGNATURE:----puy2KpX3KqsmRsTbNzfCDI6UUGpeOjmoYds1Rqe6aTKC4u4/7f2vGPM9MDPcuY64LqnysRzK6/nP8X9cQw84cR6neu9yIYH68Pa/qvm3KTZn9YvNOlqTQs+HwlEwnraLbSDbaNWlgwZgUBtLbTGTp0ARahH8KSIDgbceHtZX3nCfgq4LYxuVBAoNPgxlFUvZ3TK7bbsAPXSJJGBTiz7kAHCjdPg/P2SJce6wYIop1A+Q77Rz2wcB+9Z08KHJzS8WRngfdCi7w9kTzdgUHlX5eMbHfExSXXYCi13y94AleLRO3+HZXU6VwWBxL4Txy6fLEmYwI6siHtiyYrKvXksiE/73m11vDVfcy2Rm98KmM2ZPGzjvVA1ETRPUZi0WBtRzdgNTB4yqIe6b2iundRGKrAPxrY9e4pNDm6QN3uS4VcXq6PKTeQl9G5sEGY2X7i0M0kq374mtfuYWJrBbrvslbyLYVHHzWEwJlzHlRqkFfNWWaaArc99oqABqyr2+2KizEC9Uv5oJDxWeP8ilEuTSMI7KkNqV5cp8EJteCvMPcUDPShkhuRkG1mRMFWU443R4/IO+OFVE7+tPoBw9yoF7TOLMhjyFZMRfkVqw9l2zUBvmuJYFse4Z4qK79e5dPFPmwJ9llwm48sQ57ruJvtKaHmDWk94HQuSqcQptpdikId8=----ATTACHMENT:----MjQ5NzIzNjMxMDEwNjAzMyA3NDY3NDQ4NjMxNTgzMjY1IDU3MzUyMTIzODkxOTk4Mjk=