getMockBuilder(SyslogLog::class) ->onlyMethods(['_open', '_write']) ->getMock(); $log->expects($this->once())->method('_open')->with('', LOG_ODELAY, LOG_USER); $log->log('debug', 'message'); $log = $this->getMockBuilder(SyslogLog::class) ->onlyMethods(['_open', '_write']) ->getMock(); $log->setConfig([ 'prefix' => 'thing', 'flag' => LOG_NDELAY, 'facility' => LOG_MAIL, ]); $log->expects($this->once())->method('_open') ->with('thing', LOG_NDELAY, LOG_MAIL); $log->log('debug', 'message'); } /** * Tests that single lines are written to syslog * * @dataProvider typesProvider */ public function testWriteOneLine(string $type, int $expected): void { /** @var \Cake\Log\Engine\SyslogLog|\PHPUnit\Framework\MockObject\MockObject $log */ $log = $this->getMockBuilder(SyslogLog::class) ->onlyMethods(['_open', '_write']) ->getMock(); $log->expects($this->once())->method('_write')->with($expected, $type . ': Foo'); $log->log($type, 'Foo'); } /** * Tests that multiple lines are split and logged separately */ public function testWriteMultiLine(): void { /** @var \Cake\Log\Engine\SyslogLog|\PHPUnit\Framework\MockObject\MockObject $log */ $log = $this->getMockBuilder(SyslogLog::class) ->onlyMethods(['_open', '_write']) ->getMock(); $log->expects($this->exactly(2)) ->method('_write') ->with( ...self::withConsecutive( [LOG_DEBUG, 'debug: Foo'], [LOG_DEBUG, 'debug: Bar'] ) ); $log->log('debug', "Foo\nBar"); } /** * Data provider for the write function test * * @return array */ public static function typesProvider(): array { return [ ['emergency', LOG_EMERG], ['alert', LOG_ALERT], ['critical', LOG_CRIT], ['error', LOG_ERR], ['warning', LOG_WARNING], ['notice', LOG_NOTICE], ['info', LOG_INFO], ['debug', LOG_DEBUG], ]; } }