diff options
Diffstat (limited to 'tests')
85 files changed, 2023 insertions, 1790 deletions
diff --git a/tests/Monolog/ErrorHandlerTest.php b/tests/Monolog/ErrorHandlerTest.php index a9a3f30..9a8a5be 100644 --- a/tests/Monolog/ErrorHandlerTest.php +++ b/tests/Monolog/ErrorHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -12,20 +12,118 @@ namespace Monolog; use Monolog\Handler\TestHandler; +use Psr\Log\LogLevel; -class ErrorHandlerTest extends \PHPUnit_Framework_TestCase +class ErrorHandlerTest extends \PHPUnit\Framework\TestCase { + public function testRegister() + { + $logger = new Logger('test', [$handler = new TestHandler]); + + $this->assertInstanceOf(ErrorHandler::class, ErrorHandler::register($logger, false, false, false)); + } + public function testHandleError() { - $logger = new Logger('test', array($handler = new TestHandler)); + $logger = new Logger('test', [$handler = new TestHandler]); $errHandler = new ErrorHandler($logger); - $errHandler->registerErrorHandler(array(E_USER_NOTICE => Logger::EMERGENCY), false); + $resHandler = $errHandler->registerErrorHandler([E_USER_NOTICE => Logger::EMERGENCY], false); + $this->assertSame($errHandler, $resHandler); trigger_error('Foo', E_USER_ERROR); $this->assertCount(1, $handler->getRecords()); $this->assertTrue($handler->hasErrorRecords()); trigger_error('Foo', E_USER_NOTICE); $this->assertCount(2, $handler->getRecords()); $this->assertTrue($handler->hasEmergencyRecords()); + + $errHandler->registerErrorHandler([], true); + $prop = $this->getPrivatePropertyValue($errHandler, 'previousErrorHandler'); + $this->assertTrue(is_callable($prop)); } + + public function fatalHandlerProvider() + { + return [ + [null, 10, str_repeat(' ', 1024 * 10), null], + [E_ALL, 15, str_repeat(' ', 1024 * 15), E_ALL], + ]; + } + + protected function getPrivatePropertyValue($instance, $property) + { + $ref = new \ReflectionClass(get_class($instance)); + $prop = $ref->getProperty($property); + $prop->setAccessible(true); + + return $prop->getValue($instance); + } + + /** + * @dataProvider fatalHandlerProvider + */ + public function testFatalHandler( + $level, + $reservedMemorySize, + $expectedReservedMemory, + $expectedFatalLevel + ) { + $logger = new Logger('test', [$handler = new TestHandler]); + $errHandler = new ErrorHandler($logger); + $res = $errHandler->registerFatalHandler($level, $reservedMemorySize); + + $this->assertSame($res, $errHandler); + $this->assertTrue($this->getPrivatePropertyValue($errHandler, 'hasFatalErrorHandler')); + $this->assertEquals($expectedReservedMemory, $this->getPrivatePropertyValue($errHandler, 'reservedMemory')); + $this->assertEquals($expectedFatalLevel, $this->getPrivatePropertyValue($errHandler, 'fatalLevel')); + } + + public function testHandleException() + { + $logger = new Logger('test', [$handler = new TestHandler]); + $errHandler = new ErrorHandler($logger); + + $resHandler = $errHandler->registerExceptionHandler($map = ['Monolog\CustomTestException' => LogLevel::DEBUG, 'TypeError' => LogLevel::NOTICE, 'Throwable' => LogLevel::WARNING], false); + $this->assertSame($errHandler, $resHandler); + + $map['ParseError'] = LogLevel::CRITICAL; + $prop = $this->getPrivatePropertyValue($errHandler, 'uncaughtExceptionLevelMap'); + $this->assertSame($map, $prop); + + $errHandler->registerExceptionHandler([], true); + $prop = $this->getPrivatePropertyValue($errHandler, 'previousExceptionHandler'); + $this->assertTrue(is_callable($prop)); + } + + public function testCodeToString() + { + $method = new \ReflectionMethod(ErrorHandler::class, 'codeToString'); + $method->setAccessible(true); + + $this->assertEquals('E_ERROR', $method->invokeArgs(null, [E_ERROR])); + $this->assertEquals('E_WARNING', $method->invokeArgs(null, [E_WARNING])); + $this->assertEquals('E_PARSE', $method->invokeArgs(null, [E_PARSE])); + $this->assertEquals('E_NOTICE', $method->invokeArgs(null, [E_NOTICE])); + $this->assertEquals('E_CORE_ERROR', $method->invokeArgs(null, [E_CORE_ERROR])); + $this->assertEquals('E_CORE_WARNING', $method->invokeArgs(null, [E_CORE_WARNING])); + $this->assertEquals('E_COMPILE_ERROR', $method->invokeArgs(null, [E_COMPILE_ERROR])); + $this->assertEquals('E_COMPILE_WARNING', $method->invokeArgs(null, [E_COMPILE_WARNING])); + $this->assertEquals('E_USER_ERROR', $method->invokeArgs(null, [E_USER_ERROR])); + $this->assertEquals('E_USER_WARNING', $method->invokeArgs(null, [E_USER_WARNING])); + $this->assertEquals('E_USER_NOTICE', $method->invokeArgs(null, [E_USER_NOTICE])); + $this->assertEquals('E_STRICT', $method->invokeArgs(null, [E_STRICT])); + $this->assertEquals('E_RECOVERABLE_ERROR', $method->invokeArgs(null, [E_RECOVERABLE_ERROR])); + $this->assertEquals('E_DEPRECATED', $method->invokeArgs(null, [E_DEPRECATED])); + $this->assertEquals('E_USER_DEPRECATED', $method->invokeArgs(null, [E_USER_DEPRECATED])); + + $this->assertEquals('Unknown PHP error', $method->invokeArgs(null, ['RANDOM_TEXT'])); + $this->assertEquals('Unknown PHP error', $method->invokeArgs(null, [E_ALL])); + } +} + +class CustomTestException extends \Exception +{ +} +class CustomCustomException extends CustomTestException +{ } diff --git a/tests/Monolog/Formatter/ChromePHPFormatterTest.php b/tests/Monolog/Formatter/ChromePHPFormatterTest.php index 71c4204..e44de85 100644 --- a/tests/Monolog/Formatter/ChromePHPFormatterTest.php +++ b/tests/Monolog/Formatter/ChromePHPFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -13,7 +13,7 @@ namespace Monolog\Formatter; use Monolog\Logger; -class ChromePHPFormatterTest extends \PHPUnit_Framework_TestCase +class ChromePHPFormatterTest extends \PHPUnit\Framework\TestCase { /** * @covers Monolog\Formatter\ChromePHPFormatter::format @@ -21,29 +21,29 @@ class ChromePHPFormatterTest extends \PHPUnit_Framework_TestCase public function testDefaultFormat() { $formatter = new ChromePHPFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('ip' => '127.0.0.1'), + 'context' => ['from' => 'logger'], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => ['ip' => '127.0.0.1'], 'message' => 'log', - ); + ]; $message = $formatter->format($record); $this->assertEquals( - array( + [ 'meh', - array( + [ 'message' => 'log', - 'context' => array('from' => 'logger'), - 'extra' => array('ip' => '127.0.0.1'), - ), + 'context' => ['from' => 'logger'], + 'extra' => ['ip' => '127.0.0.1'], + ], 'unknown', 'error', - ), + ], $message ); } @@ -54,29 +54,29 @@ class ChromePHPFormatterTest extends \PHPUnit_Framework_TestCase public function testFormatWithFileAndLine() { $formatter = new ChromePHPFormatter(); - $record = array( + $record = [ 'level' => Logger::CRITICAL, 'level_name' => 'CRITICAL', 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('ip' => '127.0.0.1', 'file' => 'test', 'line' => 14), + 'context' => ['from' => 'logger'], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => ['ip' => '127.0.0.1', 'file' => 'test', 'line' => 14], 'message' => 'log', - ); + ]; $message = $formatter->format($record); $this->assertEquals( - array( + [ 'meh', - array( + [ 'message' => 'log', - 'context' => array('from' => 'logger'), - 'extra' => array('ip' => '127.0.0.1'), - ), + 'context' => ['from' => 'logger'], + 'extra' => ['ip' => '127.0.0.1'], + ], 'test : 14', 'error', - ), + ], $message ); } @@ -87,25 +87,25 @@ class ChromePHPFormatterTest extends \PHPUnit_Framework_TestCase public function testFormatWithoutContext() { $formatter = new ChromePHPFormatter(); - $record = array( + $record = [ 'level' => Logger::DEBUG, 'level_name' => 'DEBUG', 'channel' => 'meh', - 'context' => array(), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), + 'context' => [], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [], 'message' => 'log', - ); + ]; $message = $formatter->format($record); $this->assertEquals( - array( + [ 'meh', 'log', 'unknown', 'log', - ), + ], $message ); } @@ -116,42 +116,42 @@ class ChromePHPFormatterTest extends \PHPUnit_Framework_TestCase public function testBatchFormatThrowException() { $formatter = new ChromePHPFormatter(); - $records = array( - array( + $records = [ + [ 'level' => Logger::INFO, 'level_name' => 'INFO', 'channel' => 'meh', - 'context' => array(), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), + 'context' => [], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [], 'message' => 'log', - ), - array( + ], + [ 'level' => Logger::WARNING, 'level_name' => 'WARNING', 'channel' => 'foo', - 'context' => array(), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), + 'context' => [], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [], 'message' => 'log2', - ), - ); + ], + ]; $this->assertEquals( - array( - array( + [ + [ 'meh', 'log', 'unknown', 'info', - ), - array( + ], + [ 'foo', 'log2', 'unknown', 'warn', - ), - ), + ], + ], $formatter->formatBatch($records) ); } diff --git a/tests/Monolog/Formatter/ElasticaFormatterTest.php b/tests/Monolog/Formatter/ElasticaFormatterTest.php index 90cc48d..5e4eeb9 100644 --- a/tests/Monolog/Formatter/ElasticaFormatterTest.php +++ b/tests/Monolog/Formatter/ElasticaFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -13,7 +13,7 @@ namespace Monolog\Formatter; use Monolog\Logger; -class ElasticaFormatterTest extends \PHPUnit_Framework_TestCase +class ElasticaFormatterTest extends \PHPUnit\Framework\TestCase { public function setUp() { @@ -30,24 +30,24 @@ class ElasticaFormatterTest extends \PHPUnit_Framework_TestCase public function testFormat() { // test log message - $msg = array( + $msg = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('foo' => 7, 'bar', 'class' => new \stdClass), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), + 'context' => ['foo' => 7, 'bar', 'class' => new \stdClass], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [], 'message' => 'log', - ); + ]; // expected values $expected = $msg; $expected['datetime'] = '1970-01-01T00:00:00.000000+00:00'; - $expected['context'] = array( - 'class' => '[object] (stdClass: {})', + $expected['context'] = [ + 'class' => ['stdClass' => []], 'foo' => 7, 0 => 'bar', - ); + ]; // format log message $formatter = new ElasticaFormatter('my_index', 'doc_type'); diff --git a/tests/Monolog/Formatter/FlowdockFormatterTest.php b/tests/Monolog/Formatter/FlowdockFormatterTest.php index 1b2fd97..f922d53 100644 --- a/tests/Monolog/Formatter/FlowdockFormatterTest.php +++ b/tests/Monolog/Formatter/FlowdockFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -12,7 +12,7 @@ namespace Monolog\Formatter; use Monolog\Logger; -use Monolog\TestCase; +use Monolog\Test\TestCase; class FlowdockFormatterTest extends TestCase { @@ -24,14 +24,14 @@ class FlowdockFormatterTest extends TestCase $formatter = new FlowdockFormatter('test_source', 'source@test.com'); $record = $this->getRecord(); - $expected = array( + $expected = [ 'source' => 'test_source', 'from_address' => 'source@test.com', 'subject' => 'in test_source: WARNING - test', 'content' => 'test', - 'tags' => array('#logs', '#warning', '#test'), + 'tags' => ['#logs', '#warning', '#test'], 'project' => 'test_source', - ); + ]; $formatted = $formatter->format($record); $this->assertEquals($expected, $formatted['flowdock']); @@ -43,10 +43,10 @@ class FlowdockFormatterTest extends TestCase public function testFormatBatch() { $formatter = new FlowdockFormatter('test_source', 'source@test.com'); - $records = array( + $records = [ $this->getRecord(Logger::WARNING), $this->getRecord(Logger::DEBUG), - ); + ]; $formatted = $formatter->formatBatch($records); $this->assertArrayHasKey('flowdock', $formatted[0]); diff --git a/tests/Monolog/Formatter/FluentdFormatterTest.php b/tests/Monolog/Formatter/FluentdFormatterTest.php index 622b2ba..0be8d8f 100644 --- a/tests/Monolog/Formatter/FluentdFormatterTest.php +++ b/tests/Monolog/Formatter/FluentdFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -12,7 +12,7 @@ namespace Monolog\Formatter; use Monolog\Logger; -use Monolog\TestCase; +use Monolog\Test\TestCase; class FluentdFormatterTest extends TestCase { @@ -36,7 +36,7 @@ class FluentdFormatterTest extends TestCase public function testFormat() { $record = $this->getRecord(Logger::WARNING); - $record['datetime'] = new \DateTime("@0"); + $record['datetime'] = new \DateTimeImmutable("@0"); $formatter = new FluentdFormatter(); $this->assertEquals( @@ -51,7 +51,7 @@ class FluentdFormatterTest extends TestCase public function testFormatWithTag() { $record = $this->getRecord(Logger::ERROR); - $record['datetime'] = new \DateTime("@0"); + $record['datetime'] = new \DateTimeImmutable("@0"); $formatter = new FluentdFormatter(true); $this->assertEquals( diff --git a/tests/Monolog/Formatter/GelfMessageFormatterTest.php b/tests/Monolog/Formatter/GelfMessageFormatterTest.php index 4a24761..39eeaf7 100644 --- a/tests/Monolog/Formatter/GelfMessageFormatterTest.php +++ b/tests/Monolog/Formatter/GelfMessageFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -13,12 +13,12 @@ namespace Monolog\Formatter; use Monolog\Logger; -class GelfMessageFormatterTest extends \PHPUnit_Framework_TestCase +class GelfMessageFormatterTest extends \PHPUnit\Framework\TestCase { public function setUp() { if (!class_exists('\Gelf\Message')) { - $this->markTestSkipped("graylog2/gelf-php or mlehner/gelf-php is not installed"); + $this->markTestSkipped("graylog2/gelf-php is not installed"); } } @@ -28,15 +28,15 @@ class GelfMessageFormatterTest extends \PHPUnit_Framework_TestCase public function testDefaultFormatter() { $formatter = new GelfMessageFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array(), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), + 'context' => [], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [], 'message' => 'log', - ); + ]; $message = $formatter->format($record); @@ -63,15 +63,15 @@ class GelfMessageFormatterTest extends \PHPUnit_Framework_TestCase public function testFormatWithFileAndLine() { $formatter = new GelfMessageFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('file' => 'test', 'line' => 14), + 'context' => ['from' => 'logger'], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => ['file' => 'test', 'line' => 14], 'message' => 'log', - ); + ]; $message = $formatter->format($record); @@ -87,10 +87,10 @@ class GelfMessageFormatterTest extends \PHPUnit_Framework_TestCase public function testFormatInvalidFails() { $formatter = new GelfMessageFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', - ); + ]; $formatter->format($record); } @@ -101,15 +101,15 @@ class GelfMessageFormatterTest extends \PHPUnit_Framework_TestCase public function testFormatWithContext() { $formatter = new GelfMessageFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('key' => 'pair'), + 'context' => ['from' => 'logger'], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => ['key' => 'pair'], 'message' => 'log', - ); + ]; $message = $formatter->format($record); @@ -138,19 +138,19 @@ class GelfMessageFormatterTest extends \PHPUnit_Framework_TestCase public function testFormatWithContextContainingException() { $formatter = new GelfMessageFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('from' => 'logger', 'exception' => array( + 'context' => ['from' => 'logger', 'exception' => [ 'class' => '\Exception', 'file' => '/some/file/in/dir.php:56', - 'trace' => array('/some/file/1.php:23', '/some/file/2.php:3'), - )), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), + 'trace' => ['/some/file/1.php:23', '/some/file/2.php:3'], + ]], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [], 'message' => 'log', - ); + ]; $message = $formatter->format($record); @@ -166,15 +166,15 @@ class GelfMessageFormatterTest extends \PHPUnit_Framework_TestCase public function testFormatWithExtra() { $formatter = new GelfMessageFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('key' => 'pair'), + 'context' => ['from' => 'logger'], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => ['key' => 'pair'], 'message' => 'log', - ); + ]; $message = $formatter->format($record); @@ -200,15 +200,15 @@ class GelfMessageFormatterTest extends \PHPUnit_Framework_TestCase public function testFormatWithLargeData() { $formatter = new GelfMessageFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('exception' => str_repeat(' ', 32767)), - 'datetime' => new \DateTime("@0"), - 'extra' => array('key' => str_repeat(' ', 32767)), - 'message' => 'log' - ); + 'context' => ['exception' => str_repeat(' ', 32767)], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => ['key' => str_repeat(' ', 32767)], + 'message' => 'log', + ]; $message = $formatter->format($record); $messageArray = $message->toArray(); @@ -216,7 +216,7 @@ class GelfMessageFormatterTest extends \PHPUnit_Framework_TestCase $length = 200; foreach ($messageArray as $key => $value) { - if (!in_array($key, array('level', 'timestamp'))) { + if (!in_array($key, ['level', 'timestamp']) && is_string($value)) { $length += strlen($value); } } diff --git a/tests/Monolog/Formatter/JsonFormatterTest.php b/tests/Monolog/Formatter/JsonFormatterTest.php index c9445f3..6dfdbb7 100644 --- a/tests/Monolog/Formatter/JsonFormatterTest.php +++ b/tests/Monolog/Formatter/JsonFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -12,7 +12,7 @@ namespace Monolog\Formatter; use Monolog\Logger; -use Monolog\TestCase; +use Monolog\Test\TestCase; class JsonFormatterTest extends TestCase { @@ -42,7 +42,7 @@ class JsonFormatterTest extends TestCase $formatter = new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false); $record = $this->getRecord(); - $this->assertEquals(json_encode($record), $formatter->format($record)); + $this->assertEquals('{"message":"test","context":[],"level":300,"level_name":"WARNING","channel":"test","datetime":"'.$record['datetime']->format('Y-m-d\TH:i:s.uP').'","extra":[]}', $formatter->format($record)); } /** @@ -52,10 +52,10 @@ class JsonFormatterTest extends TestCase public function testFormatBatch() { $formatter = new JsonFormatter(); - $records = array( + $records = [ $this->getRecord(Logger::WARNING), $this->getRecord(Logger::DEBUG), - ); + ]; $this->assertEquals(json_encode($records), $formatter->formatBatch($records)); } @@ -66,10 +66,10 @@ class JsonFormatterTest extends TestCase public function testFormatBatchNewlines() { $formatter = new JsonFormatter(JsonFormatter::BATCH_MODE_NEWLINES); - $records = $expected = array( + $records = $expected = [ $this->getRecord(Logger::WARNING), $this->getRecord(Logger::DEBUG), - ); + ]; array_walk($expected, function (&$value, $key) { $value = json_encode($value); }); @@ -101,10 +101,6 @@ class JsonFormatterTest extends TestCase public function testDefFormatWithThrowable() { - if (!class_exists('Error') || !is_subclass_of('Error', 'Throwable')) { - $this->markTestSkipped('Requires PHP >=7'); - } - $formatter = new JsonFormatter(); $throwable = new \Error('Foo'); $formattedThrowable = $this->formatException($throwable); @@ -129,21 +125,22 @@ class JsonFormatterTest extends TestCase } /** - * @param JsonFormatter $formatter + * @param JsonFormatter $formatter * @param \Exception|\Throwable $exception * * @return string */ private function formatRecordWithExceptionInContext(JsonFormatter $formatter, $exception) { - $message = $formatter->format(array( + $message = $formatter->format([ 'level_name' => 'CRITICAL', 'channel' => 'core', - 'context' => array('exception' => $exception), + 'context' => ['exception' => $exception], 'datetime' => null, - 'extra' => array(), + 'extra' => [], 'message' => 'foobar', - )); + ]); + return $message; } @@ -154,11 +151,9 @@ class JsonFormatterTest extends TestCase */ private function formatExceptionFilePathWithLine($exception) { - $options = 0; - if (version_compare(PHP_VERSION, '5.4.0', '>=')) { - $options = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE; - } + $options = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE; $path = substr(json_encode($exception->getFile(), $options), 1, -1); + return $path . ':' . $exception->getLine(); } @@ -178,6 +173,7 @@ class JsonFormatterTest extends TestCase ',"file":"' . $this->formatExceptionFilePathWithLine($exception) . ($previous ? '","previous":' . $previous : '"') . '}'; + return $formattedException; } } diff --git a/tests/Monolog/Formatter/LineFormatterTest.php b/tests/Monolog/Formatter/LineFormatterTest.php index 310d93c..a8b55e4 100644 --- a/tests/Monolog/Formatter/LineFormatterTest.php +++ b/tests/Monolog/Formatter/LineFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -14,141 +14,159 @@ namespace Monolog\Formatter; /** * @covers Monolog\Formatter\LineFormatter */ -class LineFormatterTest extends \PHPUnit_Framework_TestCase +class LineFormatterTest extends \PHPUnit\Framework\TestCase { public function testDefFormatWithString() { $formatter = new LineFormatter(null, 'Y-m-d'); - $message = $formatter->format(array( + $message = $formatter->format([ 'level_name' => 'WARNING', 'channel' => 'log', - 'context' => array(), + 'context' => [], 'message' => 'foo', - 'datetime' => new \DateTime, - 'extra' => array(), - )); + 'datetime' => new \DateTimeImmutable, + 'extra' => [], + ]); $this->assertEquals('['.date('Y-m-d').'] log.WARNING: foo [] []'."\n", $message); } public function testDefFormatWithArrayContext() { $formatter = new LineFormatter(null, 'Y-m-d'); - $message = $formatter->format(array( + $message = $formatter->format([ 'level_name' => 'ERROR', 'channel' => 'meh', 'message' => 'foo', - 'datetime' => new \DateTime, - 'extra' => array(), - 'context' => array( + 'datetime' => new \DateTimeImmutable, + 'extra' => [], + 'context' => [ 'foo' => 'bar', 'baz' => 'qux', 'bool' => false, 'null' => null, - ), - )); + ], + ]); $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: foo {"foo":"bar","baz":"qux","bool":false,"null":null} []'."\n", $message); } public function testDefFormatExtras() { $formatter = new LineFormatter(null, 'Y-m-d'); - $message = $formatter->format(array( + $message = $formatter->format([ 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array(), - 'datetime' => new \DateTime, - 'extra' => array('ip' => '127.0.0.1'), + 'context' => [], + 'datetime' => new \DateTimeImmutable, + 'extra' => ['ip' => '127.0.0.1'], 'message' => 'log', - )); + ]); $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: log [] {"ip":"127.0.0.1"}'."\n", $message); } public function testFormatExtras() { $formatter = new LineFormatter("[%datetime%] %channel%.%level_name%: %message% %context% %extra.file% %extra%\n", 'Y-m-d'); - $message = $formatter->format(array( + $message = $formatter->format([ 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array(), - 'datetime' => new \DateTime, - 'extra' => array('ip' => '127.0.0.1', 'file' => 'test'), + 'context' => [], + 'datetime' => new \DateTimeImmutable, + 'extra' => ['ip' => '127.0.0.1', 'file' => 'test'], 'message' => 'log', - )); + ]); $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: log [] test {"ip":"127.0.0.1"}'."\n", $message); } public function testContextAndExtraOptionallyNotShownIfEmpty() { $formatter = new LineFormatter(null, 'Y-m-d', false, true); - $message = $formatter->format(array( + $message = $formatter->format([ 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array(), - 'datetime' => new \DateTime, - 'extra' => array(), + 'context' => [], + 'datetime' => new \DateTimeImmutable, + 'extra' => [], 'message' => 'log', - )); + ]); $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: log '."\n", $message); } public function testContextAndExtraReplacement() { $formatter = new LineFormatter('%context.foo% => %extra.foo%'); - $message = $formatter->format(array( + $message = $formatter->format([ 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('foo' => 'bar'), - 'datetime' => new \DateTime, - 'extra' => array('foo' => 'xbar'), + 'context' => ['foo' => 'bar'], + 'datetime' => new \DateTimeImmutable, + 'extra' => ['foo' => 'xbar'], 'message' => 'log', - )); + ]); $this->assertEquals('bar => xbar', $message); } public function testDefFormatWithObject() { $formatter = new LineFormatter(null, 'Y-m-d'); - $message = $formatter->format(array( + $message = $formatter->format([ 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array(), - 'datetime' => new \DateTime, - 'extra' => array('foo' => new TestFoo, 'bar' => new TestBar, 'baz' => array(), 'res' => fopen('php://memory', 'rb')), + 'context' => [], + 'datetime' => new \DateTimeImmutable, + 'extra' => ['foo' => new TestFoo, 'bar' => new TestBar, 'baz' => [], 'res' => fopen('php://memory', 'rb')], 'message' => 'foobar', - )); + ]); - $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: foobar [] {"foo":"[object] (Monolog\\\\Formatter\\\\TestFoo: {\\"foo\\":\\"foo\\"})","bar":"[object] (Monolog\\\\Formatter\\\\TestBar: bar)","baz":[],"res":"[resource] (stream)"}'."\n", $message); + $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: foobar [] {"foo":{"Monolog\\\\Formatter\\\\TestFoo":{"foo":"fooValue"}},"bar":{"Monolog\\\\Formatter\\\\TestBar":"bar"},"baz":[],"res":"[resource(stream)]"}'."\n", $message); } public function testDefFormatWithException() { $formatter = new LineFormatter(null, 'Y-m-d'); - $message = $formatter->format(array( + $message = $formatter->format([ 'level_name' => 'CRITICAL', 'channel' => 'core', - 'context' => array('exception' => new \RuntimeException('Foo')), - 'datetime' => new \DateTime, - 'extra' => array(), + 'context' => ['exception' => new \RuntimeException('Foo')], + 'datetime' => new \DateTimeImmutable, + 'extra' => [], 'message' => 'foobar', - )); + ]); $path = str_replace('\\/', '/', json_encode(__FILE__)); $this->assertEquals('['.date('Y-m-d').'] core.CRITICAL: foobar {"exception":"[object] (RuntimeException(code: 0): Foo at '.substr($path, 1, -1).':'.(__LINE__ - 8).')"} []'."\n", $message); } + public function testDefFormatWithExceptionAndStacktrace() + { + $formatter = new LineFormatter(null, 'Y-m-d'); + $formatter->includeStacktraces(); + $message = $formatter->format([ + 'level_name' => 'CRITICAL', + 'channel' => 'core', + 'context' => ['exception' => new \RuntimeException('Foo')], + 'datetime' => new \DateTimeImmutable, + 'extra' => [], + 'message' => 'foobar', + ]); + + $path = str_replace('\\/', '/', json_encode(__FILE__)); + + $this->assertRegexp('{^\['.date('Y-m-d').'] core\.CRITICAL: foobar \{"exception":"\[object] \(RuntimeException\(code: 0\): Foo at '.preg_quote(substr($path, 1, -1)).':'.(__LINE__ - 8).'\)\n\[stacktrace]\n#0}', $message); + } + public function testDefFormatWithPreviousException() { $formatter = new LineFormatter(null, 'Y-m-d'); $previous = new \LogicException('Wut?'); - $message = $formatter->format(array( + $message = $formatter->format([ 'level_name' => 'CRITICAL', 'channel' => 'core', - 'context' => array('exception' => new \RuntimeException('Foo', 0, $previous)), - 'datetime' => new \DateTime, - 'extra' => array(), + 'context' => ['exception' => new \RuntimeException('Foo', 0, $previous)], + 'datetime' => new \DateTimeImmutable, + 'extra' => [], 'message' => 'foobar', - )); + ]); $path = str_replace('\\/', '/', json_encode(__FILE__)); @@ -158,24 +176,24 @@ class LineFormatterTest extends \PHPUnit_Framework_TestCase public function testBatchFormat() { $formatter = new LineFormatter(null, 'Y-m-d'); - $message = $formatter->formatBatch(array( - array( + $message = $formatter->formatBatch([ + [ 'level_name' => 'CRITICAL', 'channel' => 'test', 'message' => 'bar', - 'context' => array(), - 'datetime' => new \DateTime, - 'extra' => array(), - ), - array( + 'context' => [], + 'datetime' => new \DateTimeImmutable, + 'extra' => [], + ], + [ 'level_name' => 'WARNING', 'channel' => 'log', 'message' => 'foo', - 'context' => array(), - 'datetime' => new \DateTime, - 'extra' => array(), - ), - )); + 'context' => [], + 'datetime' => new \DateTimeImmutable, + 'extra' => [], + ], + ]); $this->assertEquals('['.date('Y-m-d').'] test.CRITICAL: bar [] []'."\n".'['.date('Y-m-d').'] log.WARNING: foo [] []'."\n", $message); } @@ -183,11 +201,11 @@ class LineFormatterTest extends \PHPUnit_Framework_TestCase { $formatter = new LineFormatter(null, 'Y-m-d'); $message = $formatter->format( - array( + [ 'message' => "foo\nbar", - 'context' => array(), - 'extra' => array(), - ) + 'context' => [], + 'extra' => [], + ] ); $this->assertRegExp('/foo bar/', $message); @@ -197,11 +215,11 @@ class LineFormatterTest extends \PHPUnit_Framework_TestCase { $formatter = new LineFormatter(null, 'Y-m-d', true); $message = $formatter->format( - array( + [ 'message' => "foo\nbar", - 'context' => array(), - 'extra' => array(), - ) + 'context' => [], + 'extra' => [], + ] ); $this->assertRegExp('/foo\nbar/', $message); @@ -210,7 +228,7 @@ class LineFormatterTest extends \PHPUnit_Framework_TestCase class TestFoo { - public $foo = 'foo'; + public $foo = 'fooValue'; } class TestBar diff --git a/tests/Monolog/Formatter/LogglyFormatterTest.php b/tests/Monolog/Formatter/LogglyFormatterTest.php index 6d59b3f..2eff4ac 100644 --- a/tests/Monolog/Formatter/LogglyFormatterTest.php +++ b/tests/Monolog/Formatter/LogglyFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Formatter; -use Monolog\TestCase; +use Monolog\Test\TestCase; class LogglyFormatterTest extends TestCase { @@ -34,7 +34,8 @@ class LogglyFormatterTest extends TestCase $formatter = new LogglyFormatter(); $record = $this->getRecord(); $formatted_decoded = json_decode($formatter->format($record), true); + $this->assertArrayNotHasKey("datetime", $formatted_decoded); $this->assertArrayHasKey("timestamp", $formatted_decoded); - $this->assertEquals(new \DateTime($formatted_decoded["timestamp"]), $record["datetime"]); + $this->assertEquals($record["datetime"]->format('Y-m-d\TH:i:s.uO'), $formatted_decoded["timestamp"]); } } diff --git a/tests/Monolog/Formatter/LogmaticFormatterTest.php b/tests/Monolog/Formatter/LogmaticFormatterTest.php new file mode 100644 index 0000000..d27670f --- /dev/null +++ b/tests/Monolog/Formatter/LogmaticFormatterTest.php @@ -0,0 +1,36 @@ +<?php declare(strict_types=1); + +/* + * This file is part of the Monolog package. + * + * (c) Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Formatter; + +use Monolog\Test\TestCase; + +/** + * @author Julien Breux <julien.breux@gmail.com> + */ +class LogmaticFormatterTest extends TestCase +{ + /** + * @covers Monolog\Formatter\LogmaticFormatter::format + */ + public function testFormat() + { + $formatter = new LogmaticFormatter(); + $formatter->setHostname('testHostname'); + $formatter->setAppname('testAppname'); + $record = $this->getRecord(); + $formatted_decoded = json_decode($formatter->format($record), true); + $this->assertArrayHasKey('hostname', $formatted_decoded); + $this->assertArrayHasKey('appname', $formatted_decoded); + $this->assertEquals('testHostname', $formatted_decoded['hostname']); + $this->assertEquals('testAppname', $formatted_decoded['appname']); + } +} diff --git a/tests/Monolog/Formatter/LogstashFormatterTest.php b/tests/Monolog/Formatter/LogstashFormatterTest.php index 9f6b1cc..2ca9f55 100644 --- a/tests/Monolog/Formatter/LogstashFormatterTest.php +++ b/tests/Monolog/Formatter/LogstashFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -13,7 +13,7 @@ namespace Monolog\Formatter; use Monolog\Logger; -class LogstashFormatterTest extends \PHPUnit_Framework_TestCase +class LogstashFormatterTest extends \PHPUnit\Framework\TestCase { public function tearDown() { @@ -25,158 +25,18 @@ class LogstashFormatterTest extends \PHPUnit_Framework_TestCase /** * @covers Monolog\Formatter\LogstashFormatter::format */ - public function testDefaultFormatter() - { - $formatter = new LogstashFormatter('test', 'hostname'); - $record = array( - 'level' => Logger::ERROR, - 'level_name' => 'ERROR', - 'channel' => 'meh', - 'context' => array(), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), - 'message' => 'log', - ); - - $message = json_decode($formatter->format($record), true); - - $this->assertEquals("1970-01-01T00:00:00.000000+00:00", $message['@timestamp']); - $this->assertEquals('log', $message['@message']); - $this->assertEquals('meh', $message['@fields']['channel']); - $this->assertContains('meh', $message['@tags']); - $this->assertEquals(Logger::ERROR, $message['@fields']['level']); - $this->assertEquals('test', $message['@type']); - $this->assertEquals('hostname', $message['@source']); - - $formatter = new LogstashFormatter('mysystem'); - - $message = json_decode($formatter->format($record), true); - - $this->assertEquals('mysystem', $message['@type']); - } - - /** - * @covers Monolog\Formatter\LogstashFormatter::format - */ - public function testFormatWithFileAndLine() - { - $formatter = new LogstashFormatter('test'); - $record = array( - 'level' => Logger::ERROR, - 'level_name' => 'ERROR', - 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('file' => 'test', 'line' => 14), - 'message' => 'log', - ); - - $message = json_decode($formatter->format($record), true); - - $this->assertEquals('test', $message['@fields']['file']); - $this->assertEquals(14, $message['@fields']['line']); - } - - /** - * @covers Monolog\Formatter\LogstashFormatter::format - */ - public function testFormatWithContext() - { - $formatter = new LogstashFormatter('test'); - $record = array( - 'level' => Logger::ERROR, - 'level_name' => 'ERROR', - 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('key' => 'pair'), - 'message' => 'log', - ); - - $message = json_decode($formatter->format($record), true); - - $message_array = $message['@fields']; - - $this->assertArrayHasKey('ctxt_from', $message_array); - $this->assertEquals('logger', $message_array['ctxt_from']); - - // Test with extraPrefix - $formatter = new LogstashFormatter('test', null, null, 'CTX'); - $message = json_decode($formatter->format($record), true); - - $message_array = $message['@fields']; - - $this->assertArrayHasKey('CTXfrom', $message_array); - $this->assertEquals('logger', $message_array['CTXfrom']); - } - - /** - * @covers Monolog\Formatter\LogstashFormatter::format - */ - public function testFormatWithExtra() - { - $formatter = new LogstashFormatter('test'); - $record = array( - 'level' => Logger::ERROR, - 'level_name' => 'ERROR', - 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('key' => 'pair'), - 'message' => 'log', - ); - - $message = json_decode($formatter->format($record), true); - - $message_array = $message['@fields']; - - $this->assertArrayHasKey('key', $message_array); - $this->assertEquals('pair', $message_array['key']); - - // Test with extraPrefix - $formatter = new LogstashFormatter('test', null, 'EXT'); - $message = json_decode($formatter->format($record), true); - - $message_array = $message['@fields']; - - $this->assertArrayHasKey('EXTkey', $message_array); - $this->assertEquals('pair', $message_array['EXTkey']); - } - - public function testFormatWithApplicationName() - { - $formatter = new LogstashFormatter('app', 'test'); - $record = array( - 'level' => Logger::ERROR, - 'level_name' => 'ERROR', - 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('key' => 'pair'), - 'message' => 'log', - ); - - $message = json_decode($formatter->format($record), true); - - $this->assertArrayHasKey('@type', $message); - $this->assertEquals('app', $message['@type']); - } - - /** - * @covers Monolog\Formatter\LogstashFormatter::format - */ public function testDefaultFormatterV1() { - $formatter = new LogstashFormatter('test', 'hostname', null, 'ctxt_', LogstashFormatter::V1); - $record = array( + $formatter = new LogstashFormatter('test', 'hostname', null, 'ctxt_'); + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array(), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), + 'context' => [], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [], 'message' => 'log', - ); + ]; $message = json_decode($formatter->format($record), true); @@ -185,10 +45,11 @@ class LogstashFormatterTest extends \PHPUnit_Framework_TestCase $this->assertEquals('log', $message['message']); $this->assertEquals('meh', $message['channel']); $this->assertEquals('ERROR', $message['level']); + $this->assertEquals(Logger::ERROR, $message['monolog_level']); $this->assertEquals('test', $message['type']); $this->assertEquals('hostname', $message['host']); - $formatter = new LogstashFormatter('mysystem', null, null, 'ctxt_', LogstashFormatter::V1); + $formatter = new LogstashFormatter('mysystem', null, null, 'ctxt_'); $message = json_decode($formatter->format($record), true); @@ -200,21 +61,21 @@ class LogstashFormatterTest extends \PHPUnit_Framework_TestCase */ public function testFormatWithFileAndLineV1() { - $formatter = new LogstashFormatter('test', null, null, 'ctxt_', LogstashFormatter::V1); - $record = array( + $formatter = new LogstashFormatter('test', null, null, 'ctxt_'); + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('file' => 'test', 'line' => 14), + 'context' => ['from' => 'logger'], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => ['file' => 'test', 'line' => 14], 'message' => 'log', - ); + ]; $message = json_decode($formatter->format($record), true); - $this->assertEquals('test', $message['file']); - $this->assertEquals(14, $message['line']); + $this->assertEquals('test', $message['extra']['file']); + $this->assertEquals(14, $message['extra']['line']); } /** @@ -222,28 +83,30 @@ class LogstashFormatterTest extends \PHPUnit_Framework_TestCase */ public function testFormatWithContextV1() { - $formatter = new LogstashFormatter('test', null, null, 'ctxt_', LogstashFormatter::V1); - $record = array( + $formatter = new LogstashFormatter('test', null, null, 'ctxt_'); + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('key' => 'pair'), + 'context' => ['from' => 'logger'], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => ['key' => 'pair'], 'message' => 'log', - ); + ]; $message = json_decode($formatter->format($record), true); - $this->assertArrayHasKey('ctxt_from', $message); - $this->assertEquals('logger', $message['ctxt_from']); + $this->assertArrayHasKey('ctxt_context', $message); + $this->assertArrayHasKey('from', $message['ctxt_context']); + $this->assertEquals('logger', $message['ctxt_context']['from']); // Test with extraPrefix - $formatter = new LogstashFormatter('test', null, null, 'CTX', LogstashFormatter::V1); + $formatter = new LogstashFormatter('test', null, null, 'CTX'); $message = json_decode($formatter->format($record), true); - $this->assertArrayHasKey('CTXfrom', $message); - $this->assertEquals('logger', $message['CTXfrom']); + $this->assertArrayHasKey('CTXcontext', $message); + $this->assertArrayHasKey('from', $message['CTXcontext']); + $this->assertEquals('logger', $message['CTXcontext']['from']); } /** @@ -251,42 +114,44 @@ class LogstashFormatterTest extends \PHPUnit_Framework_TestCase */ public function testFormatWithExtraV1() { - $formatter = new LogstashFormatter('test', null, null, 'ctxt_', LogstashFormatter::V1); - $record = array( + $formatter = new LogstashFormatter('test', null, null, 'ctxt_'); + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('key' => 'pair'), + 'context' => ['from' => 'logger'], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => ['key' => 'pair'], 'message' => 'log', - ); + ]; $message = json_decode($formatter->format($record), true); - $this->assertArrayHasKey('key', $message); - $this->assertEquals('pair', $message['key']); + $this->assertArrayHasKey('extra', $message); + $this->assertArrayHasKey('key', $message['extra']); + $this->assertEquals('pair', $message['extra']['key']); // Test with extraPrefix - $formatter = new LogstashFormatter('test', null, 'EXT', 'ctxt_', LogstashFormatter::V1); + $formatter = new LogstashFormatter('test', null, 'EXT', 'ctxt_'); $message = json_decode($formatter->format($record), true); - $this->assertArrayHasKey('EXTkey', $message); - $this->assertEquals('pair', $message['EXTkey']); + $this->assertArrayHasKey('EXTextra', $message); + $this->assertArrayHasKey('key', $message['EXTextra']); + $this->assertEquals('pair', $message['EXTextra']['key']); } public function testFormatWithApplicationNameV1() { - $formatter = new LogstashFormatter('app', 'test', null, 'ctxt_', LogstashFormatter::V1); - $record = array( + $formatter = new LogstashFormatter('app', 'test', null, 'ctxt_'); + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('key' => 'pair'), + 'context' => ['from' => 'logger'], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => ['key' => 'pair'], 'message' => 'log', - ); + ]; $message = json_decode($formatter->format($record), true); @@ -296,38 +161,27 @@ class LogstashFormatterTest extends \PHPUnit_Framework_TestCase public function testFormatWithLatin9Data() { - if (version_compare(PHP_VERSION, '5.5.0', '<')) { - // Ignore the warning that will be emitted by PHP <5.5.0 - \PHPUnit_Framework_Error_Warning::$enabled = false; - } $formatter = new LogstashFormatter('test', 'hostname'); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => '¯\_(ツ)_/¯', - 'context' => array(), - 'datetime' => new \DateTime("@0"), - 'extra' => array( + 'context' => [], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [ 'user_agent' => "\xD6WN; FBCR/OrangeEspa\xF1a; Vers\xE3o/4.0; F\xE4rist", - ), + ], 'message' => 'log', - ); + ]; $message = json_decode($formatter->format($record), true); $this->assertEquals("1970-01-01T00:00:00.000000+00:00", $message['@timestamp']); - $this->assertEquals('log', $message['@message']); - $this->assertEquals('¯\_(ツ)_/¯', $message['@fields']['channel']); - $this->assertContains('¯\_(ツ)_/¯', $message['@tags']); - $this->assertEquals(Logger::ERROR, $message['@fields']['level']); - $this->assertEquals('test', $message['@type']); - $this->assertEquals('hostname', $message['@source']); - if (version_compare(PHP_VERSION, '5.5.0', '>=')) { - $this->assertEquals('ÖWN; FBCR/OrangeEspaña; Versão/4.0; Färist', $message['@fields']['user_agent']); - } else { - // PHP <5.5 does not return false for an element encoding failure, - // instead it emits a warning (possibly) and nulls the value. - $this->assertEquals(null, $message['@fields']['user_agent']); - } + $this->assertEquals('log', $message['message']); + $this->assertEquals('¯\_(ツ)_/¯', $message['channel']); + $this->assertEquals('ERROR', $message['level']); + $this->assertEquals('test', $message['type']); + $this->assertEquals('hostname', $message['host']); + $this->assertEquals('ÖWN; FBCR/OrangeEspaña; Versão/4.0; Färist', $message['extra']['user_agent']); } } diff --git a/tests/Monolog/Formatter/MongoDBFormatterTest.php b/tests/Monolog/Formatter/MongoDBFormatterTest.php index 52e699e..8759c01 100644 --- a/tests/Monolog/Formatter/MongoDBFormatterTest.php +++ b/tests/Monolog/Formatter/MongoDBFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -16,21 +16,21 @@ use Monolog\Logger; /** * @author Florian Plattner <me@florianplattner.de> */ -class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase +class MongoDBFormatterTest extends \PHPUnit\Framework\TestCase { public function setUp() { - if (!class_exists('MongoDate')) { - $this->markTestSkipped('mongo extension not installed'); + if (!class_exists('MongoDB\BSON\UTCDateTime')) { + $this->markTestSkipped('ext-mongodb not installed'); } } public function constructArgumentProvider() { - return array( - array(1, true, 1, true), - array(0, false, 0, false), - ); + return [ + [1, true, 1, true], + [0, false, 0, false], + ]; } /** @@ -56,28 +56,28 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase public function testSimpleFormat() { - $record = array( + $record = [ 'message' => 'some log message', - 'context' => array(), + 'context' => [], 'level' => Logger::WARNING, 'level_name' => Logger::getLevelName(Logger::WARNING), 'channel' => 'test', - 'datetime' => new \DateTime('2014-02-01 00:00:00'), - 'extra' => array(), - ); + 'datetime' => new \DateTimeImmutable('2016-01-21T21:11:30.123456+00:00'), + 'extra' => [], + ]; $formatter = new MongoDBFormatter(); $formattedRecord = $formatter->format($record); $this->assertCount(7, $formattedRecord); $this->assertEquals('some log message', $formattedRecord['message']); - $this->assertEquals(array(), $formattedRecord['context']); + $this->assertEquals([], $formattedRecord['context']); $this->assertEquals(Logger::WARNING, $formattedRecord['level']); $this->assertEquals(Logger::getLevelName(Logger::WARNING), $formattedRecord['level_name']); $this->assertEquals('test', $formattedRecord['channel']); - $this->assertInstanceOf('\MongoDate', $formattedRecord['datetime']); - $this->assertEquals('0.00000000 1391212800', $formattedRecord['datetime']->__toString()); - $this->assertEquals(array(), $formattedRecord['extra']); + $this->assertInstanceOf('MongoDB\BSON\UTCDateTime', $formattedRecord['datetime']); + $this->assertEquals('1453410690123', $formattedRecord['datetime']->__toString()); + $this->assertEquals([], $formattedRecord['extra']); } public function testRecursiveFormat() @@ -86,34 +86,34 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase $someObject->foo = 'something'; $someObject->bar = 'stuff'; - $record = array( + $record = [ 'message' => 'some log message', - 'context' => array( - 'stuff' => new \DateTime('2014-02-01 02:31:33'), + 'context' => [ + 'stuff' => new \DateTimeImmutable('1969-01-21T21:11:30.213000+00:00'), 'some_object' => $someObject, 'context_string' => 'some string', 'context_int' => 123456, 'except' => new \Exception('exception message', 987), - ), + ], 'level' => Logger::WARNING, 'level_name' => Logger::getLevelName(Logger::WARNING), 'channel' => 'test', - 'datetime' => new \DateTime('2014-02-01 00:00:00'), - 'extra' => array(), - ); + 'datetime' => new \DateTimeImmutable('2016-01-21T21:11:30.213000+00:00'), + 'extra' => [], + ]; $formatter = new MongoDBFormatter(); $formattedRecord = $formatter->format($record); $this->assertCount(5, $formattedRecord['context']); - $this->assertInstanceOf('\MongoDate', $formattedRecord['context']['stuff']); - $this->assertEquals('0.00000000 1391221893', $formattedRecord['context']['stuff']->__toString()); + $this->assertInstanceOf('MongoDB\BSON\UTCDateTime', $formattedRecord['context']['stuff']); + $this->assertEquals('-29731710213', $formattedRecord['context']['stuff']->__toString()); $this->assertEquals( - array( + [ 'foo' => 'something', 'bar' => 'stuff', 'class' => 'stdClass', - ), + ], $formattedRecord['context']['some_object'] ); $this->assertEquals('some string', $formattedRecord['context']['context_string']); @@ -130,75 +130,75 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase public function testFormatDepthArray() { - $record = array( + $record = [ 'message' => 'some log message', - 'context' => array( - 'nest2' => array( + 'context' => [ + 'nest2' => [ 'property' => 'anything', - 'nest3' => array( + 'nest3' => [ 'nest4' => 'value', 'property' => 'nothing', - ), - ), - ), + ], + ], + ], 'level' => Logger::WARNING, 'level_name' => Logger::getLevelName(Logger::WARNING), 'channel' => 'test', - 'datetime' => new \DateTime('2014-02-01 00:00:00'), - 'extra' => array(), - ); + 'datetime' => new \DateTimeImmutable('2016-01-21T21:11:30.123456+00:00'), + 'extra' => [], + ]; $formatter = new MongoDBFormatter(2); $formattedResult = $formatter->format($record); $this->assertEquals( - array( - 'nest2' => array( + [ + 'nest2' => [ 'property' => 'anything', 'nest3' => '[...]', - ), - ), + ], + ], $formattedResult['context'] ); } public function testFormatDepthArrayInfiniteNesting() { - $record = array( + $record = [ 'message' => 'some log message', - 'context' => array( - 'nest2' => array( + 'context' => [ + 'nest2' => [ 'property' => 'something', - 'nest3' => array( + 'nest3' => [ 'property' => 'anything', - 'nest4' => array( + 'nest4' => [ 'property' => 'nothing', - ), - ), - ), - ), + ], + ], + ], + ], 'level' => Logger::WARNING, 'level_name' => Logger::getLevelName(Logger::WARNING), 'channel' => 'test', - 'datetime' => new \DateTime('2014-02-01 00:00:00'), - 'extra' => array(), - ); + 'datetime' => new \DateTimeImmutable('2016-01-21T21:11:30.123456+00:00'), + 'extra' => [], + ]; $formatter = new MongoDBFormatter(0); $formattedResult = $formatter->format($record); $this->assertEquals( - array( - 'nest2' => array( + [ + 'nest2' => [ 'property' => 'something', - 'nest3' => array( + 'nest3' => [ 'property' => 'anything', - 'nest4' => array( + 'nest4' => [ 'property' => 'nothing', - ), - ), - ), - ), + ], + ], + ], + ], $formattedResult['context'] ); } @@ -211,46 +211,46 @@ class MongoDBFormatterTest extends \PHPUnit_Framework_TestCase $someObject->nest3->property = 'nothing'; $someObject->nest3->nest4 = 'invisible'; - $record = array( + $record = [ 'message' => 'some log message', - 'context' => array( + 'context' => [ 'nest2' => $someObject, - ), + ], 'level' => Logger::WARNING, 'level_name' => Logger::getLevelName(Logger::WARNING), 'channel' => 'test', - 'datetime' => new \DateTime('2014-02-01 00:00:00'), - 'extra' => array(), - ); + 'datetime' => new \DateTimeImmutable('2016-01-21T21:11:30.123456+00:00'), + 'extra' => [], + ]; $formatter = new MongoDBFormatter(2, true); $formattedResult = $formatter->format($record); $this->assertEquals( - array( - 'nest2' => array( + [ + 'nest2' => [ 'property' => 'anything', 'nest3' => '[...]', 'class' => 'stdClass', - ), - ), + ], + ], $formattedResult['context'] ); } public function testFormatDepthException() { - $record = array( + $record = [ 'message' => 'some log message', - 'context' => array( + 'context' => [ 'nest2' => new \Exception('exception message', 987), - ), + ], 'level' => Logger::WARNING, 'level_name' => Logger::getLevelName(Logger::WARNING), 'channel' => 'test', - 'datetime' => new \DateTime('2014-02-01 00:00:00'), - 'extra' => array(), - ); + 'datetime' => new \DateTimeImmutable('2016-01-21T21:11:30.123456+00:00'), + 'extra' => [], + ]; $formatter = new MongoDBFormatter(2, false); $formattedRecord = $formatter->format($record); diff --git a/tests/Monolog/Formatter/NormalizerFormatterTest.php b/tests/Monolog/Formatter/NormalizerFormatterTest.php index 57bcdf9..68b275d 100644 --- a/tests/Monolog/Formatter/NormalizerFormatterTest.php +++ b/tests/Monolog/Formatter/NormalizerFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -14,7 +14,7 @@ namespace Monolog\Formatter; /** * @covers Monolog\Formatter\NormalizerFormatter */ -class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase +class NormalizerFormatterTest extends \PHPUnit\Framework\TestCase { public function tearDown() { @@ -26,40 +26,40 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase public function testFormat() { $formatter = new NormalizerFormatter('Y-m-d'); - $formatted = $formatter->format(array( + $formatted = $formatter->format([ 'level_name' => 'ERROR', 'channel' => 'meh', 'message' => 'foo', - 'datetime' => new \DateTime, - 'extra' => array('foo' => new TestFooNorm, 'bar' => new TestBarNorm, 'baz' => array(), 'res' => fopen('php://memory', 'rb')), - 'context' => array( + 'datetime' => new \DateTimeImmutable, + 'extra' => ['foo' => new TestFooNorm, 'bar' => new TestBarNorm, 'baz' => [], 'res' => fopen('php://memory', 'rb')], + 'context' => [ 'foo' => 'bar', 'baz' => 'qux', 'inf' => INF, '-inf' => -INF, 'nan' => acos(4), - ), - )); + ], + ]); - $this->assertEquals(array( + $this->assertEquals([ 'level_name' => 'ERROR', 'channel' => 'meh', 'message' => 'foo', 'datetime' => date('Y-m-d'), - 'extra' => array( - 'foo' => '[object] (Monolog\\Formatter\\TestFooNorm: {"foo":"foo"})', - 'bar' => '[object] (Monolog\\Formatter\\TestBarNorm: bar)', - 'baz' => array(), - 'res' => '[resource] (stream)', - ), - 'context' => array( + 'extra' => [ + 'foo' => ['Monolog\\Formatter\\TestFooNorm' => ["foo" => "fooValue"]], + 'bar' => ['Monolog\\Formatter\\TestBarNorm' => 'bar'], + 'baz' => [], + 'res' => '[resource(stream)]', + ], + 'context' => [ 'foo' => 'bar', 'baz' => 'qux', 'inf' => 'INF', '-inf' => '-INF', 'nan' => 'NaN', - ), - ), $formatted); + ], + ], $formatted); } public function testFormatExceptions() @@ -67,22 +67,22 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase $formatter = new NormalizerFormatter('Y-m-d'); $e = new \LogicException('bar'); $e2 = new \RuntimeException('foo', 0, $e); - $formatted = $formatter->format(array( + $formatted = $formatter->format([ 'exception' => $e2, - )); + ]); $this->assertGreaterThan(5, count($formatted['exception']['trace'])); $this->assertTrue(isset($formatted['exception']['previous'])); unset($formatted['exception']['trace'], $formatted['exception']['previous']); - $this->assertEquals(array( - 'exception' => array( + $this->assertEquals([ + 'exception' => [ 'class' => get_class($e2), 'message' => $e2->getMessage(), 'code' => $e2->getCode(), 'file' => $e2->getFile().':'.$e2->getLine(), - ), - ), $formatted); + ], + ], $formatted); } public function testFormatSoapFaultException() @@ -93,14 +93,14 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase $formatter = new NormalizerFormatter('Y-m-d'); $e = new \SoapFault('foo', 'bar', 'hello', 'world'); - $formatted = $formatter->format(array( + $formatted = $formatter->format([ 'exception' => $e, - )); + ]); unset($formatted['exception']['trace']); - $this->assertEquals(array( - 'exception' => array( + $this->assertEquals([ + 'exception' => [ 'class' => 'SoapFault', 'message' => 'bar', 'code' => 0, @@ -108,58 +108,59 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase 'faultcode' => 'foo', 'faultactor' => 'hello', 'detail' => 'world', - ), - ), $formatted); + ], + ], $formatted); } public function testFormatToStringExceptionHandle() { $formatter = new NormalizerFormatter('Y-m-d'); - $this->setExpectedException('RuntimeException', 'Could not convert to string'); - $formatter->format(array( + $this->expectException('RuntimeException'); + $this->expectExceptionMessage('Could not convert to string'); + $formatter->format([ 'myObject' => new TestToStringError(), - )); + ]); } public function testBatchFormat() { $formatter = new NormalizerFormatter('Y-m-d'); - $formatted = $formatter->formatBatch(array( - array( + $formatted = $formatter->formatBatch([ + [ 'level_name' => 'CRITICAL', 'channel' => 'test', 'message' => 'bar', - 'context' => array(), - 'datetime' => new \DateTime, - 'extra' => array(), - ), - array( + 'context' => [], + 'datetime' => new \DateTimeImmutable, + 'extra' => [], + ], + [ 'level_name' => 'WARNING', 'channel' => 'log', 'message' => 'foo', - 'context' => array(), - 'datetime' => new \DateTime, - 'extra' => array(), - ), - )); - $this->assertEquals(array( - array( + 'context' => [], + 'datetime' => new \DateTimeImmutable, + 'extra' => [], + ], + ]); + $this->assertEquals([ + [ 'level_name' => 'CRITICAL', 'channel' => 'test', 'message' => 'bar', - 'context' => array(), + 'context' => [], 'datetime' => date('Y-m-d'), - 'extra' => array(), - ), - array( + 'extra' => [], + ], + [ 'level_name' => 'WARNING', 'channel' => 'log', 'message' => 'foo', - 'context' => array(), + 'context' => [], 'datetime' => date('Y-m-d'), - 'extra' => array(), - ), - ), $formatted); + 'extra' => [], + ], + ], $formatted); } /** @@ -186,11 +187,20 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase $formatter = new NormalizerFormatter(); $reflMethod = new \ReflectionMethod($formatter, 'toJson'); $reflMethod->setAccessible(true); - $res = $reflMethod->invoke($formatter, array($foo, $bar), true); + $res = $reflMethod->invoke($formatter, [$foo, $bar], true); restore_error_handler(); - $this->assertEquals(@json_encode(array($foo, $bar)), $res); + $this->assertEquals(@json_encode([$foo, $bar]), $res); + } + + public function testCanNormalizeReferences() + { + $formatter = new NormalizerFormatter(); + $x = ['foo' => 'bar']; + $y = ['x' => &$x]; + $x['y'] = &$y; + $formatter->format($y); } public function testIgnoresInvalidTypes() @@ -210,11 +220,11 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase $formatter = new NormalizerFormatter(); $reflMethod = new \ReflectionMethod($formatter, 'toJson'); $reflMethod->setAccessible(true); - $res = $reflMethod->invoke($formatter, array($resource), true); + $res = $reflMethod->invoke($formatter, [$resource], true); restore_error_handler(); - $this->assertEquals(@json_encode(array($resource)), $res); + $this->assertEquals(@json_encode([$resource]), $res); } public function testNormalizeHandleLargeArrays() @@ -240,10 +250,6 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase */ public function testThrowsOnInvalidEncoding() { - if (version_compare(PHP_VERSION, '5.5.0', '<')) { - // Ignore the warning that will be emitted by PHP <5.5.0 - \PHPUnit_Framework_Error_Warning::$enabled = false; - } $formatter = new NormalizerFormatter(); $reflMethod = new \ReflectionMethod($formatter, 'toJson'); $reflMethod->setAccessible(true); @@ -251,31 +257,18 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase // send an invalid unicode sequence as a object that can't be cleaned $record = new \stdClass; $record->message = "\xB1\x31"; - $res = $reflMethod->invoke($formatter, $record); - if (PHP_VERSION_ID < 50500 && $res === '{"message":null}') { - throw new \RuntimeException('PHP 5.3/5.4 throw a warning and null the value instead of returning false entirely'); - } + $reflMethod->invoke($formatter, $record); } public function testConvertsInvalidEncodingAsLatin9() { - if (version_compare(PHP_VERSION, '5.5.0', '<')) { - // Ignore the warning that will be emitted by PHP <5.5.0 - \PHPUnit_Framework_Error_Warning::$enabled = false; - } $formatter = new NormalizerFormatter(); $reflMethod = new \ReflectionMethod($formatter, 'toJson'); $reflMethod->setAccessible(true); - $res = $reflMethod->invoke($formatter, array('message' => "\xA4\xA6\xA8\xB4\xB8\xBC\xBD\xBE")); + $res = $reflMethod->invoke($formatter, ['message' => "\xA4\xA6\xA8\xB4\xB8\xBC\xBD\xBE"]); - if (version_compare(PHP_VERSION, '5.5.0', '>=')) { - $this->assertSame('{"message":"€ŠšŽžŒœŸ"}', $res); - } else { - // PHP <5.5 does not return false for an element encoding failure, - // instead it emits a warning (possibly) and nulls the value. - $this->assertSame('{"message":null}', $res); - } + $this->assertSame('{"message":"€ŠšŽžŒœŸ"}', $res); } /** @@ -295,19 +288,19 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase { $obj = new \stdClass; - return array( - 'null' => array(null, null), - 'int' => array(123, 123), - 'float' => array(123.45, 123.45), - 'bool false' => array(false, false), - 'bool true' => array(true, true), - 'ascii string' => array('abcdef', 'abcdef'), - 'latin9 string' => array("\xB1\x31\xA4\xA6\xA8\xB4\xB8\xBC\xBD\xBE\xFF", '±1€ŠšŽžŒœŸÿ'), - 'unicode string' => array('¤¦¨´¸¼½¾€ŠšŽžŒœŸ', '¤¦¨´¸¼½¾€ŠšŽžŒœŸ'), - 'empty array' => array(array(), array()), - 'array' => array(array('abcdef'), array('abcdef')), - 'object' => array($obj, $obj), - ); + return [ + 'null' => [null, null], + 'int' => [123, 123], + 'float' => [123.45, 123.45], + 'bool false' => [false, false], + 'bool true' => [true, true], + 'ascii string' => ['abcdef', 'abcdef'], + 'latin9 string' => ["\xB1\x31\xA4\xA6\xA8\xB4\xB8\xBC\xBD\xBE\xFF", '±1€ŠšŽžŒœŸÿ'], + 'unicode string' => ['¤¦¨´¸¼½¾€ŠšŽžŒœŸ', '¤¦¨´¸¼½¾€ŠšŽžŒœŸ'], + 'empty array' => [[], []], + 'array' => [['abcdef'], ['abcdef']], + 'object' => [$obj, $obj], + ]; } /** @@ -321,32 +314,29 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase $reflMethod = new \ReflectionMethod($formatter, 'handleJsonError'); $reflMethod->setAccessible(true); - $this->setExpectedException('RuntimeException', $msg); + $this->expectException('RuntimeException'); + $this->expectExceptionMessage($msg); $reflMethod->invoke($formatter, $code, 'faked'); } public function providesHandleJsonErrorFailure() { - return array( - 'depth' => array(JSON_ERROR_DEPTH, 'Maximum stack depth exceeded'), - 'state' => array(JSON_ERROR_STATE_MISMATCH, 'Underflow or the modes mismatch'), - 'ctrl' => array(JSON_ERROR_CTRL_CHAR, 'Unexpected control character found'), - 'default' => array(-1, 'Unknown error'), - ); + return [ + 'depth' => [JSON_ERROR_DEPTH, 'Maximum stack depth exceeded'], + 'state' => [JSON_ERROR_STATE_MISMATCH, 'Underflow or the modes mismatch'], + 'ctrl' => [JSON_ERROR_CTRL_CHAR, 'Unexpected control character found'], + 'default' => [-1, 'Unknown error'], + ]; } + // This happens i.e. in React promises or Guzzle streams where stream wrappers are registered + // and no file or line are included in the trace because it's treated as internal function public function testExceptionTraceWithArgs() { if (defined('HHVM_VERSION')) { $this->markTestSkipped('Not supported in HHVM since it detects errors differently'); } - // This happens i.e. in React promises or Guzzle streams where stream wrappers are registered - // and no file or line are included in the trace because it's treated as internal function - set_error_handler(function ($errno, $errstr, $errfile, $errline) { - throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); - }); - try { // This will contain $resource and $wrappedResource as arguments in the trace item $resource = fopen('php://memory', 'rw+'); @@ -354,25 +344,24 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase $wrappedResource = new TestFooNorm; $wrappedResource->foo = $resource; // Just do something stupid with a resource/wrapped resource as argument - array_keys($wrappedResource); - } catch (\Exception $e) { - restore_error_handler(); + $arr = [$wrappedResource, $resource]; + // modifying the array inside throws a "usort(): Array was modified by the user comparison function" + usort($arr, function ($a, $b) { + throw new \ErrorException('Foo'); + }); + } catch (\Throwable $e) { } $formatter = new NormalizerFormatter(); - $record = array('context' => array('exception' => $e)); + $record = ['context' => ['exception' => $e]]; $result = $formatter->format($record); $this->assertRegExp( - '%"resource":"\[resource\] \(stream\)"%', + '%\[resource\(stream\)\]%', $result['context']['exception']['trace'][0] ); - if (version_compare(PHP_VERSION, '5.5.0', '>=')) { - $pattern = '%"wrappedResource":"\[object\] \(Monolog\\\\\\\\Formatter\\\\\\\\TestFooNorm: \)"%'; - } else { - $pattern = '%\\\\"foo\\\\":null%'; - } + $pattern = '%\[\{"Monolog\\\\\\\\Formatter\\\\\\\\TestFooNorm":"JSON_ERROR"\}%'; // Tests that the wrapped resource is ignored while encoding, only works for PHP <= 5.4 $this->assertRegExp( @@ -384,7 +373,7 @@ class NormalizerFormatterTest extends \PHPUnit_Framework_TestCase class TestFooNorm { - public $foo = 'foo'; + public $foo = 'fooValue'; } class TestBarNorm diff --git a/tests/Monolog/Formatter/ScalarFormatterTest.php b/tests/Monolog/Formatter/ScalarFormatterTest.php index b1c8fd4..9af4937 100644 --- a/tests/Monolog/Formatter/ScalarFormatterTest.php +++ b/tests/Monolog/Formatter/ScalarFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,9 @@ namespace Monolog\Formatter; -class ScalarFormatterTest extends \PHPUnit_Framework_TestCase +use Monolog\DateTimeImmutable; + +class ScalarFormatterTest extends \PHPUnit\Framework\TestCase { private $formatter; @@ -22,7 +24,7 @@ class ScalarFormatterTest extends \PHPUnit_Framework_TestCase public function buildTrace(\Exception $e) { - $data = array(); + $data = []; $trace = $e->getTrace(); foreach ($trace as $frame) { if (isset($frame['file'])) { @@ -37,74 +39,70 @@ class ScalarFormatterTest extends \PHPUnit_Framework_TestCase public function encodeJson($data) { - if (version_compare(PHP_VERSION, '5.4.0', '>=')) { - return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); - } - - return json_encode($data); + return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); } public function testFormat() { $exception = new \Exception('foo'); - $formatted = $this->formatter->format(array( + $formatted = $this->formatter->format([ 'foo' => 'string', 'bar' => 1, 'baz' => false, - 'bam' => array(1, 2, 3), - 'bat' => array('foo' => 'bar'), - 'bap' => \DateTime::createFromFormat(\DateTime::ISO8601, '1970-01-01T00:00:00+0000'), + 'bam' => [1, 2, 3], + 'bat' => ['foo' => 'bar'], + 'bap' => $dt = new DateTimeImmutable(true), 'ban' => $exception, - )); + ]); - $this->assertSame(array( + $this->assertSame([ 'foo' => 'string', 'bar' => 1, 'baz' => false, - 'bam' => $this->encodeJson(array(1, 2, 3)), - 'bat' => $this->encodeJson(array('foo' => 'bar')), - 'bap' => '1970-01-01 00:00:00', - 'ban' => $this->encodeJson(array( + 'bam' => $this->encodeJson([1, 2, 3]), + 'bat' => $this->encodeJson(['foo' => 'bar']), + 'bap' => (string) $dt, + 'ban' => $this->encodeJson([ 'class' => get_class($exception), 'message' => $exception->getMessage(), 'code' => $exception->getCode(), 'file' => $exception->getFile() . ':' . $exception->getLine(), 'trace' => $this->buildTrace($exception), - )), - ), $formatted); + ]), + ], $formatted); } public function testFormatWithErrorContext() { - $context = array('file' => 'foo', 'line' => 1); - $formatted = $this->formatter->format(array( + $context = ['file' => 'foo', 'line' => 1]; + $formatted = $this->formatter->format([ 'context' => $context, - )); + ]); - $this->assertSame(array( + $this->assertSame([ 'context' => $this->encodeJson($context), - ), $formatted); + ], $formatted); } public function testFormatWithExceptionContext() { $exception = new \Exception('foo'); - $formatted = $this->formatter->format(array( - 'context' => array( + $formatted = $this->formatter->format([ + 'context' => [ 'exception' => $exception, - ), - )); + ], + ]); - $this->assertSame(array( - 'context' => $this->encodeJson(array( - 'exception' => array( + $this->assertSame([ + 'context' => $this->encodeJson([ + 'exception' => [ 'class' => get_class($exception), 'message' => $exception->getMessage(), 'code' => $exception->getCode(), 'file' => $exception->getFile() . ':' . $exception->getLine(), 'trace' => $this->buildTrace($exception), - ), - )), - ), $formatted); + ], + ]), + ], $formatted); } } diff --git a/tests/Monolog/Formatter/WildfireFormatterTest.php b/tests/Monolog/Formatter/WildfireFormatterTest.php index 52f15a3..1374947 100644 --- a/tests/Monolog/Formatter/WildfireFormatterTest.php +++ b/tests/Monolog/Formatter/WildfireFormatterTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -13,7 +13,7 @@ namespace Monolog\Formatter; use Monolog\Logger; -class WildfireFormatterTest extends \PHPUnit_Framework_TestCase +class WildfireFormatterTest extends \PHPUnit\Framework\TestCase { /** * @covers Monolog\Formatter\WildfireFormatter::format @@ -21,15 +21,15 @@ class WildfireFormatterTest extends \PHPUnit_Framework_TestCase public function testDefaultFormat() { $wildfire = new WildfireFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('ip' => '127.0.0.1'), + 'context' => ['from' => 'logger'], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => ['ip' => '127.0.0.1'], 'message' => 'log', - ); + ]; $message = $wildfire->format($record); @@ -46,15 +46,15 @@ class WildfireFormatterTest extends \PHPUnit_Framework_TestCase public function testFormatWithFileAndLine() { $wildfire = new WildfireFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('from' => 'logger'), - 'datetime' => new \DateTime("@0"), - 'extra' => array('ip' => '127.0.0.1', 'file' => 'test', 'line' => 14), + 'context' => ['from' => 'logger'], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => ['ip' => '127.0.0.1', 'file' => 'test', 'line' => 14], 'message' => 'log', - ); + ]; $message = $wildfire->format($record); @@ -71,15 +71,15 @@ class WildfireFormatterTest extends \PHPUnit_Framework_TestCase public function testFormatWithoutContext() { $wildfire = new WildfireFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array(), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), + 'context' => [], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [], 'message' => 'log', - ); + ]; $message = $wildfire->format($record); @@ -96,17 +96,17 @@ class WildfireFormatterTest extends \PHPUnit_Framework_TestCase public function testBatchFormatThrowException() { $wildfire = new WildfireFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array(), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), + 'context' => [], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [], 'message' => 'log', - ); + ]; - $wildfire->formatBatch(array($record)); + $wildfire->formatBatch([$record]); } /** @@ -115,22 +115,22 @@ class WildfireFormatterTest extends \PHPUnit_Framework_TestCase public function testTableFormat() { $wildfire = new WildfireFormatter(); - $record = array( + $record = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'table-channel', - 'context' => array( - WildfireFormatter::TABLE => array( - array('col1', 'col2', 'col3'), - array('val1', 'val2', 'val3'), - array('foo1', 'foo2', 'foo3'), - array('bar1', 'bar2', 'bar3'), - ), - ), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), + 'context' => [ + WildfireFormatter::TABLE => [ + ['col1', 'col2', 'col3'], + ['val1', 'val2', 'val3'], + ['foo1', 'foo2', 'foo3'], + ['bar1', 'bar2', 'bar3'], + ], + ], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [], 'message' => 'table-message', - ); + ]; $message = $wildfire->format($record); diff --git a/tests/Monolog/Handler/AbstractHandlerTest.php b/tests/Monolog/Handler/AbstractHandlerTest.php index 568eb9d..b7451a7 100644 --- a/tests/Monolog/Handler/AbstractHandlerTest.php +++ b/tests/Monolog/Handler/AbstractHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,10 +11,8 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; -use Monolog\Formatter\LineFormatter; -use Monolog\Processor\WebProcessor; class AbstractHandlerTest extends TestCase { @@ -24,21 +22,17 @@ class AbstractHandlerTest extends TestCase * @covers Monolog\Handler\AbstractHandler::setLevel * @covers Monolog\Handler\AbstractHandler::getBubble * @covers Monolog\Handler\AbstractHandler::setBubble - * @covers Monolog\Handler\AbstractHandler::getFormatter - * @covers Monolog\Handler\AbstractHandler::setFormatter */ public function testConstructAndGetSet() { - $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler', array(Logger::WARNING, false)); + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler', [Logger::WARNING, false]); $this->assertEquals(Logger::WARNING, $handler->getLevel()); $this->assertEquals(false, $handler->getBubble()); $handler->setLevel(Logger::ERROR); $handler->setBubble(true); - $handler->setFormatter($formatter = new LineFormatter); $this->assertEquals(Logger::ERROR, $handler->getLevel()); $this->assertEquals(true, $handler->getBubble()); - $this->assertSame($formatter, $handler->getFormatter()); } /** @@ -49,7 +43,7 @@ class AbstractHandlerTest extends TestCase $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler'); $handler->expects($this->exactly(2)) ->method('handle'); - $handler->handleBatch(array($this->getRecord(), $this->getRecord())); + $handler->handleBatch([$this->getRecord(), $this->getRecord()]); } /** @@ -57,7 +51,7 @@ class AbstractHandlerTest extends TestCase */ public function testIsHandling() { - $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler', array(Logger::WARNING, false)); + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler', [Logger::WARNING, false]); $this->assertTrue($handler->isHandling($this->getRecord())); $this->assertFalse($handler->isHandling($this->getRecord(Logger::DEBUG))); } @@ -67,49 +61,9 @@ class AbstractHandlerTest extends TestCase */ public function testHandlesPsrStyleLevels() { - $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler', array('warning', false)); + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler', ['warning', false]); $this->assertFalse($handler->isHandling($this->getRecord(Logger::DEBUG))); $handler->setLevel('debug'); $this->assertTrue($handler->isHandling($this->getRecord(Logger::DEBUG))); } - - /** - * @covers Monolog\Handler\AbstractHandler::getFormatter - * @covers Monolog\Handler\AbstractHandler::getDefaultFormatter - */ - public function testGetFormatterInitializesDefault() - { - $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler'); - $this->assertInstanceOf('Monolog\Formatter\LineFormatter', $handler->getFormatter()); - } - - /** - * @covers Monolog\Handler\AbstractHandler::pushProcessor - * @covers Monolog\Handler\AbstractHandler::popProcessor - * @expectedException LogicException - */ - public function testPushPopProcessor() - { - $logger = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler'); - $processor1 = new WebProcessor; - $processor2 = new WebProcessor; - - $logger->pushProcessor($processor1); - $logger->pushProcessor($processor2); - - $this->assertEquals($processor2, $logger->popProcessor()); - $this->assertEquals($processor1, $logger->popProcessor()); - $logger->popProcessor(); - } - - /** - * @covers Monolog\Handler\AbstractHandler::pushProcessor - * @expectedException InvalidArgumentException - */ - public function testPushProcessorWithNonCallable() - { - $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractHandler'); - - $handler->pushProcessor(new \stdClass()); - } } diff --git a/tests/Monolog/Handler/AbstractProcessingHandlerTest.php b/tests/Monolog/Handler/AbstractProcessingHandlerTest.php index 24d4f63..58d0920 100644 --- a/tests/Monolog/Handler/AbstractProcessingHandlerTest.php +++ b/tests/Monolog/Handler/AbstractProcessingHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,18 +11,30 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; use Monolog\Processor\WebProcessor; +use Monolog\Formatter\LineFormatter; class AbstractProcessingHandlerTest extends TestCase { /** + * @covers Monolog\Handler\FormattableHandlerTrait::getFormatter + * @covers Monolog\Handler\FormattableHandlerTrait::setFormatter + */ + public function testConstructAndGetSet() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', [Logger::WARNING, false]); + $handler->setFormatter($formatter = new LineFormatter); + $this->assertSame($formatter, $handler->getFormatter()); + } + + /** * @covers Monolog\Handler\AbstractProcessingHandler::handle */ public function testHandleLowerLevelMessage() { - $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', array(Logger::WARNING, true)); + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', [Logger::WARNING, true]); $this->assertFalse($handler->handle($this->getRecord(Logger::DEBUG))); } @@ -31,7 +43,7 @@ class AbstractProcessingHandlerTest extends TestCase */ public function testHandleBubbling() { - $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', array(Logger::DEBUG, true)); + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', [Logger::DEBUG, true]); $this->assertFalse($handler->handle($this->getRecord())); } @@ -40,7 +52,7 @@ class AbstractProcessingHandlerTest extends TestCase */ public function testHandleNotBubbling() { - $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', array(Logger::DEBUG, false)); + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', [Logger::DEBUG, false]); $this->assertTrue($handler->handle($this->getRecord())); } @@ -49,7 +61,7 @@ class AbstractProcessingHandlerTest extends TestCase */ public function testHandleIsFalseWhenNotHandled() { - $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', array(Logger::WARNING, false)); + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler', [Logger::WARNING, false]); $this->assertTrue($handler->handle($this->getRecord())); $this->assertFalse($handler->handle($this->getRecord(Logger::DEBUG))); } @@ -60,13 +72,13 @@ class AbstractProcessingHandlerTest extends TestCase public function testProcessRecord() { $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler'); - $handler->pushProcessor(new WebProcessor(array( + $handler->pushProcessor(new WebProcessor([ 'REQUEST_URI' => '', 'REQUEST_METHOD' => '', 'REMOTE_ADDR' => '', 'SERVER_NAME' => '', 'UNIQUE_ID' => '', - ))); + ])); $handledRecord = null; $handler->expects($this->once()) ->method('write') @@ -77,4 +89,44 @@ class AbstractProcessingHandlerTest extends TestCase $handler->handle($this->getRecord()); $this->assertEquals(6, count($handledRecord['extra'])); } + + /** + * @covers Monolog\Handler\ProcessableHandlerTrait::pushProcessor + * @covers Monolog\Handler\ProcessableHandlerTrait::popProcessor + * @expectedException LogicException + */ + public function testPushPopProcessor() + { + $logger = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler'); + $processor1 = new WebProcessor; + $processor2 = new WebProcessor; + + $logger->pushProcessor($processor1); + $logger->pushProcessor($processor2); + + $this->assertEquals($processor2, $logger->popProcessor()); + $this->assertEquals($processor1, $logger->popProcessor()); + $logger->popProcessor(); + } + + /** + * @covers Monolog\Handler\ProcessableHandlerTrait::pushProcessor + * @expectedException TypeError + */ + public function testPushProcessorWithNonCallable() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler'); + + $handler->pushProcessor(new \stdClass()); + } + + /** + * @covers Monolog\Handler\FormattableHandlerTrait::getFormatter + * @covers Monolog\Handler\FormattableHandlerTrait::getDefaultFormatter + */ + public function testGetFormatterInitializesDefault() + { + $handler = $this->getMockForAbstractClass('Monolog\Handler\AbstractProcessingHandler'); + $this->assertInstanceOf(LineFormatter::class, $handler->getFormatter()); + } } diff --git a/tests/Monolog/Handler/AmqpHandlerTest.php b/tests/Monolog/Handler/AmqpHandlerTest.php index 8e0e723..680de29 100644 --- a/tests/Monolog/Handler/AmqpHandlerTest.php +++ b/tests/Monolog/Handler/AmqpHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; use PhpAmqpLib\Message\AMQPMessage; use PhpAmqpLib\Connection\AMQPConnection; @@ -31,43 +31,43 @@ class AmqpHandlerTest extends TestCase $this->markTestSkipped("Please update AMQP to version >= 1.0"); } - $messages = array(); + $messages = []; + + $exchange = $this->getMockBuilder('AMQPExchange') + ->setMethods(['publish', 'setName']) + ->disableOriginalConstructor() + ->getMock(); - $exchange = $this->getMock('AMQPExchange', array('publish', 'setName'), array(), '', false); - $exchange->expects($this->once()) - ->method('setName') - ->with('log') - ; $exchange->expects($this->any()) ->method('publish') - ->will($this->returnCallback(function ($message, $routing_key, $flags = 0, $attributes = array()) use (&$messages) { - $messages[] = array($message, $routing_key, $flags, $attributes); + ->will($this->returnCallback(function ($message, $routing_key, $flags = 0, $attributes = []) use (&$messages) { + $messages[] = [$message, $routing_key, $flags, $attributes]; })) ; - $handler = new AmqpHandler($exchange, 'log'); + $handler = new AmqpHandler($exchange); - $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + $record = $this->getRecord(Logger::WARNING, 'test', ['data' => new \stdClass, 'foo' => 34]); - $expected = array( - array( + $expected = [ + [ 'message' => 'test', - 'context' => array( - 'data' => array(), + 'context' => [ + 'data' => [], 'foo' => 34, - ), + ], 'level' => 300, 'level_name' => 'WARNING', 'channel' => 'test', - 'extra' => array(), - ), - 'warn.test', + 'extra' => [], + ], + 'warning.test', 0, - array( + [ 'delivery_mode' => 2, 'content_type' => 'application/json', - ), - ); + ], + ]; $handler->handle($record); @@ -83,43 +83,46 @@ class AmqpHandlerTest extends TestCase $this->markTestSkipped("php-amqplib not installed"); } - $messages = array(); + $messages = []; - $exchange = $this->getMock('PhpAmqpLib\Channel\AMQPChannel', array('basic_publish', '__destruct'), array(), '', false); + $exchange = $this->getMockBuilder('PhpAmqpLib\Channel\AMQPChannel') + ->setMethods(['basic_publish', '__destruct']) + ->disableOriginalConstructor() + ->getMock(); $exchange->expects($this->any()) ->method('basic_publish') ->will($this->returnCallback(function (AMQPMessage $msg, $exchange = "", $routing_key = "", $mandatory = false, $immediate = false, $ticket = null) use (&$messages) { - $messages[] = array($msg, $exchange, $routing_key, $mandatory, $immediate, $ticket); + $messages[] = [$msg, $exchange, $routing_key, $mandatory, $immediate, $ticket]; })) ; $handler = new AmqpHandler($exchange, 'log'); - $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + $record = $this->getRecord(Logger::WARNING, 'test', ['data' => new \stdClass, 'foo' => 34]); - $expected = array( - array( + $expected = [ + [ 'message' => 'test', - 'context' => array( - 'data' => array(), + 'context' => [ + 'data' => [], 'foo' => 34, - ), + ], 'level' => 300, 'level_name' => 'WARNING', 'channel' => 'test', - 'extra' => array(), - ), + 'extra' => [], + ], 'log', - 'warn.test', + 'warning.test', false, false, null, - array( + [ 'delivery_mode' => 2, 'content_type' => 'application/json', - ), - ); + ], + ]; $handler->handle($record); diff --git a/tests/Monolog/Handler/BrowserConsoleHandlerTest.php b/tests/Monolog/Handler/BrowserConsoleHandlerTest.php index ffb1d74..048ee1c 100644 --- a/tests/Monolog/Handler/BrowserConsoleHandlerTest.php +++ b/tests/Monolog/Handler/BrowserConsoleHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; /** @@ -89,7 +89,7 @@ EOF; $handler = new BrowserConsoleHandler(); $handler->setFormatter($this->getIdentityFormatter()); - $handler->handle($this->getRecord(Logger::DEBUG, 'test', array('foo' => 'bar'))); + $handler->handle($this->getRecord(Logger::DEBUG, 'test', ['foo' => 'bar'])); $expected = <<<EOF (function (c) {if (c && c.groupCollapsed) { diff --git a/tests/Monolog/Handler/BufferHandlerTest.php b/tests/Monolog/Handler/BufferHandlerTest.php index da8b3c3..f1338b4 100644 --- a/tests/Monolog/Handler/BufferHandlerTest.php +++ b/tests/Monolog/Handler/BufferHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; class BufferHandlerTest extends TestCase @@ -47,7 +47,7 @@ class BufferHandlerTest extends TestCase $handler->handle($this->getRecord(Logger::WARNING)); $handler->handle($this->getRecord(Logger::DEBUG)); $this->shutdownCheckHandler = $test; - register_shutdown_function(array($this, 'checkPropagation')); + register_shutdown_function([$this, 'checkPropagation']); } public function checkPropagation() diff --git a/tests/Monolog/Handler/ChromePHPHandlerTest.php b/tests/Monolog/Handler/ChromePHPHandlerTest.php index 0449f8b..e9a1f98 100644 --- a/tests/Monolog/Handler/ChromePHPHandlerTest.php +++ b/tests/Monolog/Handler/ChromePHPHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; /** @@ -37,17 +37,17 @@ class ChromePHPHandlerTest extends TestCase $handler->handle($this->getRecord(Logger::DEBUG)); $handler->handle($this->getRecord(Logger::WARNING)); - $expected = array( - 'X-ChromeLogger-Data' => base64_encode(utf8_encode(json_encode(array( + $expected = [ + 'X-ChromeLogger-Data' => base64_encode(utf8_encode(json_encode([ 'version' => ChromePHPHandler::VERSION, - 'columns' => array('label', 'log', 'backtrace', 'type'), - 'rows' => array( + 'columns' => ['label', 'log', 'backtrace', 'type'], + 'rows' => [ 'test', 'test', - ), + ], 'request_uri' => '', - )))), - ); + ]))), + ]; $this->assertEquals($expected, $handler->getHeaders()); } @@ -71,33 +71,33 @@ class ChromePHPHandlerTest extends TestCase // overflow chrome headers limit $handler->handle($this->getRecord(Logger::WARNING, str_repeat('a', 100 * 1024))); - $expected = array( - 'X-ChromeLogger-Data' => base64_encode(utf8_encode(json_encode(array( + $expected = [ + 'X-ChromeLogger-Data' => base64_encode(utf8_encode(json_encode([ 'version' => ChromePHPHandler::VERSION, - 'columns' => array('label', 'log', 'backtrace', 'type'), - 'rows' => array( - array( + 'columns' => ['label', 'log', 'backtrace', 'type'], + 'rows' => [ + [ 'test', 'test', 'unknown', 'log', - ), - array( + ], + [ 'test', str_repeat('a', 150 * 1024), 'unknown', 'warn', - ), - array( + ], + [ 'monolog', 'Incomplete logs, chrome header size limit reached', 'unknown', 'warn', - ), - ), + ], + ], 'request_uri' => '', - )))), - ); + ]))), + ]; $this->assertEquals($expected, $handler->getHeaders()); } @@ -114,19 +114,19 @@ class ChromePHPHandlerTest extends TestCase $handler2->handle($this->getRecord(Logger::DEBUG)); $handler2->handle($this->getRecord(Logger::WARNING)); - $expected = array( - 'X-ChromeLogger-Data' => base64_encode(utf8_encode(json_encode(array( + $expected = [ + 'X-ChromeLogger-Data' => base64_encode(utf8_encode(json_encode([ 'version' => ChromePHPHandler::VERSION, - 'columns' => array('label', 'log', 'backtrace', 'type'), - 'rows' => array( + 'columns' => ['label', 'log', 'backtrace', 'type'], + 'rows' => [ 'test', 'test', 'test', 'test', - ), + ], 'request_uri' => '', - )))), - ); + ]))), + ]; $this->assertEquals($expected, $handler2->getHeaders()); } @@ -134,14 +134,14 @@ class ChromePHPHandlerTest extends TestCase class TestChromePHPHandler extends ChromePHPHandler { - protected $headers = array(); + protected $headers = []; public static function reset() { self::$initialized = false; self::$overflowed = false; self::$sendHeaders = true; - self::$json['rows'] = array(); + self::$json['rows'] = []; } protected function sendHeader($header, $content) diff --git a/tests/Monolog/Handler/CouchDBHandlerTest.php b/tests/Monolog/Handler/CouchDBHandlerTest.php index 9fc4b38..f89a130 100644 --- a/tests/Monolog/Handler/CouchDBHandlerTest.php +++ b/tests/Monolog/Handler/CouchDBHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,14 +11,14 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; class CouchDBHandlerTest extends TestCase { public function testHandle() { - $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + $record = $this->getRecord(Logger::WARNING, 'test', ['data' => new \stdClass, 'foo' => 34]); $handler = new CouchDBHandler(); diff --git a/tests/Monolog/Handler/DeduplicationHandlerTest.php b/tests/Monolog/Handler/DeduplicationHandlerTest.php index e2aff86..491fd85 100644 --- a/tests/Monolog/Handler/DeduplicationHandlerTest.php +++ b/tests/Monolog/Handler/DeduplicationHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; class DeduplicationHandlerTest extends TestCase @@ -88,10 +88,10 @@ class DeduplicationHandlerTest extends TestCase $handler = new DeduplicationHandler($test, sys_get_temp_dir().'/monolog_dedup.log', 0); $record = $this->getRecord(Logger::ERROR); - $record['datetime']->modify('+62seconds'); + $record['datetime'] = $record['datetime']->modify('+62seconds'); $handler->handle($record); $record = $this->getRecord(Logger::CRITICAL); - $record['datetime']->modify('+62seconds'); + $record['datetime'] = $record['datetime']->modify('+62seconds'); $handler->handle($record); $handler->flush(); @@ -115,13 +115,13 @@ class DeduplicationHandlerTest extends TestCase // handle two records from yesterday, and one recent $record = $this->getRecord(Logger::ERROR); - $record['datetime']->modify('-1day -10seconds'); + $record['datetime'] = $record['datetime']->modify('-1day -10seconds'); $handler->handle($record); $record2 = $this->getRecord(Logger::CRITICAL); - $record2['datetime']->modify('-1day -10seconds'); + $record2['datetime'] = $record2['datetime']->modify('-1day -10seconds'); $handler->handle($record2); $record3 = $this->getRecord(Logger::CRITICAL); - $record3['datetime']->modify('-30seconds'); + $record3['datetime'] = $record3['datetime']->modify('-30seconds'); $handler->handle($record3); // log is written as none of them are duplicate diff --git a/tests/Monolog/Handler/DoctrineCouchDBHandlerTest.php b/tests/Monolog/Handler/DoctrineCouchDBHandlerTest.php index d67da90..f72f323 100644 --- a/tests/Monolog/Handler/DoctrineCouchDBHandlerTest.php +++ b/tests/Monolog/Handler/DoctrineCouchDBHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; class DoctrineCouchDBHandlerTest extends TestCase @@ -26,21 +26,21 @@ class DoctrineCouchDBHandlerTest extends TestCase public function testHandle() { $client = $this->getMockBuilder('Doctrine\\CouchDB\\CouchDBClient') - ->setMethods(array('postDocument')) + ->setMethods(['postDocument']) ->disableOriginalConstructor() ->getMock(); - $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + $record = $this->getRecord(Logger::WARNING, 'test', ['data' => new \stdClass, 'foo' => 34]); - $expected = array( + $expected = [ 'message' => 'test', - 'context' => array('data' => '[object] (stdClass: {})', 'foo' => 34), + 'context' => ['data' => ['stdClass' => []], 'foo' => 34], 'level' => Logger::WARNING, 'level_name' => 'WARNING', 'channel' => 'test', - 'datetime' => $record['datetime']->format('Y-m-d H:i:s'), - 'extra' => array(), - ); + 'datetime' => (string) $record['datetime'], + 'extra' => [], + ]; $client->expects($this->once()) ->method('postDocument') diff --git a/tests/Monolog/Handler/DynamoDbHandlerTest.php b/tests/Monolog/Handler/DynamoDbHandlerTest.php index 2e6c348..9d61356 100644 --- a/tests/Monolog/Handler/DynamoDbHandlerTest.php +++ b/tests/Monolog/Handler/DynamoDbHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; class DynamoDbHandlerTest extends TestCase { @@ -24,8 +24,9 @@ class DynamoDbHandlerTest extends TestCase } $this->client = $this->getMockBuilder('Aws\DynamoDb\DynamoDbClient') - ->setMethods(array('formatAttributes', '__call')) - ->disableOriginalConstructor()->getMock(); + ->setMethods(['formatAttributes', '__call']) + ->disableOriginalConstructor() + ->getMock(); } public function testConstruct() @@ -47,8 +48,8 @@ class DynamoDbHandlerTest extends TestCase public function testHandle() { $record = $this->getRecord(); - $formatter = $this->getMock('Monolog\Formatter\FormatterInterface'); - $formatted = array('foo' => 1, 'bar' => 2); + $formatter = $this->createMock('Monolog\Formatter\FormatterInterface'); + $formatted = ['foo' => 1, 'bar' => 2]; $handler = new DynamoDbHandler($this->client, 'foo'); $handler->setFormatter($formatter); @@ -72,10 +73,10 @@ class DynamoDbHandlerTest extends TestCase $this->client ->expects($this->once()) ->method('__call') - ->with('putItem', array(array( + ->with('putItem', [[ 'TableName' => 'foo', 'Item' => $expFormatted, - ))); + ]]); $handler->handle($record); } diff --git a/tests/Monolog/Handler/ElasticSearchHandlerTest.php b/tests/Monolog/Handler/ElasticSearchHandlerTest.php index 1687074..e0e207d 100644 --- a/tests/Monolog/Handler/ElasticSearchHandlerTest.php +++ b/tests/Monolog/Handler/ElasticSearchHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -13,7 +13,7 @@ namespace Monolog\Handler; use Monolog\Formatter\ElasticaFormatter; use Monolog\Formatter\NormalizerFormatter; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; use Elastica\Client; use Elastica\Request; @@ -29,10 +29,10 @@ class ElasticSearchHandlerTest extends TestCase /** * @var array Default handler options */ - protected $options = array( + protected $options = [ 'index' => 'my_index', 'type' => 'doc_type', - ); + ]; public function setUp() { @@ -43,7 +43,7 @@ class ElasticSearchHandlerTest extends TestCase // base mock Elastica Client object $this->client = $this->getMockBuilder('Elastica\Client') - ->setMethods(array('addDocuments')) + ->setMethods(['addDocuments']) ->disableOriginalConstructor() ->getMock(); } @@ -57,19 +57,19 @@ class ElasticSearchHandlerTest extends TestCase public function testHandle() { // log message - $msg = array( + $msg = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('foo' => 7, 'bar', 'class' => new \stdClass), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), + 'context' => ['foo' => 7, 'bar', 'class' => new \stdClass], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [], 'message' => 'log', - ); + ]; // format expected result $formatter = new ElasticaFormatter($this->options['index'], $this->options['type']); - $expected = array($formatter->format($msg)); + $expected = [$formatter->format($msg)]; // setup ES client mock $this->client->expects($this->any()) @@ -79,7 +79,7 @@ class ElasticSearchHandlerTest extends TestCase // perform tests $handler = new ElasticSearchHandler($this->client, $this->options); $handler->handle($msg); - $handler->handleBatch(array($msg)); + $handler->handleBatch([$msg]); } /** @@ -113,11 +113,11 @@ class ElasticSearchHandlerTest extends TestCase */ public function testOptions() { - $expected = array( + $expected = [ 'index' => $this->options['index'], 'type' => $this->options['type'], 'ignore_error' => false, - ); + ]; $handler = new ElasticSearchHandler($this->client, $this->options); $this->assertEquals($expected, $handler->getOptions()); } @@ -128,13 +128,14 @@ class ElasticSearchHandlerTest extends TestCase */ public function testConnectionErrors($ignore, $expectedError) { - $clientOpts = array('host' => '127.0.0.1', 'port' => 1); + $clientOpts = ['host' => '127.0.0.1', 'port' => 1]; $client = new Client($clientOpts); - $handlerOpts = array('ignore_error' => $ignore); + $handlerOpts = ['ignore_error' => $ignore]; $handler = new ElasticSearchHandler($client, $handlerOpts); if ($expectedError) { - $this->setExpectedException($expectedError[0], $expectedError[1]); + $this->expectException($expectedError[0]); + $this->expectExceptionMessage($expectedError[1]); $handler->handle($this->getRecord()); } else { $this->assertFalse($handler->handle($this->getRecord())); @@ -146,10 +147,10 @@ class ElasticSearchHandlerTest extends TestCase */ public function providerTestConnectionErrors() { - return array( - array(false, array('RuntimeException', 'Error sending messages to Elasticsearch')), - array(true, false), - ); + return [ + [false, ['RuntimeException', 'Error sending messages to Elasticsearch']], + [true, false], + ]; } /** @@ -162,28 +163,28 @@ class ElasticSearchHandlerTest extends TestCase */ public function testHandleIntegration() { - $msg = array( + $msg = [ 'level' => Logger::ERROR, 'level_name' => 'ERROR', 'channel' => 'meh', - 'context' => array('foo' => 7, 'bar', 'class' => new \stdClass), - 'datetime' => new \DateTime("@0"), - 'extra' => array(), + 'context' => ['foo' => 7, 'bar', 'class' => new \stdClass], + 'datetime' => new \DateTimeImmutable("@0"), + 'extra' => [], 'message' => 'log', - ); + ]; $expected = $msg; $expected['datetime'] = $msg['datetime']->format(\DateTime::ISO8601); - $expected['context'] = array( + $expected['context'] = [ 'class' => '[object] (stdClass: {})', 'foo' => 7, 0 => 'bar', - ); + ]; $client = new Client(); $handler = new ElasticSearchHandler($client, $this->options); try { - $handler->handleBatch(array($msg)); + $handler->handleBatch([$msg]); } catch (\RuntimeException $e) { $this->markTestSkipped("Cannot connect to Elastic Search server on localhost"); } @@ -234,6 +235,6 @@ class ElasticSearchHandlerTest extends TestCase return $data['_source']; } - return array(); + return []; } } diff --git a/tests/Monolog/Handler/ErrorLogHandlerTest.php b/tests/Monolog/Handler/ErrorLogHandlerTest.php index 99785cb..d230fb1 100644 --- a/tests/Monolog/Handler/ErrorLogHandlerTest.php +++ b/tests/Monolog/Handler/ErrorLogHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; use Monolog\Formatter\LineFormatter; @@ -24,7 +24,7 @@ class ErrorLogHandlerTest extends TestCase { protected function setUp() { - $GLOBALS['error_log'] = array(); + $GLOBALS['error_log'] = []; } /** diff --git a/tests/Monolog/Handler/FilterHandlerTest.php b/tests/Monolog/Handler/FilterHandlerTest.php index 31b7686..0e64e76 100644 --- a/tests/Monolog/Handler/FilterHandlerTest.php +++ b/tests/Monolog/Handler/FilterHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -12,7 +12,7 @@ namespace Monolog\Handler; use Monolog\Logger; -use Monolog\TestCase; +use Monolog\Test\TestCase; class FilterHandlerTest extends TestCase { @@ -63,7 +63,7 @@ class FilterHandlerTest extends TestCase $this->assertFalse($test->hasEmergencyRecords()); $test = new TestHandler(); - $handler = new FilterHandler($test, array(Logger::INFO, Logger::ERROR)); + $handler = new FilterHandler($test, [Logger::INFO, Logger::ERROR]); $handler->handle($this->getRecord(Logger::DEBUG)); $this->assertFalse($test->hasDebugRecords()); @@ -86,14 +86,14 @@ class FilterHandlerTest extends TestCase $test = new TestHandler(); $handler = new FilterHandler($test); - $levels = array(Logger::INFO, Logger::ERROR); + $levels = [Logger::INFO, Logger::ERROR]; $handler->setAcceptedLevels($levels); $this->assertSame($levels, $handler->getAcceptedLevels()); - $handler->setAcceptedLevels(array('info', 'error')); + $handler->setAcceptedLevels(['info', 'error']); $this->assertSame($levels, $handler->getAcceptedLevels()); - $levels = array(Logger::CRITICAL, Logger::ALERT, Logger::EMERGENCY); + $levels = [Logger::CRITICAL, Logger::ALERT, Logger::EMERGENCY]; $handler->setAcceptedLevels(Logger::CRITICAL, Logger::EMERGENCY); $this->assertSame($levels, $handler->getAcceptedLevels()); diff --git a/tests/Monolog/Handler/FingersCrossedHandlerTest.php b/tests/Monolog/Handler/FingersCrossedHandlerTest.php index b92bf43..5b25a36 100644 --- a/tests/Monolog/Handler/FingersCrossedHandlerTest.php +++ b/tests/Monolog/Handler/FingersCrossedHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy; use Monolog\Handler\FingersCrossed\ChannelLevelActivationStrategy; @@ -114,8 +114,8 @@ class FingersCrossedHandlerTest extends TestCase { $test = new TestHandler(); $handler = new FingersCrossedHandler(function ($record, $handler) use ($test) { - return $test; - }); + return $test; + }); $handler->handle($this->getRecord(Logger::DEBUG)); $handler->handle($this->getRecord(Logger::INFO)); $this->assertFalse($test->hasDebugRecords()); @@ -133,8 +133,8 @@ class FingersCrossedHandlerTest extends TestCase public function testHandleWithBadCallbackThrowsException() { $handler = new FingersCrossedHandler(function ($record, $handler) { - return 'foo'; - }); + return 'foo'; + }); $handler->handle($this->getRecord(Logger::WARNING)); } @@ -203,7 +203,7 @@ class FingersCrossedHandlerTest extends TestCase public function testChannelLevelActivationStrategy() { $test = new TestHandler(); - $handler = new FingersCrossedHandler($test, new ChannelLevelActivationStrategy(Logger::ERROR, array('othertest' => Logger::DEBUG))); + $handler = new FingersCrossedHandler($test, new ChannelLevelActivationStrategy(Logger::ERROR, ['othertest' => Logger::DEBUG])); $handler->handle($this->getRecord(Logger::WARNING)); $this->assertFalse($test->hasWarningRecords()); $record = $this->getRecord(Logger::DEBUG); @@ -220,7 +220,7 @@ class FingersCrossedHandlerTest extends TestCase public function testChannelLevelActivationStrategyWithPsrLevels() { $test = new TestHandler(); - $handler = new FingersCrossedHandler($test, new ChannelLevelActivationStrategy('error', array('othertest' => 'debug'))); + $handler = new FingersCrossedHandler($test, new ChannelLevelActivationStrategy('error', ['othertest' => 'debug'])); $handler->handle($this->getRecord(Logger::WARNING)); $this->assertFalse($test->hasWarningRecords()); $record = $this->getRecord(Logger::DEBUG); diff --git a/tests/Monolog/Handler/FirePHPHandlerTest.php b/tests/Monolog/Handler/FirePHPHandlerTest.php index 0eb10a6..b62e7fd 100644 --- a/tests/Monolog/Handler/FirePHPHandlerTest.php +++ b/tests/Monolog/Handler/FirePHPHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; /** @@ -32,13 +32,13 @@ class FirePHPHandlerTest extends TestCase $handler->handle($this->getRecord(Logger::DEBUG)); $handler->handle($this->getRecord(Logger::WARNING)); - $expected = array( + $expected = [ 'X-Wf-Protocol-1' => 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2', 'X-Wf-1-Structure-1' => 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1', 'X-Wf-1-Plugin-1' => 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3', 'X-Wf-1-1-1-1' => 'test', 'X-Wf-1-1-1-2' => 'test', - ); + ]; $this->assertEquals($expected, $handler->getHeaders()); } @@ -55,18 +55,18 @@ class FirePHPHandlerTest extends TestCase $handler2->handle($this->getRecord(Logger::DEBUG)); $handler2->handle($this->getRecord(Logger::WARNING)); - $expected = array( + $expected = [ 'X-Wf-Protocol-1' => 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2', 'X-Wf-1-Structure-1' => 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1', 'X-Wf-1-Plugin-1' => 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3', 'X-Wf-1-1-1-1' => 'test', 'X-Wf-1-1-1-2' => 'test', - ); + ]; - $expected2 = array( + $expected2 = [ 'X-Wf-1-1-1-3' => 'test', 'X-Wf-1-1-1-4' => 'test', - ); + ]; $this->assertEquals($expected, $handler->getHeaders()); $this->assertEquals($expected2, $handler2->getHeaders()); @@ -75,7 +75,7 @@ class FirePHPHandlerTest extends TestCase class TestFirePHPHandler extends FirePHPHandler { - protected $headers = array(); + protected $headers = []; public static function reset() { diff --git a/tests/Monolog/Handler/FleepHookHandlerTest.php b/tests/Monolog/Handler/FleepHookHandlerTest.php index 91cdd31..11b5a65 100644 --- a/tests/Monolog/Handler/FleepHookHandlerTest.php +++ b/tests/Monolog/Handler/FleepHookHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -13,7 +13,7 @@ namespace Monolog\Handler; use Monolog\Formatter\LineFormatter; use Monolog\Logger; -use Monolog\TestCase; +use Monolog\Test\TestCase; /** * @coversDefaultClass \Monolog\Handler\FleepHookHandler @@ -56,15 +56,15 @@ class FleepHookHandlerTest extends TestCase */ public function testHandlerUsesLineFormatterWhichIgnoresEmptyArrays() { - $record = array( + $record = [ 'message' => 'msg', - 'context' => array(), + 'context' => [], 'level' => Logger::DEBUG, 'level_name' => Logger::getLevelName(Logger::DEBUG), 'channel' => 'channel', - 'datetime' => new \DateTime(), - 'extra' => array(), - ); + 'datetime' => new \DateTimeImmutable(), + 'extra' => [], + ]; $expectedFormatter = new LineFormatter(null, null, true, true); $expected = $expectedFormatter->format($record); diff --git a/tests/Monolog/Handler/FlowdockHandlerTest.php b/tests/Monolog/Handler/FlowdockHandlerTest.php index 4b120d5..23f8b06 100644 --- a/tests/Monolog/Handler/FlowdockHandlerTest.php +++ b/tests/Monolog/Handler/FlowdockHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -12,7 +12,7 @@ namespace Monolog\Handler; use Monolog\Formatter\FlowdockFormatter; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; /** @@ -61,15 +61,14 @@ class FlowdockHandlerTest extends TestCase private function createHandler($token = 'myToken') { - $constructorArgs = array($token, Logger::DEBUG); + $constructorArgs = [$token, Logger::DEBUG]; $this->res = fopen('php://memory', 'a'); - $this->handler = $this->getMock( - '\Monolog\Handler\FlowdockHandler', - array('fsockopen', 'streamSetTimeout', 'closeSocket'), - $constructorArgs - ); + $this->handler = $this->getMockBuilder('Monolog\Handler\FlowdockHandler') + ->setConstructorArgs($constructorArgs) + ->setMethods(['fsockopen', 'streamSetTimeout', 'closeSocket']) + ->getMock(); - $reflectionProperty = new \ReflectionProperty('\Monolog\Handler\SocketHandler', 'connectionString'); + $reflectionProperty = new \ReflectionProperty('Monolog\Handler\SocketHandler', 'connectionString'); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($this->handler, 'localhost:1234'); diff --git a/tests/Monolog/Handler/GelfHandlerLegacyTest.php b/tests/Monolog/Handler/GelfHandlerLegacyTest.php deleted file mode 100644 index 9d007b1..0000000 --- a/tests/Monolog/Handler/GelfHandlerLegacyTest.php +++ /dev/null @@ -1,95 +0,0 @@ -<?php - -/* - * This file is part of the Monolog package. - * - * (c) Jordi Boggiano <j.boggiano@seld.be> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Gelf\Message; -use Monolog\TestCase; -use Monolog\Logger; -use Monolog\Formatter\GelfMessageFormatter; - -class GelfHandlerLegacyTest extends TestCase -{ - public function setUp() - { - if (!class_exists('Gelf\MessagePublisher') || !class_exists('Gelf\Message')) { - $this->markTestSkipped("mlehner/gelf-php not installed"); - } - - require_once __DIR__ . '/GelfMockMessagePublisher.php'; - } - - /** - * @covers Monolog\Handler\GelfHandler::__construct - */ - public function testConstruct() - { - $handler = new GelfHandler($this->getMessagePublisher()); - $this->assertInstanceOf('Monolog\Handler\GelfHandler', $handler); - } - - protected function getHandler($messagePublisher) - { - $handler = new GelfHandler($messagePublisher); - - return $handler; - } - - protected function getMessagePublisher() - { - return new GelfMockMessagePublisher('localhost'); - } - - public function testDebug() - { - $messagePublisher = $this->getMessagePublisher(); - $handler = $this->getHandler($messagePublisher); - - $record = $this->getRecord(Logger::DEBUG, "A test debug message"); - $handler->handle($record); - - $this->assertEquals(7, $messagePublisher->lastMessage->getLevel()); - $this->assertEquals('test', $messagePublisher->lastMessage->getFacility()); - $this->assertEquals($record['message'], $messagePublisher->lastMessage->getShortMessage()); - $this->assertEquals(null, $messagePublisher->lastMessage->getFullMessage()); - } - - public function testWarning() - { - $messagePublisher = $this->getMessagePublisher(); - $handler = $this->getHandler($messagePublisher); - - $record = $this->getRecord(Logger::WARNING, "A test warning message"); - $handler->handle($record); - - $this->assertEquals(4, $messagePublisher->lastMessage->getLevel()); - $this->assertEquals('test', $messagePublisher->lastMessage->getFacility()); - $this->assertEquals($record['message'], $messagePublisher->lastMessage->getShortMessage()); - $this->assertEquals(null, $messagePublisher->lastMessage->getFullMessage()); - } - - public function testInjectedGelfMessageFormatter() - { - $messagePublisher = $this->getMessagePublisher(); - $handler = $this->getHandler($messagePublisher); - - $handler->setFormatter(new GelfMessageFormatter('mysystem', 'EXT', 'CTX')); - - $record = $this->getRecord(Logger::WARNING, "A test warning message"); - $record['extra']['blarg'] = 'yep'; - $record['context']['from'] = 'logger'; - $handler->handle($record); - - $this->assertEquals('mysystem', $messagePublisher->lastMessage->getHost()); - $this->assertArrayHasKey('_EXTblarg', $messagePublisher->lastMessage->toArray()); - $this->assertArrayHasKey('_CTXfrom', $messagePublisher->lastMessage->toArray()); - } -} diff --git a/tests/Monolog/Handler/GelfHandlerTest.php b/tests/Monolog/Handler/GelfHandlerTest.php index 8cdd64f..12e5f8b 100644 --- a/tests/Monolog/Handler/GelfHandlerTest.php +++ b/tests/Monolog/Handler/GelfHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -12,7 +12,7 @@ namespace Monolog\Handler; use Gelf\Message; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; use Monolog\Formatter\GelfMessageFormatter; @@ -43,7 +43,10 @@ class GelfHandlerTest extends TestCase protected function getMessagePublisher() { - return $this->getMock('Gelf\Publisher', array('publish'), array(), '', false); + return $this->getMockBuilder('Gelf\Publisher') + ->setMethods(['publish']) + ->disableOriginalConstructor() + ->getMock(); } public function testDebug() diff --git a/tests/Monolog/Handler/GelfMockMessagePublisher.php b/tests/Monolog/Handler/GelfMockMessagePublisher.php deleted file mode 100644 index 873d92f..0000000 --- a/tests/Monolog/Handler/GelfMockMessagePublisher.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php - -/* - * This file is part of the Monolog package. - * - * (c) Jordi Boggiano <j.boggiano@seld.be> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Gelf\MessagePublisher; -use Gelf\Message; - -class GelfMockMessagePublisher extends MessagePublisher -{ - public function publish(Message $message) - { - $this->lastMessage = $message; - } - - public $lastMessage = null; -} diff --git a/tests/Monolog/Handler/GroupHandlerTest.php b/tests/Monolog/Handler/GroupHandlerTest.php index a1b8617..d0ffdf0 100644 --- a/tests/Monolog/Handler/GroupHandlerTest.php +++ b/tests/Monolog/Handler/GroupHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; class GroupHandlerTest extends TestCase @@ -22,7 +22,7 @@ class GroupHandlerTest extends TestCase */ public function testConstructorOnlyTakesHandler() { - new GroupHandler(array(new TestHandler(), "foo")); + new GroupHandler([new TestHandler(), "foo"]); } /** @@ -31,7 +31,7 @@ class GroupHandlerTest extends TestCase */ public function testHandle() { - $testHandlers = array(new TestHandler(), new TestHandler()); + $testHandlers = [new TestHandler(), new TestHandler()]; $handler = new GroupHandler($testHandlers); $handler->handle($this->getRecord(Logger::DEBUG)); $handler->handle($this->getRecord(Logger::INFO)); @@ -47,9 +47,9 @@ class GroupHandlerTest extends TestCase */ public function testHandleBatch() { - $testHandlers = array(new TestHandler(), new TestHandler()); + $testHandlers = [new TestHandler(), new TestHandler()]; $handler = new GroupHandler($testHandlers); - $handler->handleBatch(array($this->getRecord(Logger::DEBUG), $this->getRecord(Logger::INFO))); + $handler->handleBatch([$this->getRecord(Logger::DEBUG), $this->getRecord(Logger::INFO)]); foreach ($testHandlers as $test) { $this->assertTrue($test->hasDebugRecords()); $this->assertTrue($test->hasInfoRecords()); @@ -62,7 +62,7 @@ class GroupHandlerTest extends TestCase */ public function testIsHandling() { - $testHandlers = array(new TestHandler(Logger::ERROR), new TestHandler(Logger::WARNING)); + $testHandlers = [new TestHandler(Logger::ERROR), new TestHandler(Logger::WARNING)]; $handler = new GroupHandler($testHandlers); $this->assertTrue($handler->isHandling($this->getRecord(Logger::ERROR))); $this->assertTrue($handler->isHandling($this->getRecord(Logger::WARNING))); @@ -75,7 +75,7 @@ class GroupHandlerTest extends TestCase public function testHandleUsesProcessors() { $test = new TestHandler(); - $handler = new GroupHandler(array($test)); + $handler = new GroupHandler([$test]); $handler->pushProcessor(function ($record) { $record['extra']['foo'] = true; @@ -92,14 +92,14 @@ class GroupHandlerTest extends TestCase */ public function testHandleBatchUsesProcessors() { - $testHandlers = array(new TestHandler(), new TestHandler()); + $testHandlers = [new TestHandler(), new TestHandler()]; $handler = new GroupHandler($testHandlers); $handler->pushProcessor(function ($record) { $record['extra']['foo'] = true; return $record; }); - $handler->handleBatch(array($this->getRecord(Logger::DEBUG), $this->getRecord(Logger::INFO))); + $handler->handleBatch([$this->getRecord(Logger::DEBUG), $this->getRecord(Logger::INFO)]); foreach ($testHandlers as $test) { $this->assertTrue($test->hasDebugRecords()); $this->assertTrue($test->hasInfoRecords()); diff --git a/tests/Monolog/Handler/HandlerWrapperTest.php b/tests/Monolog/Handler/HandlerWrapperTest.php index d8d0452..bedc175 100644 --- a/tests/Monolog/Handler/HandlerWrapperTest.php +++ b/tests/Monolog/Handler/HandlerWrapperTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; /** * @author Alexey Karapetov <alexey@karapetov.com> @@ -28,7 +28,7 @@ class HandlerWrapperTest extends TestCase public function setUp() { parent::setUp(); - $this->handler = $this->getMock('Monolog\\Handler\\HandlerInterface'); + $this->handler = $this->createMock('Monolog\\Handler\\HandlerInterface'); $this->wrapper = new HandlerWrapper($this->handler); } @@ -37,10 +37,10 @@ class HandlerWrapperTest extends TestCase */ public function trueFalseDataProvider() { - return array( - array(true), - array(false), - ); + return [ + [true], + [false], + ]; } /** @@ -87,44 +87,4 @@ class HandlerWrapperTest extends TestCase $this->assertEquals($result, $this->wrapper->handleBatch($records)); } - - public function testPushProcessor() - { - $processor = function () {}; - $this->handler->expects($this->once()) - ->method('pushProcessor') - ->with($processor); - - $this->assertEquals($this->wrapper, $this->wrapper->pushProcessor($processor)); - } - - public function testPopProcessor() - { - $processor = function () {}; - $this->handler->expects($this->once()) - ->method('popProcessor') - ->willReturn($processor); - - $this->assertEquals($processor, $this->wrapper->popProcessor()); - } - - public function testSetFormatter() - { - $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); - $this->handler->expects($this->once()) - ->method('setFormatter') - ->with($formatter); - - $this->assertEquals($this->wrapper, $this->wrapper->setFormatter($formatter)); - } - - public function testGetFormatter() - { - $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); - $this->handler->expects($this->once()) - ->method('getFormatter') - ->willReturn($formatter); - - $this->assertEquals($formatter, $this->wrapper->getFormatter()); - } } diff --git a/tests/Monolog/Handler/HipChatHandlerTest.php b/tests/Monolog/Handler/HipChatHandlerTest.php index 52dc9da..4df4de4 100644 --- a/tests/Monolog/Handler/HipChatHandlerTest.php +++ b/tests/Monolog/Handler/HipChatHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; /** @@ -24,30 +24,6 @@ class HipChatHandlerTest extends TestCase /** @var HipChatHandler */ private $handler; - public function testWriteHeader() - { - $this->createHandler(); - $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); - fseek($this->res, 0); - $content = fread($this->res, 1024); - - $this->assertRegexp('/POST \/v1\/rooms\/message\?format=json&auth_token=.* HTTP\/1.1\\r\\nHost: api.hipchat.com\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); - - return $content; - } - - public function testWriteCustomHostHeader() - { - $this->createHandler('myToken', 'room1', 'Monolog', true, 'hipchat.foo.bar'); - $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); - fseek($this->res, 0); - $content = fread($this->res, 1024); - - $this->assertRegexp('/POST \/v1\/rooms\/message\?format=json&auth_token=.* HTTP\/1.1\\r\\nHost: hipchat.foo.bar\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); - - return $content; - } - public function testWriteV2() { $this->createHandler('myToken', 'room1', 'Monolog', false, 'hipchat.foo.bar', 'v2'); @@ -55,7 +31,7 @@ class HipChatHandlerTest extends TestCase fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/POST \/v2\/room\/room1\/notification\?auth_token=.* HTTP\/1.1\\r\\nHost: hipchat.foo.bar\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + $this->assertRegexp('{POST /v2/room/room1/notification\?auth_token=.* HTTP/1.1\\r\\nHost: hipchat.foo.bar\\r\\nContent-Type: application/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n}', $content); return $content; } @@ -67,7 +43,7 @@ class HipChatHandlerTest extends TestCase fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/POST \/v2\/room\/room1\/notification\?auth_token=.* HTTP\/1.1\\r\\nHost: hipchat.foo.bar\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + $this->assertRegexp('{POST /v2/room/room1/notification\?auth_token=.* HTTP/1.1\\r\\nHost: hipchat.foo.bar\\r\\nContent-Type: application/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n}', $content); return $content; } @@ -79,7 +55,7 @@ class HipChatHandlerTest extends TestCase fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/POST \/v2\/room\/room%20name\/notification\?auth_token=.* HTTP\/1.1\\r\\nHost: hipchat.foo.bar\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + $this->assertRegexp('{POST /v2/room/room%20name/notification\?auth_token=.* HTTP/1.1\\r\\nHost: hipchat.foo.bar\\r\\nContent-Type: application/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n}', $content); return $content; } @@ -92,18 +68,6 @@ class HipChatHandlerTest extends TestCase $this->assertRegexp('/notify=0&message=test1&message_format=text&color=red&room_id=room1&from=Monolog$/', $content); } - public function testWriteContentV1WithoutName() - { - $this->createHandler('myToken', 'room1', null, false, 'hipchat.foo.bar', 'v1'); - $this->handler->handle($this->getRecord(Logger::CRITICAL, 'test1')); - fseek($this->res, 0); - $content = fread($this->res, 1024); - - $this->assertRegexp('/notify=0&message=test1&message_format=text&color=red&room_id=room1&from=$/', $content); - - return $content; - } - /** * @depends testWriteCustomHostHeader */ @@ -175,16 +139,16 @@ class HipChatHandlerTest extends TestCase public function provideLevelColors() { - return array( - array(Logger::DEBUG, 'gray'), - array(Logger::INFO, 'green'), - array(Logger::WARNING, 'yellow'), - array(Logger::ERROR, 'red'), - array(Logger::CRITICAL, 'red'), - array(Logger::ALERT, 'red'), - array(Logger::EMERGENCY,'red'), - array(Logger::NOTICE, 'green'), - ); + return [ + [Logger::DEBUG, 'gray'], + [Logger::INFO, 'green'], + [Logger::WARNING, 'yellow'], + [Logger::ERROR, 'red'], + [Logger::CRITICAL, 'red'], + [Logger::ALERT, 'red'], + [Logger::EMERGENCY,'red'], + [Logger::NOTICE, 'green'], + ]; } /** @@ -204,49 +168,48 @@ class HipChatHandlerTest extends TestCase public function provideBatchRecords() { - return array( - array( - array( - array('level' => Logger::WARNING, 'message' => 'Oh bugger!', 'level_name' => 'warning', 'datetime' => new \DateTime()), - array('level' => Logger::NOTICE, 'message' => 'Something noticeable happened.', 'level_name' => 'notice', 'datetime' => new \DateTime()), - array('level' => Logger::CRITICAL, 'message' => 'Everything is broken!', 'level_name' => 'critical', 'datetime' => new \DateTime()), - ), + return [ + [ + [ + ['level' => Logger::WARNING, 'message' => 'Oh bugger!', 'level_name' => 'warning', 'datetime' => new \DateTimeImmutable()], + ['level' => Logger::NOTICE, 'message' => 'Something noticeable happened.', 'level_name' => 'notice', 'datetime' => new \DateTimeImmutable()], + ['level' => Logger::CRITICAL, 'message' => 'Everything is broken!', 'level_name' => 'critical', 'datetime' => new \DateTimeImmutable()], + ], 'red', - ), - array( - array( - array('level' => Logger::WARNING, 'message' => 'Oh bugger!', 'level_name' => 'warning', 'datetime' => new \DateTime()), - array('level' => Logger::NOTICE, 'message' => 'Something noticeable happened.', 'level_name' => 'notice', 'datetime' => new \DateTime()), - ), + ], + [ + [ + ['level' => Logger::WARNING, 'message' => 'Oh bugger!', 'level_name' => 'warning', 'datetime' => new \DateTimeImmutable()], + ['level' => Logger::NOTICE, 'message' => 'Something noticeable happened.', 'level_name' => 'notice', 'datetime' => new \DateTimeImmutable()], + ], 'yellow', - ), - array( - array( - array('level' => Logger::DEBUG, 'message' => 'Just debugging.', 'level_name' => 'debug', 'datetime' => new \DateTime()), - array('level' => Logger::NOTICE, 'message' => 'Something noticeable happened.', 'level_name' => 'notice', 'datetime' => new \DateTime()), - ), + ], + [ + [ + ['level' => Logger::DEBUG, 'message' => 'Just debugging.', 'level_name' => 'debug', 'datetime' => new \DateTimeImmutable()], + ['level' => Logger::NOTICE, 'message' => 'Something noticeable happened.', 'level_name' => 'notice', 'datetime' => new \DateTimeImmutable()], + ], 'green', - ), - array( - array( - array('level' => Logger::DEBUG, 'message' => 'Just debugging.', 'level_name' => 'debug', 'datetime' => new \DateTime()), - ), + ], + [ + [ + ['level' => Logger::DEBUG, 'message' => 'Just debugging.', 'level_name' => 'debug', 'datetime' => new \DateTimeImmutable()], + ], 'gray', - ), - ); + ], + ]; } private function createHandler($token = 'myToken', $room = 'room1', $name = 'Monolog', $notify = false, $host = 'api.hipchat.com', $version = 'v1') { - $constructorArgs = array($token, $room, $name, $notify, Logger::DEBUG, true, true, 'text', $host, $version); + $constructorArgs = [$token, $room, $name, $notify, Logger::DEBUG, true, true, 'text', $host, $version]; $this->res = fopen('php://memory', 'a'); - $this->handler = $this->getMock( - '\Monolog\Handler\HipChatHandler', - array('fsockopen', 'streamSetTimeout', 'closeSocket'), - $constructorArgs - ); + $this->handler = $this->getMockBuilder('Monolog\Handler\HipChatHandler') + ->setConstructorArgs($constructorArgs) + ->setMethods(['fsockopen', 'streamSetTimeout', 'closeSocket']) + ->getMock(); - $reflectionProperty = new \ReflectionProperty('\Monolog\Handler\SocketHandler', 'connectionString'); + $reflectionProperty = new \ReflectionProperty('Monolog\Handler\SocketHandler', 'connectionString'); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($this->handler, 'localhost:1234'); @@ -263,14 +226,6 @@ class HipChatHandlerTest extends TestCase $this->handler->setFormatter($this->getIdentityFormatter()); } - /** - * @expectedException InvalidArgumentException - */ - public function testCreateWithTooLongName() - { - $hipChatHandler = new HipChatHandler('token', 'room', 'SixteenCharsHere'); - } - public function testCreateWithTooLongNameV2() { // creating a handler with too long of a name but using the v2 api doesn't matter. diff --git a/tests/Monolog/Handler/LogEntriesHandlerTest.php b/tests/Monolog/Handler/LogEntriesHandlerTest.php index b2deb40..92a206d 100644 --- a/tests/Monolog/Handler/LogEntriesHandlerTest.php +++ b/tests/Monolog/Handler/LogEntriesHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; /** @@ -37,37 +37,36 @@ class LogEntriesHandlerTest extends TestCase fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/testToken \[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\] test.CRITICAL: Critical write test/', $content); + $this->assertRegexp('/testToken \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}\+00:00\] test.CRITICAL: Critical write test/', $content); } public function testWriteBatchContent() { - $records = array( + $records = [ $this->getRecord(), $this->getRecord(), $this->getRecord(), - ); + ]; $this->createHandler(); $this->handler->handleBatch($records); fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/(testToken \[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\] .* \[\] \[\]\n){3}/', $content); + $this->assertRegexp('/(testToken \[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}\+00:00\] .* \[\] \[\]\n){3}/', $content); } private function createHandler() { $useSSL = extension_loaded('openssl'); - $args = array('testToken', $useSSL, Logger::DEBUG, true); + $args = ['testToken', $useSSL, Logger::DEBUG, true]; $this->res = fopen('php://memory', 'a'); - $this->handler = $this->getMock( - '\Monolog\Handler\LogEntriesHandler', - array('fsockopen', 'streamSetTimeout', 'closeSocket'), - $args - ); + $this->handler = $this->getMockBuilder('Monolog\Handler\LogEntriesHandler') + ->setConstructorArgs($args) + ->setMethods(['fsockopen', 'streamSetTimeout', 'closeSocket']) + ->getMock(); - $reflectionProperty = new \ReflectionProperty('\Monolog\Handler\SocketHandler', 'connectionString'); + $reflectionProperty = new \ReflectionProperty('Monolog\Handler\SocketHandler', 'connectionString'); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($this->handler, 'localhost:1234'); diff --git a/tests/Monolog/Handler/LogmaticHandlerTest.php b/tests/Monolog/Handler/LogmaticHandlerTest.php new file mode 100644 index 0000000..bab74ac --- /dev/null +++ b/tests/Monolog/Handler/LogmaticHandlerTest.php @@ -0,0 +1,83 @@ +<?php declare(strict_types=1); + +/* + * This file is part of the Monolog package. + * + * (c) Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Test\TestCase; +use Monolog\Logger; + +/** + * @author Julien Breux <julien.breux@gmail.com> + */ +class LogmaticHandlerTest extends TestCase +{ + /** + * @var resource + */ + private $res; + + /** + * @var LogmaticHandler + */ + private $handler; + + public function testWriteContent() + { + $this->createHandler(); + $this->handler->handle($this->getRecord(Logger::CRITICAL, 'Critical write test')); + + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/testToken {"message":"Critical write test","context":\[\],"level":500,"level_name":"CRITICAL","channel":"test","datetime":"(.*)","extra":\[\],"hostname":"testHostname","appname":"testAppname","@marker":\["sourcecode","php"\]}/', $content); + } + + public function testWriteBatchContent() + { + $records = [ + $this->getRecord(), + $this->getRecord(), + $this->getRecord(), + ]; + $this->createHandler(); + $this->handler->handleBatch($records); + + fseek($this->res, 0); + $content = fread($this->res, 1024); + + $this->assertRegexp('/testToken {"message":"test","context":\[\],"level":300,"level_name":"WARNING","channel":"test","datetime":"(.*)","extra":\[\],"hostname":"testHostname","appname":"testAppname","@marker":\["sourcecode","php"\]}/', $content); + } + + private function createHandler() + { + $useSSL = extension_loaded('openssl'); + $args = ['testToken', 'testHostname', 'testAppname', $useSSL, Logger::DEBUG, true]; + $this->res = fopen('php://memory', 'a'); + $this->handler = $this->getMockBuilder('Monolog\Handler\LogmaticHandler') + ->setConstructorArgs($args) + ->setMethods(['fsockopen', 'streamSetTimeout', 'closeSocket']) + ->getMock(); + + $reflectionProperty = new \ReflectionProperty('Monolog\Handler\SocketHandler', 'connectionString'); + $reflectionProperty->setAccessible(true); + $reflectionProperty->setValue($this->handler, 'localhost:1234'); + + $this->handler->expects($this->any()) + ->method('fsockopen') + ->will($this->returnValue($this->res)); + $this->handler->expects($this->any()) + ->method('streamSetTimeout') + ->will($this->returnValue(true)); + $this->handler->expects($this->any()) + ->method('closeSocket') + ->will($this->returnValue(true)); + } +} diff --git a/tests/Monolog/Handler/MailHandlerTest.php b/tests/Monolog/Handler/MailHandlerTest.php index 6754f3d..5a52819 100644 --- a/tests/Monolog/Handler/MailHandlerTest.php +++ b/tests/Monolog/Handler/MailHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -12,7 +12,7 @@ namespace Monolog\Handler; use Monolog\Logger; -use Monolog\TestCase; +use Monolog\Test\TestCase; class MailHandlerTest extends TestCase { @@ -21,11 +21,11 @@ class MailHandlerTest extends TestCase */ public function testHandleBatch() { - $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $formatter = $this->createMock('Monolog\\Formatter\\FormatterInterface'); $formatter->expects($this->once()) ->method('formatBatch'); // Each record is formatted - $handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler'); + $handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler', [], '', true, true, true, ['send', 'write']); $handler->expects($this->once()) ->method('send'); $handler->expects($this->never()) @@ -41,11 +41,11 @@ class MailHandlerTest extends TestCase */ public function testHandleBatchNotSendsMailIfMessagesAreBelowLevel() { - $records = array( + $records = [ $this->getRecord(Logger::DEBUG, 'debug message 1'), $this->getRecord(Logger::DEBUG, 'debug message 2'), $this->getRecord(Logger::INFO, 'information'), - ); + ]; $handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler'); $handler->expects($this->never()) @@ -61,10 +61,11 @@ class MailHandlerTest extends TestCase public function testHandle() { $handler = $this->getMockForAbstractClass('Monolog\\Handler\\MailHandler'); + $handler->setFormatter(new \Monolog\Formatter\LineFormatter); $record = $this->getRecord(); - $records = array($record); - $records[0]['formatted'] = '['.$record['datetime']->format('Y-m-d H:i:s').'] test.WARNING: test [] []'."\n"; + $records = [$record]; + $records[0]['formatted'] = '['.$record['datetime'].'] test.WARNING: test [] []'."\n"; $handler->expects($this->once()) ->method('send') diff --git a/tests/Monolog/Handler/MockRavenClient-gte-0-16-0.php b/tests/Monolog/Handler/MockRavenClient-gte-0-16-0.php new file mode 100644 index 0000000..07434e4 --- /dev/null +++ b/tests/Monolog/Handler/MockRavenClient-gte-0-16-0.php @@ -0,0 +1,27 @@ +<?php declare(strict_types=1); + +/* + * This file is part of the Monolog package. + * + * (c) Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Raven_Client; + +class MockRavenClient extends Raven_Client +{ + public function capture($data, $stack = null, $vars = null) + { + $data = array_merge($this->get_user_data(), $data); + $this->lastData = $data; + $this->lastStack = $stack; + } + + public $lastData; + public $lastStack; +} diff --git a/tests/Monolog/Handler/MockRavenClient.php b/tests/Monolog/Handler/MockRavenClient.php index a083322..d344d34 100644 --- a/tests/Monolog/Handler/MockRavenClient.php +++ b/tests/Monolog/Handler/MockRavenClient.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. diff --git a/tests/Monolog/Handler/MongoDBHandlerTest.php b/tests/Monolog/Handler/MongoDBHandlerTest.php index 0fdef63..7333ef6 100644 --- a/tests/Monolog/Handler/MongoDBHandlerTest.php +++ b/tests/Monolog/Handler/MongoDBHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,8 +11,9 @@ namespace Monolog\Handler; -use Monolog\TestCase; -use Monolog\Logger; +use MongoDB\Driver\Manager; +use Monolog\Test\TestCase; +use Monolog\Formatter\NormalizerFormatter; class MongoDBHandlerTest extends TestCase { @@ -21,45 +22,57 @@ class MongoDBHandlerTest extends TestCase */ public function testConstructorShouldThrowExceptionForInvalidMongo() { - new MongoDBHandler(new \stdClass(), 'DB', 'Collection'); + new MongoDBHandler(new \stdClass, 'db', 'collection'); } - public function testHandle() + public function testHandleWithLibraryClient() { - $mongo = $this->getMock('Mongo', array('selectCollection'), array(), '', false); - $collection = $this->getMock('stdClass', array('save')); + if (!(class_exists('MongoDB\Client'))) { + $this->markTestSkipped('mongodb/mongodb not installed'); + } + + $mongodb = $this->getMockBuilder('MongoDB\Client') + ->disableOriginalConstructor() + ->getMock(); - $mongo->expects($this->once()) + $collection = $this->getMockBuilder('MongoDB\Collection') + ->disableOriginalConstructor() + ->getMock(); + + $mongodb->expects($this->once()) ->method('selectCollection') - ->with('DB', 'Collection') + ->with('db', 'collection') ->will($this->returnValue($collection)); - $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); - - $expected = array( - 'message' => 'test', - 'context' => array('data' => '[object] (stdClass: {})', 'foo' => 34), - 'level' => Logger::WARNING, - 'level_name' => 'WARNING', - 'channel' => 'test', - 'datetime' => $record['datetime']->format('Y-m-d H:i:s'), - 'extra' => array(), - ); + $record = $this->getRecord(); + $expected = $record; + $expected['datetime'] = $record['datetime']->format(NormalizerFormatter::SIMPLE_DATE); $collection->expects($this->once()) - ->method('save') + ->method('insertOne') ->with($expected); - $handler = new MongoDBHandler($mongo, 'DB', 'Collection'); + $handler = new MongoDBHandler($mongodb, 'db', 'collection'); $handler->handle($record); } -} -if (!class_exists('Mongo')) { - class Mongo + public function testHandleWithDriverManager() { - public function selectCollection() - { + if (!(class_exists('MongoDB\Driver\Manager'))) { + $this->markTestSkipped('ext-mongodb not installed'); + } + + /* This can become a unit test once ManagerInterface can be mocked. + * See: https://jira.mongodb.org/browse/PHPC-378 + */ + $mongodb = new Manager('mongodb://localhost:27017'); + $handler = new MongoDBHandler($mongodb, 'test', 'monolog'); + $record = $this->getRecord(); + + try { + $handler->handle($record); + } catch (\RuntimeException $e) { + $this->markTestSkipped('Could not connect to MongoDB server on mongodb://localhost:27017'); } } } diff --git a/tests/Monolog/Handler/NativeMailerHandlerTest.php b/tests/Monolog/Handler/NativeMailerHandlerTest.php index ddf545d..d4aef95 100644 --- a/tests/Monolog/Handler/NativeMailerHandlerTest.php +++ b/tests/Monolog/Handler/NativeMailerHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; use InvalidArgumentException; @@ -24,7 +24,7 @@ class NativeMailerHandlerTest extends TestCase { protected function setUp() { - $GLOBALS['mail'] = array(); + $GLOBALS['mail'] = []; } /** @@ -50,7 +50,7 @@ class NativeMailerHandlerTest extends TestCase public function testSetterArrayHeaderInjection() { $mailer = new NativeMailerHandler('spammer@example.org', 'dear victim', 'receiver@example.org'); - $mailer->addHeader(array("Content-Type: text/html\r\nFrom: faked@attacker.org")); + $mailer->addHeader(["Content-Type: text/html\r\nFrom: faked@attacker.org"]); } /** @@ -78,7 +78,8 @@ class NativeMailerHandlerTest extends TestCase $from = 'receiver@example.org'; $mailer = new NativeMailerHandler($to, $subject, $from); - $mailer->handleBatch(array()); + $mailer->setFormatter(new \Monolog\Formatter\LineFormatter); + $mailer->handleBatch([]); // batch is empty, nothing sent $this->assertEmpty($GLOBALS['mail']); diff --git a/tests/Monolog/Handler/NewRelicHandlerTest.php b/tests/Monolog/Handler/NewRelicHandlerTest.php index 4d3a615..a71bbf8 100644 --- a/tests/Monolog/Handler/NewRelicHandlerTest.php +++ b/tests/Monolog/Handler/NewRelicHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -12,7 +12,7 @@ namespace Monolog\Handler; use Monolog\Formatter\LineFormatter; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; class NewRelicHandlerTest extends TestCase @@ -24,7 +24,7 @@ class NewRelicHandlerTest extends TestCase public function setUp() { self::$appname = null; - self::$customParameters = array(); + self::$customParameters = []; self::$transactionName = null; } @@ -46,8 +46,8 @@ class NewRelicHandlerTest extends TestCase public function testThehandlerCanAddContextParamsToTheNewRelicTrace() { $handler = new StubNewRelicHandler(); - $handler->handle($this->getRecord(Logger::ERROR, 'log message', array('a' => 'b'))); - $this->assertEquals(array('context_a' => 'b'), self::$customParameters); + $handler->handle($this->getRecord(Logger::ERROR, 'log message', ['a' => 'b'])); + $this->assertEquals(['context_a' => 'b'], self::$customParameters); } public function testThehandlerCanAddExplodedContextParamsToTheNewRelicTrace() @@ -56,10 +56,10 @@ class NewRelicHandlerTest extends TestCase $handler->handle($this->getRecord( Logger::ERROR, 'log message', - array('a' => array('key1' => 'value1', 'key2' => 'value2')) + ['a' => ['key1' => 'value1', 'key2' => 'value2']] )); $this->assertEquals( - array('context_a_key1' => 'value1', 'context_a_key2' => 'value2'), + ['context_a_key1' => 'value1', 'context_a_key2' => 'value2'], self::$customParameters ); } @@ -67,40 +67,40 @@ class NewRelicHandlerTest extends TestCase public function testThehandlerCanAddExtraParamsToTheNewRelicTrace() { $record = $this->getRecord(Logger::ERROR, 'log message'); - $record['extra'] = array('c' => 'd'); + $record['extra'] = ['c' => 'd']; $handler = new StubNewRelicHandler(); $handler->handle($record); - $this->assertEquals(array('extra_c' => 'd'), self::$customParameters); + $this->assertEquals(['extra_c' => 'd'], self::$customParameters); } public function testThehandlerCanAddExplodedExtraParamsToTheNewRelicTrace() { $record = $this->getRecord(Logger::ERROR, 'log message'); - $record['extra'] = array('c' => array('key1' => 'value1', 'key2' => 'value2')); + $record['extra'] = ['c' => ['key1' => 'value1', 'key2' => 'value2']]; $handler = new StubNewRelicHandler(Logger::ERROR, true, self::$appname, true); $handler->handle($record); $this->assertEquals( - array('extra_c_key1' => 'value1', 'extra_c_key2' => 'value2'), + ['extra_c_key1' => 'value1', 'extra_c_key2' => 'value2'], self::$customParameters ); } public function testThehandlerCanAddExtraContextAndParamsToTheNewRelicTrace() { - $record = $this->getRecord(Logger::ERROR, 'log message', array('a' => 'b')); - $record['extra'] = array('c' => 'd'); + $record = $this->getRecord(Logger::ERROR, 'log message', ['a' => 'b']); + $record['extra'] = ['c' => 'd']; $handler = new StubNewRelicHandler(); $handler->handle($record); - $expected = array( + $expected = [ 'context_a' => 'b', 'extra_c' => 'd', - ); + ]; $this->assertEquals($expected, self::$customParameters); } @@ -131,7 +131,7 @@ class NewRelicHandlerTest extends TestCase public function testTheAppNameCanBeOverriddenFromEachLog() { $handler = new StubNewRelicHandler(Logger::DEBUG, false, 'myAppName'); - $handler->handle($this->getRecord(Logger::ERROR, 'log message', array('appname' => 'logAppName'))); + $handler->handle($this->getRecord(Logger::ERROR, 'log message', ['appname' => 'logAppName'])); $this->assertEquals('logAppName', self::$appname); } @@ -155,7 +155,7 @@ class NewRelicHandlerTest extends TestCase public function testTheTransactionNameCanBeOverriddenFromEachLog() { $handler = new StubNewRelicHandler(Logger::DEBUG, false, null, false, 'myTransaction'); - $handler->handle($this->getRecord(Logger::ERROR, 'log message', array('transaction_name' => 'logTransactName'))); + $handler->handle($this->getRecord(Logger::ERROR, 'log message', ['transaction_name' => 'logTransactName'])); $this->assertEquals('logTransactName', self::$transactionName); } diff --git a/tests/Monolog/Handler/NoopHandlerTest.php b/tests/Monolog/Handler/NoopHandlerTest.php new file mode 100644 index 0000000..768f5e3 --- /dev/null +++ b/tests/Monolog/Handler/NoopHandlerTest.php @@ -0,0 +1,49 @@ +<?php declare(strict_types=1); + +/* + * This file is part of the Monolog package. + * + * (c) Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Test\TestCase; +use Monolog\Logger; + +/** + * @covers Monolog\Handler\NoopHandler::handle + */ +class NoopHandlerTest extends TestCase +{ + /** + * @dataProvider logLevelsProvider + */ + public function testIsHandling($level) + { + $handler = new NoopHandler(); + $this->assertTrue($handler->isHandling($this->getRecord($level))); + } + + /** + * @dataProvider logLevelsProvider + */ + public function testHandle($level) + { + $handler = new NoopHandler(); + $this->assertFalse($handler->handle($this->getRecord($level))); + } + + public function logLevelsProvider() + { + return array_map( + function ($level) { + return [$level]; + }, + array_values(Logger::getLevels()) + ); + } +} diff --git a/tests/Monolog/Handler/NullHandlerTest.php b/tests/Monolog/Handler/NullHandlerTest.php index 292df78..b7e482b 100644 --- a/tests/Monolog/Handler/NullHandlerTest.php +++ b/tests/Monolog/Handler/NullHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; /** diff --git a/tests/Monolog/Handler/PHPConsoleHandlerTest.php b/tests/Monolog/Handler/PHPConsoleHandlerTest.php index 152573e..0836b99 100644 --- a/tests/Monolog/Handler/PHPConsoleHandlerTest.php +++ b/tests/Monolog/Handler/PHPConsoleHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -14,11 +14,11 @@ namespace Monolog\Handler; use Exception; use Monolog\ErrorHandler; use Monolog\Logger; -use Monolog\TestCase; +use Monolog\Test\TestCase; use PhpConsole\Connector; use PhpConsole\Dispatcher\Debug as DebugDispatcher; use PhpConsole\Dispatcher\Errors as ErrorDispatcher; -use PhpConsole\Handler; +use PhpConsole\Handler as VendorPhpConsoleHandler; use PHPUnit_Framework_MockObject_MockObject; /** @@ -52,8 +52,8 @@ class PHPConsoleHandlerTest extends TestCase { return $this->getMockBuilder('PhpConsole\Dispatcher\Debug') ->disableOriginalConstructor() - ->setMethods(array('dispatchDebug')) - ->setConstructorArgs(array($connector, $connector->getDumper())) + ->setMethods(['dispatchDebug']) + ->setConstructorArgs([$connector, $connector->getDumper()]) ->getMock(); } @@ -61,8 +61,8 @@ class PHPConsoleHandlerTest extends TestCase { return $this->getMockBuilder('PhpConsole\Dispatcher\Errors') ->disableOriginalConstructor() - ->setMethods(array('dispatchError', 'dispatchException')) - ->setConstructorArgs(array($connector, $connector->getDumper())) + ->setMethods(['dispatchError', 'dispatchException']) + ->setConstructorArgs([$connector, $connector->getDumper()]) ->getMock(); } @@ -70,7 +70,7 @@ class PHPConsoleHandlerTest extends TestCase { $connector = $this->getMockBuilder('PhpConsole\Connector') ->disableOriginalConstructor() - ->setMethods(array( + ->setMethods([ 'sendMessage', 'onShutDown', 'isActiveClient', @@ -81,7 +81,7 @@ class PHPConsoleHandlerTest extends TestCase 'setAllowedIpMasks', 'setHeadersLimit', 'startEvalRequestsListener', - )) + ]) ->getMock(); $connector->expects($this->any()) @@ -93,17 +93,17 @@ class PHPConsoleHandlerTest extends TestCase protected function getHandlerDefaultOption($name) { - $handler = new PHPConsoleHandler(array(), $this->connector); + $handler = new PHPConsoleHandler([], $this->connector); $options = $handler->getOptions(); return $options[$name]; } - protected function initLogger($handlerOptions = array(), $level = Logger::DEBUG) + protected function initLogger($handlerOptions = [], $level = Logger::DEBUG) { - return new Logger('test', array( + return new Logger('test', [ new PHPConsoleHandler($handlerOptions, $this->connector, $level), - )); + ]); } public function testInitWithDefaultConnector() @@ -114,33 +114,33 @@ class PHPConsoleHandlerTest extends TestCase public function testInitWithCustomConnector() { - $handler = new PHPConsoleHandler(array(), $this->connector); + $handler = new PHPConsoleHandler([], $this->connector); $this->assertEquals(spl_object_hash($this->connector), spl_object_hash($handler->getConnector())); } public function testDebug() { $this->debugDispatcher->expects($this->once())->method('dispatchDebug')->with($this->equalTo('test')); - $this->initLogger()->addDebug('test'); + $this->initLogger()->debug('test'); } public function testDebugContextInMessage() { $message = 'test'; $tag = 'tag'; - $context = array($tag, 'custom' => mt_rand()); + $context = [$tag, 'custom' => mt_rand()]; $expectedMessage = $message . ' ' . json_encode(array_slice($context, 1)); $this->debugDispatcher->expects($this->once())->method('dispatchDebug')->with( $this->equalTo($expectedMessage), $this->equalTo($tag) ); - $this->initLogger()->addDebug($message, $context); + $this->initLogger()->debug($message, $context); } public function testDebugTags($tagsContextKeys = null) { $expectedTags = mt_rand(); - $logger = $this->initLogger($tagsContextKeys ? array('debugTagsKeysInContext' => $tagsContextKeys) : array()); + $logger = $this->initLogger($tagsContextKeys ? ['debugTagsKeysInContext' => $tagsContextKeys] : []); if (!$tagsContextKeys) { $tagsContextKeys = $this->getHandlerDefaultOption('debugTagsKeysInContext'); } @@ -151,7 +151,7 @@ class PHPConsoleHandlerTest extends TestCase $this->equalTo($expectedTags) ); $this->connector->setDebugDispatcher($debugDispatcher); - $logger->addDebug('test', array($key => $expectedTags)); + $logger->debug('test', [$key => $expectedTags]); } } @@ -168,8 +168,8 @@ class PHPConsoleHandlerTest extends TestCase $this->equalTo($line), $classesPartialsTraceIgnore ?: $this->equalTo($this->getHandlerDefaultOption('classesPartialsTraceIgnore')) ); - $errorHandler = ErrorHandler::register($this->initLogger($classesPartialsTraceIgnore ? array('classesPartialsTraceIgnore' => $classesPartialsTraceIgnore) : array()), false); - $errorHandler->registerErrorHandler(array(), false, E_USER_WARNING); + $errorHandler = ErrorHandler::register($this->initLogger($classesPartialsTraceIgnore ? ['classesPartialsTraceIgnore' => $classesPartialsTraceIgnore] : []), false); + $errorHandler->registerErrorHandler([], false, E_USER_WARNING); $errorHandler->handleError($code, $message, $file, $line); } @@ -183,7 +183,7 @@ class PHPConsoleHandlerTest extends TestCase $handler->log( \Psr\Log\LogLevel::ERROR, sprintf('Uncaught Exception %s: "%s" at %s line %s', get_class($e), $e->getMessage(), $e->getFile(), $e->getLine()), - array('exception' => $e) + ['exception' => $e] ); } @@ -192,45 +192,45 @@ class PHPConsoleHandlerTest extends TestCase */ public function testWrongOptionsThrowsException() { - new PHPConsoleHandler(array('xxx' => 1)); + new PHPConsoleHandler(['xxx' => 1]); } public function testOptionEnabled() { $this->debugDispatcher->expects($this->never())->method('dispatchDebug'); - $this->initLogger(array('enabled' => false))->addDebug('test'); + $this->initLogger(['enabled' => false])->debug('test'); } public function testOptionClassesPartialsTraceIgnore() { - $this->testError(array('Class', 'Namespace\\')); + $this->testError(['Class', 'Namespace\\']); } public function testOptionDebugTagsKeysInContext() { - $this->testDebugTags(array('key1', 'key2')); + $this->testDebugTags(['key1', 'key2']); } public function testOptionUseOwnErrorsAndExceptionsHandler() { - $this->initLogger(array('useOwnErrorsHandler' => true, 'useOwnExceptionsHandler' => true)); - $this->assertEquals(array(Handler::getInstance(), 'handleError'), set_error_handler(function () { + $this->initLogger(['useOwnErrorsHandler' => true, 'useOwnExceptionsHandler' => true]); + $this->assertEquals([VendorPhpConsoleHandler::getInstance(), 'handleError'], set_error_handler(function () { })); - $this->assertEquals(array(Handler::getInstance(), 'handleException'), set_exception_handler(function () { + $this->assertEquals([VendorPhpConsoleHandler::getInstance(), 'handleException'], set_exception_handler(function () { })); } public static function provideConnectorMethodsOptionsSets() { - return array( - array('sourcesBasePath', 'setSourcesBasePath', __DIR__), - array('serverEncoding', 'setServerEncoding', 'cp1251'), - array('password', 'setPassword', '******'), - array('enableSslOnlyMode', 'enableSslOnlyMode', true, false), - array('ipMasks', 'setAllowedIpMasks', array('127.0.0.*')), - array('headersLimit', 'setHeadersLimit', 2500), - array('enableEvalListener', 'startEvalRequestsListener', true, false), - ); + return [ + ['sourcesBasePath', 'setSourcesBasePath', __DIR__], + ['serverEncoding', 'setServerEncoding', 'cp1251'], + ['password', 'setPassword', '******'], + ['enableSslOnlyMode', 'enableSslOnlyMode', true, false], + ['ipMasks', 'setAllowedIpMasks', ['127.0.0.*']], + ['headersLimit', 'setHeadersLimit', 2500], + ['enableEvalListener', 'startEvalRequestsListener', true, false], + ]; } /** @@ -242,24 +242,24 @@ class PHPConsoleHandlerTest extends TestCase if ($isArgument) { $expectCall->with($value); } - new PHPConsoleHandler(array($option => $value), $this->connector); + new PHPConsoleHandler([$option => $value], $this->connector); } public function testOptionDetectDumpTraceAndSource() { - new PHPConsoleHandler(array('detectDumpTraceAndSource' => true), $this->connector); + new PHPConsoleHandler(['detectDumpTraceAndSource' => true], $this->connector); $this->assertTrue($this->connector->getDebugDispatcher()->detectTraceAndSource); } public static function provideDumperOptionsValues() { - return array( - array('dumperLevelLimit', 'levelLimit', 1001), - array('dumperItemsCountLimit', 'itemsCountLimit', 1002), - array('dumperItemSizeLimit', 'itemSizeLimit', 1003), - array('dumperDumpSizeLimit', 'dumpSizeLimit', 1004), - array('dumperDetectCallbacks', 'detectCallbacks', true), - ); + return [ + ['dumperLevelLimit', 'levelLimit', 1001], + ['dumperItemsCountLimit', 'itemsCountLimit', 1002], + ['dumperItemSizeLimit', 'itemSizeLimit', 1003], + ['dumperDumpSizeLimit', 'dumpSizeLimit', 1004], + ['dumperDetectCallbacks', 'detectCallbacks', true], + ]; } /** @@ -267,7 +267,7 @@ class PHPConsoleHandlerTest extends TestCase */ public function testDumperOptions($option, $dumperProperty, $value) { - new PHPConsoleHandler(array($option => $value), $this->connector); + new PHPConsoleHandler([$option => $value], $this->connector); $this->assertEquals($value, $this->connector->getDumper()->$dumperProperty); } } diff --git a/tests/Monolog/Handler/ProcessHandlerTest.php b/tests/Monolog/Handler/ProcessHandlerTest.php new file mode 100644 index 0000000..dc2a427 --- /dev/null +++ b/tests/Monolog/Handler/ProcessHandlerTest.php @@ -0,0 +1,195 @@ +<?php declare(strict_types=1); + +/* + * This file is part of the Monolog package. + * + * (c) Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Handler; + +use Monolog\Test\TestCase; +use Monolog\Logger; + +class ProcessHandlerTest extends TestCase +{ + /** + * Dummy command to be used by tests that should not fail due to the command. + * + * @var string + */ + const DUMMY_COMMAND = 'echo'; + + /** + * @covers Monolog\Handler\ProcessHandler::__construct + * @covers Monolog\Handler\ProcessHandler::guardAgainstInvalidCommand + * @covers Monolog\Handler\ProcessHandler::guardAgainstInvalidCwd + * @covers Monolog\Handler\ProcessHandler::write + * @covers Monolog\Handler\ProcessHandler::ensureProcessIsStarted + * @covers Monolog\Handler\ProcessHandler::startProcess + * @covers Monolog\Handler\ProcessHandler::handleStartupErrors + */ + public function testWriteOpensProcessAndWritesToStdInOfProcess() + { + $fixtures = [ + 'chuck norris', + 'foobar1337', + ]; + + $mockBuilder = $this->getMockBuilder('Monolog\Handler\ProcessHandler'); + $mockBuilder->setMethods(['writeProcessInput']); + // using echo as command, as it is most probably available + $mockBuilder->setConstructorArgs([self::DUMMY_COMMAND]); + + $handler = $mockBuilder->getMock(); + + $handler->expects($this->exactly(2)) + ->method('writeProcessInput') + ->withConsecutive($this->stringContains($fixtures[0]), $this->stringContains($fixtures[1])); + + /** @var ProcessHandler $handler */ + $handler->handle($this->getRecord(Logger::WARNING, $fixtures[0])); + $handler->handle($this->getRecord(Logger::ERROR, $fixtures[1])); + } + + /** + * Data provider for invalid commands. + * + * @return array + */ + public function invalidCommandProvider() + { + return [ + [1337, 'TypeError'], + ['', 'InvalidArgumentException'], + [null, 'TypeError'], + [fopen('php://input', 'r'), 'TypeError'], + ]; + } + + /** + * @dataProvider invalidCommandProvider + * @param mixed $invalidCommand + * @covers Monolog\Handler\ProcessHandler::guardAgainstInvalidCommand + */ + public function testConstructWithInvalidCommandThrowsInvalidArgumentException($invalidCommand, $expectedExcep) + { + $this->setExpectedException($expectedExcep); + new ProcessHandler($invalidCommand, Logger::DEBUG); + } + + /** + * Data provider for invalid CWDs. + * + * @return array + */ + public function invalidCwdProvider() + { + return [ + [1337, 'TypeError'], + ['', 'InvalidArgumentException'], + [fopen('php://input', 'r'), 'TypeError'], + ]; + } + + /** + * @dataProvider invalidCwdProvider + * @param mixed $invalidCwd + * @covers Monolog\Handler\ProcessHandler::guardAgainstInvalidCwd + */ + public function testConstructWithInvalidCwdThrowsInvalidArgumentException($invalidCwd, $expectedExcep) + { + $this->setExpectedException($expectedExcep); + new ProcessHandler(self::DUMMY_COMMAND, Logger::DEBUG, true, $invalidCwd); + } + + /** + * @covers Monolog\Handler\ProcessHandler::__construct + * @covers Monolog\Handler\ProcessHandler::guardAgainstInvalidCwd + */ + public function testConstructWithValidCwdWorks() + { + $handler = new ProcessHandler(self::DUMMY_COMMAND, Logger::DEBUG, true, sys_get_temp_dir()); + $this->assertInstanceOf( + 'Monolog\Handler\ProcessHandler', + $handler, + 'Constructed handler is not a ProcessHandler.' + ); + } + + /** + * @covers Monolog\Handler\ProcessHandler::handleStartupErrors + */ + public function testStartupWithFailingToSelectErrorStreamThrowsUnexpectedValueException() + { + $mockBuilder = $this->getMockBuilder('Monolog\Handler\ProcessHandler'); + $mockBuilder->setMethods(['selectErrorStream']); + $mockBuilder->setConstructorArgs([self::DUMMY_COMMAND]); + + $handler = $mockBuilder->getMock(); + + $handler->expects($this->once()) + ->method('selectErrorStream') + ->will($this->returnValue(false)); + + $this->setExpectedException('\UnexpectedValueException'); + /** @var ProcessHandler $handler */ + $handler->handle($this->getRecord(Logger::WARNING, 'stream failing, whoops')); + } + + /** + * @covers Monolog\Handler\ProcessHandler::handleStartupErrors + * @covers Monolog\Handler\ProcessHandler::selectErrorStream + */ + public function testStartupWithErrorsThrowsUnexpectedValueException() + { + $handler = new ProcessHandler('>&2 echo "some fake error message"'); + $this->setExpectedException('\UnexpectedValueException'); + $handler->handle($this->getRecord(Logger::WARNING, 'some warning in the house')); + } + + /** + * @covers Monolog\Handler\ProcessHandler::write + */ + public function testWritingWithErrorsOnStdOutOfProcessThrowsInvalidArgumentException() + { + $mockBuilder = $this->getMockBuilder('Monolog\Handler\ProcessHandler'); + $mockBuilder->setMethods(['readProcessErrors']); + // using echo as command, as it is most probably available + $mockBuilder->setConstructorArgs([self::DUMMY_COMMAND]); + + $handler = $mockBuilder->getMock(); + + $handler->expects($this->exactly(2)) + ->method('readProcessErrors') + ->willReturnOnConsecutiveCalls('', $this->returnValue('some fake error message here')); + + $this->setExpectedException('\UnexpectedValueException'); + /** @var ProcessHandler $handler */ + $handler->handle($this->getRecord(Logger::WARNING, 'some test stuff')); + } + + /** + * @covers Monolog\Handler\ProcessHandler::close + */ + public function testCloseClosesProcess() + { + $class = new \ReflectionClass('Monolog\Handler\ProcessHandler'); + $property = $class->getProperty('process'); + $property->setAccessible(true); + + $handler = new ProcessHandler(self::DUMMY_COMMAND); + $handler->handle($this->getRecord(Logger::WARNING, '21 is only the half truth')); + + $process = $property->getValue($handler); + $this->assertTrue(is_resource($process), 'Process is not running although it should.'); + + $handler->close(); + + $process = $property->getValue($handler); + $this->assertFalse(is_resource($process), 'Process is still running although it should not.'); + } +} diff --git a/tests/Monolog/Handler/PsrHandlerTest.php b/tests/Monolog/Handler/PsrHandlerTest.php index 64eaab1..e371512 100644 --- a/tests/Monolog/Handler/PsrHandlerTest.php +++ b/tests/Monolog/Handler/PsrHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; /** @@ -21,11 +21,11 @@ class PsrHandlerTest extends TestCase { public function logLevelProvider() { - $levels = array(); + $levels = []; $monologLogger = new Logger(''); foreach ($monologLogger->getLevels() as $levelName => $level) { - $levels[] = array($levelName, $level); + $levels[] = [$levelName, $level]; } return $levels; @@ -37,14 +37,14 @@ class PsrHandlerTest extends TestCase public function testHandlesAllLevels($levelName, $level) { $message = 'Hello, world! ' . $level; - $context = array('foo' => 'bar', 'level' => $level); + $context = ['foo' => 'bar', 'level' => $level]; - $psrLogger = $this->getMock('Psr\Log\NullLogger'); + $psrLogger = $this->createMock('Psr\Log\NullLogger'); $psrLogger->expects($this->once()) ->method('log') ->with(strtolower($levelName), $message, $context); $handler = new PsrHandler($psrLogger); - $handler->handle(array('level' => $level, 'level_name' => $levelName, 'message' => $message, 'context' => $context)); + $handler->handle(['level' => $level, 'level_name' => $levelName, 'message' => $message, 'context' => $context]); } } diff --git a/tests/Monolog/Handler/PushoverHandlerTest.php b/tests/Monolog/Handler/PushoverHandlerTest.php index 56df474..6a295c9 100644 --- a/tests/Monolog/Handler/PushoverHandlerTest.php +++ b/tests/Monolog/Handler/PushoverHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; /** @@ -103,7 +103,7 @@ class PushoverHandlerTest extends TestCase public function testWriteToMultipleUsers() { - $this->createHandler('myToken', array('userA', 'userB')); + $this->createHandler('myToken', ['userA', 'userB']); $this->handler->handle($this->getRecord(Logger::EMERGENCY, 'test1')); fseek($this->res, 0); $content = fread($this->res, 1024); @@ -114,15 +114,14 @@ class PushoverHandlerTest extends TestCase private function createHandler($token = 'myToken', $user = 'myUser', $title = 'Monolog') { - $constructorArgs = array($token, $user, $title); + $constructorArgs = [$token, $user, $title]; $this->res = fopen('php://memory', 'a'); - $this->handler = $this->getMock( - '\Monolog\Handler\PushoverHandler', - array('fsockopen', 'streamSetTimeout', 'closeSocket'), - $constructorArgs - ); + $this->handler = $this->getMockBuilder('Monolog\Handler\PushoverHandler') + ->setConstructorArgs($constructorArgs) + ->setMethods(['fsockopen', 'streamSetTimeout', 'closeSocket']) + ->getMock(); - $reflectionProperty = new \ReflectionProperty('\Monolog\Handler\SocketHandler', 'connectionString'); + $reflectionProperty = new \ReflectionProperty('Monolog\Handler\SocketHandler', 'connectionString'); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($this->handler, 'localhost:1234'); diff --git a/tests/Monolog/Handler/RavenHandlerTest.php b/tests/Monolog/Handler/RavenHandlerTest.php index 26d212b..082042f 100644 --- a/tests/Monolog/Handler/RavenHandlerTest.php +++ b/tests/Monolog/Handler/RavenHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,19 +11,24 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; use Monolog\Formatter\LineFormatter; +use Raven_Client; class RavenHandlerTest extends TestCase { public function setUp() { if (!class_exists('Raven_Client')) { - $this->markTestSkipped('raven/raven not installed'); + $this->markTestSkipped('sentry/sentry not installed'); } - require_once __DIR__ . '/MockRavenClient.php'; + if (version_compare(Raven_Client::VERSION, '0.16.0', '>=')) { + require_once __DIR__ . '/MockRavenClient-gte-0-16-0.php'; + } else { + require_once __DIR__ . '/MockRavenClient.php'; + } } /** @@ -78,8 +83,8 @@ class RavenHandlerTest extends TestCase $ravenClient = $this->getRavenClient(); $handler = $this->getHandler($ravenClient); - $tags = array(1, 2, 'foo'); - $record = $this->getRecord(Logger::INFO, 'test', array('tags' => $tags)); + $tags = [1, 2, 'foo']; + $record = $this->getRecord(Logger::INFO, 'test', ['tags' => $tags]); $handler->handle($record); $this->assertEquals($tags, $ravenClient->lastData['tags']); @@ -93,7 +98,7 @@ class RavenHandlerTest extends TestCase $checksum = '098f6bcd4621d373cade4e832627b4f6'; $release = '05a671c66aefea124cc08b76ea6d30bb'; $eventId = '31423'; - $record = $this->getRecord(Logger::INFO, 'test', array('checksum' => $checksum, 'release' => $release, 'event_id' => $eventId)); + $record = $this->getRecord(Logger::INFO, 'test', ['checksum' => $checksum, 'release' => $release, 'event_id' => $eventId]); $handler->handle($record); $this->assertEquals($checksum, $ravenClient->lastData['checksum']); @@ -106,8 +111,8 @@ class RavenHandlerTest extends TestCase $ravenClient = $this->getRavenClient(); $handler = $this->getHandler($ravenClient); - $fingerprint = array('{{ default }}', 'other value'); - $record = $this->getRecord(Logger::INFO, 'test', array('fingerprint' => $fingerprint)); + $fingerprint = ['{{ default }}', 'other value']; + $record = $this->getRecord(Logger::INFO, 'test', ['fingerprint' => $fingerprint]); $handler->handle($record); $this->assertEquals($fingerprint, $ravenClient->lastData['fingerprint']); @@ -121,14 +126,14 @@ class RavenHandlerTest extends TestCase $recordWithNoContext = $this->getRecord(Logger::INFO, 'test with default user context'); // set user context 'externally' - $user = array( + $user = [ 'id' => '123', 'email' => 'test@test.com', - ); + ]; - $recordWithContext = $this->getRecord(Logger::INFO, 'test', array('user' => $user)); + $recordWithContext = $this->getRecord(Logger::INFO, 'test', ['user' => $user]); - $ravenClient->user_context(array('id' => 'test_user_id')); + $ravenClient->user_context(['id' => 'test_user_id']); // handle context $handler->handle($recordWithContext); $this->assertEquals($user, $ravenClient->lastData['user']); @@ -156,7 +161,7 @@ class RavenHandlerTest extends TestCase try { $this->methodThatThrowsAnException(); } catch (\Exception $e) { - $record = $this->getRecord(Logger::ERROR, $e->getMessage(), array('exception' => $e)); + $record = $this->getRecord(Logger::ERROR, $e->getMessage(), ['exception' => $e]); $handler->handle($record); } @@ -169,10 +174,10 @@ class RavenHandlerTest extends TestCase $records[] = $this->getRecord(Logger::WARNING, 'warning'); $records[] = $this->getRecord(Logger::WARNING, 'warning'); - $logFormatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $logFormatter = $this->createMock('Monolog\\Formatter\\FormatterInterface'); $logFormatter->expects($this->once())->method('formatBatch'); - $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $formatter = $this->createMock('Monolog\\Formatter\\FormatterInterface'); $formatter->expects($this->once())->method('format')->with($this->callback(function ($record) { return $record['level'] == 400; })); @@ -185,13 +190,16 @@ class RavenHandlerTest extends TestCase public function testHandleBatchDoNothingIfRecordsAreBelowLevel() { - $records = array( + $records = [ $this->getRecord(Logger::DEBUG, 'debug message 1'), $this->getRecord(Logger::DEBUG, 'debug message 2'), $this->getRecord(Logger::INFO, 'information'), - ); + ]; - $handler = $this->getMock('Monolog\Handler\RavenHandler', null, array($this->getRavenClient())); + $handler = $this->getMockBuilder('Monolog\Handler\RavenHandler') + ->setMethods(['handle']) + ->setConstructorArgs([$this->getRavenClient()]) + ->getMock(); $handler->expects($this->never())->method('handle'); $handler->setLevel(Logger::ERROR); $handler->handleBatch($records); @@ -209,10 +217,10 @@ class RavenHandlerTest extends TestCase $this->getRecord(Logger::INFO, 'information 2'), ); - $logFormatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $logFormatter = $this->createMock('Monolog\\Formatter\\FormatterInterface'); $logFormatter->expects($this->once())->method('formatBatch'); - $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $formatter = $this->createMock('Monolog\\Formatter\\FormatterInterface'); $formatter->expects($this->once())->method('format')->with($this->callback(function ($record) use ($records) { return $record['message'] == 'error 1'; })); @@ -243,7 +251,7 @@ class RavenHandlerTest extends TestCase $this->assertEquals($release, $ravenClient->lastData['release']); $localRelease = 'v41.41.41'; - $record = $this->getRecord(Logger::INFO, 'test', array('release' => $localRelease)); + $record = $this->getRecord(Logger::INFO, 'test', ['release' => $localRelease]); $handler->handle($record); $this->assertEquals($localRelease, $ravenClient->lastData['release']); } diff --git a/tests/Monolog/Handler/RedisHandlerTest.php b/tests/Monolog/Handler/RedisHandlerTest.php index 689d527..a0260e1 100644 --- a/tests/Monolog/Handler/RedisHandlerTest.php +++ b/tests/Monolog/Handler/RedisHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; use Monolog\Formatter\LineFormatter; @@ -27,26 +27,30 @@ class RedisHandlerTest extends TestCase public function testConstructorShouldWorkWithPredis() { - $redis = $this->getMock('Predis\Client'); + $redis = $this->createMock('Predis\Client'); $this->assertInstanceof('Monolog\Handler\RedisHandler', new RedisHandler($redis, 'key')); } public function testConstructorShouldWorkWithRedis() { - $redis = $this->getMock('Redis'); + if (!class_exists('Redis')) { + $this->markTestSkipped('The redis ext is required to run this test'); + } + + $redis = $this->createMock('Redis'); $this->assertInstanceof('Monolog\Handler\RedisHandler', new RedisHandler($redis, 'key')); } public function testPredisHandle() { - $redis = $this->getMock('Predis\Client', array('rpush')); + $redis = $this->createPartialMock('Predis\Client', ['rpush']); // Predis\Client uses rpush $redis->expects($this->once()) ->method('rpush') ->with('key', 'test'); - $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + $record = $this->getRecord(Logger::WARNING, 'test', ['data' => new \stdClass, 'foo' => 34]); $handler = new RedisHandler($redis, 'key'); $handler->setFormatter(new LineFormatter("%message%")); @@ -55,14 +59,18 @@ class RedisHandlerTest extends TestCase public function testRedisHandle() { - $redis = $this->getMock('Redis', array('rpush')); + if (!class_exists('Redis')) { + $this->markTestSkipped('The redis ext is required to run this test'); + } + + $redis = $this->createPartialMock('Redis', ['rpush']); // Redis uses rPush $redis->expects($this->once()) - ->method('rPush') + ->method('rpush') ->with('key', 'test'); - $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + $record = $this->getRecord(Logger::WARNING, 'test', ['data' => new \stdClass, 'foo' => 34]); $handler = new RedisHandler($redis, 'key'); $handler->setFormatter(new LineFormatter("%message%")); @@ -71,7 +79,11 @@ class RedisHandlerTest extends TestCase public function testRedisHandleCapped() { - $redis = $this->getMock('Redis', array('multi', 'rpush', 'ltrim', 'exec')); + if (!class_exists('Redis')) { + $this->markTestSkipped('The redis ext is required to run this test'); + } + + $redis = $this->createPartialMock('Redis', ['multi', 'rpush', 'ltrim', 'exec']); // Redis uses multi $redis->expects($this->once()) @@ -90,7 +102,7 @@ class RedisHandlerTest extends TestCase ->method('exec') ->will($this->returnSelf()); - $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + $record = $this->getRecord(Logger::WARNING, 'test', ['data' => new \stdClass, 'foo' => 34]); $handler = new RedisHandler($redis, 'key', Logger::DEBUG, true, 10); $handler->setFormatter(new LineFormatter("%message%")); @@ -99,9 +111,9 @@ class RedisHandlerTest extends TestCase public function testPredisHandleCapped() { - $redis = $this->getMock('Predis\Client', array('transaction')); + $redis = $this->createPartialMock('Predis\Client', ['transaction']); - $redisTransaction = $this->getMock('Predis\Client', array('rpush', 'ltrim')); + $redisTransaction = $this->createPartialMock('Predis\Client', ['rpush', 'ltrim']); $redisTransaction->expects($this->once()) ->method('rpush') @@ -118,7 +130,7 @@ class RedisHandlerTest extends TestCase $cb($redisTransaction); })); - $record = $this->getRecord(Logger::WARNING, 'test', array('data' => new \stdClass, 'foo' => 34)); + $record = $this->getRecord(Logger::WARNING, 'test', ['data' => new \stdClass, 'foo' => 34]); $handler = new RedisHandler($redis, 'key', Logger::DEBUG, true, 10); $handler->setFormatter(new LineFormatter("%message%")); diff --git a/tests/Monolog/Handler/RollbarHandlerTest.php b/tests/Monolog/Handler/RollbarHandlerTest.php index f302e91..89fc9cb 100644 --- a/tests/Monolog/Handler/RollbarHandlerTest.php +++ b/tests/Monolog/Handler/RollbarHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -12,7 +12,7 @@ namespace Monolog\Handler; use Exception; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; use PHPUnit_Framework_MockObject_MockObject as MockObject; @@ -32,7 +32,7 @@ class RollbarHandlerTest extends TestCase /** * @var array */ - public $reportedExceptionArguments = null; + private $reportedExceptionArguments = null; protected function setUp() { @@ -60,25 +60,23 @@ class RollbarHandlerTest extends TestCase ->setMethods(array('report_message', 'report_exception', 'flush')) ->getMock(); - $that = $this; - $this->rollbarNotifier ->expects($this->any()) ->method('report_exception') - ->willReturnCallback(function ($exception, $context, $payload) use ($that) { - $that->reportedExceptionArguments = compact('exception', 'context', 'payload'); + ->willReturnCallback(function ($exception, $context, $payload) { + $this->reportedExceptionArguments = compact('exception', 'context', 'payload'); }); } - private function createHandler() + private function createHandler(): RollbarHandler { return new RollbarHandler($this->rollbarNotifier, Logger::DEBUG); } - private function createExceptionRecord($level = Logger::DEBUG, $message = 'test', $exception = null) + private function createExceptionRecord($level = Logger::DEBUG, $message = 'test', $exception = null): array { - return $this->getRecord($level, $message, array( - 'exception' => $exception ?: new Exception() - )); + return $this->getRecord($level, $message, [ + 'exception' => $exception ?: new Exception(), + ]); } } diff --git a/tests/Monolog/Handler/RotatingFileHandlerTest.php b/tests/Monolog/Handler/RotatingFileHandlerTest.php index f1feb22..f2d61db 100644 --- a/tests/Monolog/Handler/RotatingFileHandlerTest.php +++ b/tests/Monolog/Handler/RotatingFileHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,21 +11,15 @@ namespace Monolog\Handler; -use Monolog\TestCase; -use PHPUnit_Framework_Error_Deprecated; +use InvalidArgumentException; +use Monolog\Test\TestCase; /** * @covers Monolog\Handler\RotatingFileHandler */ class RotatingFileHandlerTest extends TestCase { - /** - * This var should be private but then the anonymous function - * in the `setUp` method won't be able to set it. `$this` cant't - * be used in the anonymous function in `setUp` because PHP 5.3 - * does not support it. - */ - public $lastError; + private $lastError; public function setUp() { @@ -35,13 +29,11 @@ class RotatingFileHandlerTest extends TestCase $this->markTestSkipped($dir.' must be writable to test the RotatingFileHandler.'); } $this->lastError = null; - $self = $this; - // workaround with &$self used for PHP 5.3 - set_error_handler(function($code, $message) use (&$self) { - $self->lastError = array( + set_error_handler(function ($code, $message) { + $this->lastError = [ 'code' => $code, 'message' => $message, - ); + ]; }); } @@ -107,32 +99,32 @@ class RotatingFileHandlerTest extends TestCase public function rotationTests() { $now = time(); - $dayCallback = function($ago) use ($now) { + $dayCallback = function ($ago) use ($now) { return $now + 86400 * $ago; }; $monthCallback = function($ago) { - return gmmktime(0, 0, 0, date('n') + $ago, 1, date('Y')); + return gmmktime(0, 0, 0, (int) (date('n') + $ago), 1, (int) date('Y')); }; $yearCallback = function($ago) { - return gmmktime(0, 0, 0, 1, 1, date('Y') + $ago); + return gmmktime(0, 0, 0, 1, 1, (int) (date('Y') + $ago)); }; - return array( + return [ 'Rotation is triggered when the file of the current day is not present' - => array(true, RotatingFileHandler::FILE_PER_DAY, $dayCallback), + => [true, RotatingFileHandler::FILE_PER_DAY, $dayCallback], 'Rotation is not triggered when the file of the current day is already present' - => array(false, RotatingFileHandler::FILE_PER_DAY, $dayCallback), + => [false, RotatingFileHandler::FILE_PER_DAY, $dayCallback], 'Rotation is triggered when the file of the current month is not present' - => array(true, RotatingFileHandler::FILE_PER_MONTH, $monthCallback), + => [true, RotatingFileHandler::FILE_PER_MONTH, $monthCallback], 'Rotation is not triggered when the file of the current month is already present' - => array(false, RotatingFileHandler::FILE_PER_MONTH, $monthCallback), + => [false, RotatingFileHandler::FILE_PER_MONTH, $monthCallback], 'Rotation is triggered when the file of the current year is not present' - => array(true, RotatingFileHandler::FILE_PER_YEAR, $yearCallback), + => [true, RotatingFileHandler::FILE_PER_YEAR, $yearCallback], 'Rotation is not triggered when the file of the current year is already present' - => array(false, RotatingFileHandler::FILE_PER_YEAR, $yearCallback), - ); + => [false, RotatingFileHandler::FILE_PER_YEAR, $yearCallback], + ]; } /** @@ -141,26 +133,38 @@ class RotatingFileHandlerTest extends TestCase public function testAllowOnlyFixedDefinedDateFormats($dateFormat, $valid) { $handler = new RotatingFileHandler(__DIR__.'/Fixtures/foo.rot', 2); - $handler->setFilenameFormat('{filename}-{date}', $dateFormat); if (!$valid) { - $this->assertErrorWasTriggered( - E_USER_DEPRECATED, - 'Invalid date format - format must be one of RotatingFileHandler::FILE_PER_DAY ("Y-m-d"), '. - 'RotatingFileHandler::FILE_PER_MONTH ("Y-m") or RotatingFileHandler::FILE_PER_YEAR ("Y"), '. - 'or you can set one of the date formats using slashes, underscores and/or dots instead of dashes.' - ); + $this->setExpectedExceptionRegExp(InvalidArgumentException::class, '~^Invalid date format~'); } + $handler->setFilenameFormat('{filename}-{date}', $dateFormat); + $this->assertTrue(true); } public function dateFormatProvider() { - return array( - array(RotatingFileHandler::FILE_PER_DAY, true), - array(RotatingFileHandler::FILE_PER_MONTH, true), - array(RotatingFileHandler::FILE_PER_YEAR, true), - array('m-d-Y', false), - array('Y-m-d-h-i', false) - ); + return [ + [RotatingFileHandler::FILE_PER_DAY, true], + [RotatingFileHandler::FILE_PER_MONTH, true], + [RotatingFileHandler::FILE_PER_YEAR, true], + ['Y/m/d', true], + ['Y.m.d', true], + ['Y_m_d', true], + ['Ymd', true], + ['Ym/d', true], + ['Y/m', true], + ['Ym', true], + ['Y.m', true], + ['Y_m', true], + ['Y/md', true], + ['', false], + ['m-d-Y', false], + ['Y-m-d-h-i', false], + ['Y-', false], + ['Y-m-', false], + ['Y--', false], + ['m-d', false], + ['Y-d', false], + ]; } /** @@ -169,26 +173,24 @@ class RotatingFileHandlerTest extends TestCase public function testDisallowFilenameFormatsWithoutDate($filenameFormat, $valid) { $handler = new RotatingFileHandler(__DIR__.'/Fixtures/foo.rot', 2); - $handler->setFilenameFormat($filenameFormat, RotatingFileHandler::FILE_PER_DAY); if (!$valid) { - $this->assertErrorWasTriggered( - E_USER_DEPRECATED, - 'Invalid filename format - format should contain at least `{date}`, because otherwise rotating is impossible.' - ); + $this->setExpectedExceptionRegExp(InvalidArgumentException::class, '~^Invalid filename format~'); } + + $handler->setFilenameFormat($filenameFormat, RotatingFileHandler::FILE_PER_DAY); } public function filenameFormatProvider() { - return array( - array('{filename}', false), - array('{filename}-{date}', true), - array('{date}', true), - array('foobar-{date}', true), - array('foo-{date}-bar', true), - array('{date}-foobar', true), - array('foobar', false), - ); + return [ + ['{filename}', false], + ['{filename}-{date}', true], + ['{date}', true], + ['foobar-{date}', true], + ['foo-{date}-bar', true], + ['{date}-foobar', true], + ['foobar', false], + ]; } public function testReuseCurrentFile() diff --git a/tests/Monolog/Handler/SamplingHandlerTest.php b/tests/Monolog/Handler/SamplingHandlerTest.php index b354cee..90f5c9b 100644 --- a/tests/Monolog/Handler/SamplingHandlerTest.php +++ b/tests/Monolog/Handler/SamplingHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; /** * @covers Monolog\Handler\SamplingHandler::handle diff --git a/tests/Monolog/Handler/Slack/SlackRecordTest.php b/tests/Monolog/Handler/Slack/SlackRecordTest.php index e1aa96d..aa5787f 100644 --- a/tests/Monolog/Handler/Slack/SlackRecordTest.php +++ b/tests/Monolog/Handler/Slack/SlackRecordTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -12,7 +12,7 @@ namespace Monolog\Handler\Slack; use Monolog\Logger; -use Monolog\TestCase; +use Monolog\Test\TestCase; /** * @coversDefaultClass Monolog\Handler\Slack\SlackRecord @@ -42,8 +42,8 @@ class SlackRecordTest extends TestCase /** * @dataProvider dataGetAttachmentColor - * @param int $logLevel - * @param string $expectedColour RGB hex color or name of Slack color + * @param int $logLevel + * @param string $expectedColour RGB hex color or name of Slack color * @covers ::getAttachmentColor */ public function testGetAttachmentColor($logLevel, $expectedColour) @@ -88,7 +88,7 @@ class SlackRecordTest extends TestCase array(array(), '[]'), array($multipleDimensions, json_encode($multipleDimensions, $jsonPrettyPrintFlag)), array($numericKeys, json_encode($numericKeys, $jsonPrettyPrintFlag)), - array($singleDimension, json_encode($singleDimension)) + array($singleDimension, json_encode($singleDimension)), ); } @@ -172,17 +172,21 @@ class SlackRecordTest extends TestCase public function testTextEqualsFormatterOutput() { - $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $formatter = $this->createMock('Monolog\\Formatter\\FormatterInterface'); $formatter ->expects($this->any()) ->method('format') - ->will($this->returnCallback(function ($record) { return $record['message'] . 'test'; })); + ->will($this->returnCallback(function ($record) { + return $record['message'] . 'test'; + })); - $formatter2 = $this->getMock('Monolog\\Formatter\\FormatterInterface'); + $formatter2 = $this->createMock('Monolog\\Formatter\\FormatterInterface'); $formatter2 ->expects($this->any()) ->method('format') - ->will($this->returnCallback(function ($record) { return $record['message'] . 'test1'; })); + ->will($this->returnCallback(function ($record) { + return $record['message'] . 'test1'; + })); $message = 'Test message'; $record = new SlackRecord(null, null, false, null, false, false, array(), $formatter); @@ -268,13 +272,13 @@ class SlackRecordTest extends TestCase array( 'title' => 'Extra', 'value' => sprintf('```%s```', json_encode($extra, $this->jsonPrettyPrintFlag)), - 'short' => false + 'short' => false, ), array( 'title' => 'Context', 'value' => sprintf('```%s```', json_encode($context, $this->jsonPrettyPrintFlag)), - 'short' => false - ) + 'short' => false, + ), ), $attachment['fields'] ); @@ -296,7 +300,7 @@ class SlackRecordTest extends TestCase array(array( 'title' => 'Level', 'value' => $levelName, - 'short' => false + 'short' => false, )), $attachment['fields'] ); @@ -322,13 +326,13 @@ class SlackRecordTest extends TestCase array( 'title' => 'tags', 'value' => sprintf('```%s```', json_encode($extra['tags'])), - 'short' => false + 'short' => false, ), array( 'title' => 'test', 'value' => $context['test'], - 'short' => false - ) + 'short' => false, + ), ); $attachment = $data['attachments'][0]; @@ -370,12 +374,12 @@ class SlackRecordTest extends TestCase array( 'title' => 'info', 'value' => sprintf('```%s```', json_encode(array('author' => 'Jordi'), $this->jsonPrettyPrintFlag)), - 'short' => false + 'short' => false, ), array( 'title' => 'tags', 'value' => sprintf('```%s```', json_encode(array('web'))), - 'short' => false + 'short' => false, ), ); diff --git a/tests/Monolog/Handler/SlackHandlerTest.php b/tests/Monolog/Handler/SlackHandlerTest.php index b12b01f..e8abd15 100644 --- a/tests/Monolog/Handler/SlackHandlerTest.php +++ b/tests/Monolog/Handler/SlackHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; use Monolog\Formatter\LineFormatter; use Monolog\Handler\Slack\SlackRecord; @@ -46,7 +46,7 @@ class SlackHandlerTest extends TestCase fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/POST \/api\/chat.postMessage HTTP\/1.1\\r\\nHost: slack.com\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + $this->assertRegexp('{POST /api/chat.postMessage HTTP/1.1\\r\\nHost: slack.com\\r\\nContent-Type: application/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n}', $content); } public function testWriteContent() @@ -128,15 +128,14 @@ class SlackHandlerTest extends TestCase private function createHandler($token = 'myToken', $channel = 'channel1', $username = 'Monolog', $useAttachment = true, $iconEmoji = null, $useShortAttachment = false, $includeExtra = false) { - $constructorArgs = array($token, $channel, $username, $useAttachment, $iconEmoji, Logger::DEBUG, true, $useShortAttachment, $includeExtra); + $constructorArgs = [$token, $channel, $username, $useAttachment, $iconEmoji, Logger::DEBUG, true, $useShortAttachment, $includeExtra]; $this->res = fopen('php://memory', 'a'); - $this->handler = $this->getMock( - '\Monolog\Handler\SlackHandler', - array('fsockopen', 'streamSetTimeout', 'closeSocket'), - $constructorArgs - ); + $this->handler = $this->getMockBuilder('Monolog\Handler\SlackHandler') + ->setConstructorArgs($constructorArgs) + ->setMethods(['fsockopen', 'streamSetTimeout', 'closeSocket']) + ->getMock(); - $reflectionProperty = new \ReflectionProperty('\Monolog\Handler\SocketHandler', 'connectionString'); + $reflectionProperty = new \ReflectionProperty('Monolog\Handler\SocketHandler', 'connectionString'); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($this->handler, 'localhost:1234'); diff --git a/tests/Monolog/Handler/SlackWebhookHandlerTest.php b/tests/Monolog/Handler/SlackWebhookHandlerTest.php index c9229e2..8ce7210 100644 --- a/tests/Monolog/Handler/SlackWebhookHandlerTest.php +++ b/tests/Monolog/Handler/SlackWebhookHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; use Monolog\Formatter\LineFormatter; use Monolog\Handler\Slack\SlackRecord; diff --git a/tests/Monolog/Handler/SlackbotHandlerTest.php b/tests/Monolog/Handler/SlackbotHandlerTest.php index b1b02bd..340c4c6 100644 --- a/tests/Monolog/Handler/SlackbotHandlerTest.php +++ b/tests/Monolog/Handler/SlackbotHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; /** diff --git a/tests/Monolog/Handler/SocketHandlerTest.php b/tests/Monolog/Handler/SocketHandlerTest.php index 1f9c1f2..c0080e8 100644 --- a/tests/Monolog/Handler/SocketHandlerTest.php +++ b/tests/Monolog/Handler/SocketHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; /** @@ -88,7 +88,7 @@ class SocketHandlerTest extends TestCase */ public function testExceptionIsThrownOnFsockopenError() { - $this->setMockHandler(array('fsockopen')); + $this->setMockHandler(['fsockopen']); $this->handler->expects($this->once()) ->method('fsockopen') ->will($this->returnValue(false)); @@ -100,7 +100,7 @@ class SocketHandlerTest extends TestCase */ public function testExceptionIsThrownOnPfsockopenError() { - $this->setMockHandler(array('pfsockopen')); + $this->setMockHandler(['pfsockopen']); $this->handler->expects($this->once()) ->method('pfsockopen') ->will($this->returnValue(false)); @@ -113,7 +113,7 @@ class SocketHandlerTest extends TestCase */ public function testExceptionIsThrownIfCannotSetTimeout() { - $this->setMockHandler(array('streamSetTimeout')); + $this->setMockHandler(['streamSetTimeout']); $this->handler->expects($this->once()) ->method('streamSetTimeout') ->will($this->returnValue(false)); @@ -125,13 +125,13 @@ class SocketHandlerTest extends TestCase */ public function testWriteFailsOnIfFwriteReturnsFalse() { - $this->setMockHandler(array('fwrite')); + $this->setMockHandler(['fwrite']); $callback = function ($arg) { - $map = array( + $map = [ 'Hello world' => 6, 'world' => false, - ); + ]; return $map[$arg]; }; @@ -148,13 +148,13 @@ class SocketHandlerTest extends TestCase */ public function testWriteFailsIfStreamTimesOut() { - $this->setMockHandler(array('fwrite', 'streamGetMetadata')); + $this->setMockHandler(['fwrite', 'streamGetMetadata']); $callback = function ($arg) { - $map = array( + $map = [ 'Hello world' => 6, 'world' => 5, - ); + ]; return $map[$arg]; }; @@ -164,7 +164,7 @@ class SocketHandlerTest extends TestCase ->will($this->returnCallback($callback)); $this->handler->expects($this->exactly(1)) ->method('streamGetMetadata') - ->will($this->returnValue(array('timed_out' => true))); + ->will($this->returnValue(['timed_out' => true])); $this->writeRecord('Hello world'); } @@ -174,7 +174,7 @@ class SocketHandlerTest extends TestCase */ public function testWriteFailsOnIncompleteWrite() { - $this->setMockHandler(array('fwrite', 'streamGetMetadata')); + $this->setMockHandler(['fwrite', 'streamGetMetadata']); $res = $this->res; $callback = function ($string) use ($res) { @@ -188,7 +188,7 @@ class SocketHandlerTest extends TestCase ->will($this->returnCallback($callback)); $this->handler->expects($this->exactly(1)) ->method('streamGetMetadata') - ->will($this->returnValue(array('timed_out' => false))); + ->will($this->returnValue(['timed_out' => false])); $this->writeRecord('Hello world'); } @@ -205,13 +205,13 @@ class SocketHandlerTest extends TestCase public function testWriteWithMock() { - $this->setMockHandler(array('fwrite')); + $this->setMockHandler(['fwrite']); $callback = function ($arg) { - $map = array( + $map = [ 'Hello world' => 6, 'world' => 5, - ); + ]; return $map[$arg]; }; @@ -247,7 +247,7 @@ class SocketHandlerTest extends TestCase */ public function testAvoidInfiniteLoopWhenNoDataIsWrittenForAWritingTimeoutSeconds() { - $this->setMockHandler(array('fwrite', 'streamGetMetadata')); + $this->setMockHandler(['fwrite', 'streamGetMetadata']); $this->handler->expects($this->any()) ->method('fwrite') @@ -255,7 +255,7 @@ class SocketHandlerTest extends TestCase $this->handler->expects($this->any()) ->method('streamGetMetadata') - ->will($this->returnValue(array('timed_out' => false))); + ->will($this->returnValue(['timed_out' => false])); $this->handler->setWritingTimeout(1); @@ -273,18 +273,19 @@ class SocketHandlerTest extends TestCase $this->handler->handle($this->getRecord(Logger::WARNING, $string)); } - private function setMockHandler(array $methods = array()) + private function setMockHandler(array $methods = []) { $this->res = fopen('php://memory', 'a'); - $defaultMethods = array('fsockopen', 'pfsockopen', 'streamSetTimeout'); + $defaultMethods = ['fsockopen', 'pfsockopen', 'streamSetTimeout']; $newMethods = array_diff($methods, $defaultMethods); $finalMethods = array_merge($defaultMethods, $newMethods); - $this->handler = $this->getMock( - '\Monolog\Handler\SocketHandler', $finalMethods, array('localhost:1234') - ); + $this->handler = $this->getMockBuilder('Monolog\Handler\SocketHandler') + ->setMethods($finalMethods) + ->setConstructorArgs(['localhost:1234']) + ->getMock(); if (!in_array('fsockopen', $methods)) { $this->handler->expects($this->any()) diff --git a/tests/Monolog/Handler/StreamHandlerTest.php b/tests/Monolog/Handler/StreamHandlerTest.php index 487030f..377e296 100644 --- a/tests/Monolog/Handler/StreamHandlerTest.php +++ b/tests/Monolog/Handler/StreamHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; class StreamHandlerTest extends TestCase @@ -51,13 +51,38 @@ class StreamHandlerTest extends TestCase { $handler = new StreamHandler('php://memory'); $handler->handle($this->getRecord(Logger::WARNING, 'test')); - $streamProp = new \ReflectionProperty('Monolog\Handler\StreamHandler', 'stream'); - $streamProp->setAccessible(true); - $handle = $streamProp->getValue($handler); + $stream = $handler->getStream(); - $this->assertTrue(is_resource($handle)); + $this->assertTrue(is_resource($stream)); $handler->close(); - $this->assertFalse(is_resource($handle)); + $this->assertFalse(is_resource($stream)); + } + + /** + * @covers Monolog\Handler\StreamHandler::close + * @covers Monolog\Handler\Handler::__sleep + */ + public function testSerialization() + { + $handler = new StreamHandler('php://memory'); + $handler->handle($this->getRecord(Logger::WARNING, 'testfoo')); + $stream = $handler->getStream(); + + $this->assertTrue(is_resource($stream)); + fseek($stream, 0); + $this->assertContains('testfoo', stream_get_contents($stream)); + $serialized = serialize($handler); + $this->assertFalse(is_resource($stream)); + + $handler = unserialize($serialized); + $handler->handle($this->getRecord(Logger::WARNING, 'testbar')); + $stream = $handler->getStream(); + + $this->assertTrue(is_resource($stream)); + fseek($stream, 0); + $contents = stream_get_contents($stream); + $this->assertNotContains('testfoo', $contents); + $this->assertContains('testbar', $contents); } /** @@ -93,11 +118,11 @@ class StreamHandlerTest extends TestCase public function invalidArgumentProvider() { - return array( - array(1), - array(array()), - array(array('bogus://url')), - ); + return [ + [1], + [[]], + [['bogus://url']], + ]; } /** diff --git a/tests/Monolog/Handler/SwiftMailerHandlerTest.php b/tests/Monolog/Handler/SwiftMailerHandlerTest.php index 1d62940..3c77127 100644 --- a/tests/Monolog/Handler/SwiftMailerHandlerTest.php +++ b/tests/Monolog/Handler/SwiftMailerHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -12,7 +12,7 @@ namespace Monolog\Handler; use Monolog\Logger; -use Monolog\TestCase; +use Monolog\Test\TestCase; class SwiftMailerHandlerTest extends TestCase { @@ -37,10 +37,10 @@ class SwiftMailerHandlerTest extends TestCase }; $handler = new SwiftMailerHandler($this->mailer, $callback); - $records = array( + $records = [ $this->getRecord(Logger::DEBUG), $this->getRecord(Logger::INFO), - ); + ]; $handler->handleBatch($records); } @@ -66,9 +66,9 @@ class SwiftMailerHandlerTest extends TestCase $handler = new SwiftMailerHandler($this->mailer, $callback); // Logging 1 record makes this an Emergency - $records = array( + $records = [ $this->getRecord(Logger::EMERGENCY), - ); + ]; $handler->handleBatch($records); } @@ -83,14 +83,15 @@ class SwiftMailerHandlerTest extends TestCase ->method('send') ->with($this->callback(function ($value) use (&$receivedMessage) { $receivedMessage = $value; + return true; })); $handler = new SwiftMailerHandler($this->mailer, $messageTemplate); - $records = array( + $records = [ $this->getRecord(Logger::EMERGENCY), - ); + ]; $handler->handleBatch($records); $this->assertEquals('Alert: EMERGENCY test', $receivedMessage->getSubject()); @@ -103,10 +104,10 @@ class SwiftMailerHandlerTest extends TestCase $method = new \ReflectionMethod('Monolog\Handler\SwiftMailerHandler', 'buildMessage'); $method->setAccessible(true); - $method->invokeArgs($handler, array($messageTemplate, array())); + $method->invokeArgs($handler, [$messageTemplate, []]); - $builtMessage1 = $method->invoke($handler, $messageTemplate, array()); - $builtMessage2 = $method->invoke($handler, $messageTemplate, array()); + $builtMessage1 = $method->invoke($handler, $messageTemplate, []); + $builtMessage2 = $method->invoke($handler, $messageTemplate, []); $this->assertFalse($builtMessage1->getId() === $builtMessage2->getId(), 'Two different messages have the same id'); } diff --git a/tests/Monolog/Handler/SyslogHandlerTest.php b/tests/Monolog/Handler/SyslogHandlerTest.php index 8f9e46b..550e210 100644 --- a/tests/Monolog/Handler/SyslogHandlerTest.php +++ b/tests/Monolog/Handler/SyslogHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -13,7 +13,7 @@ namespace Monolog\Handler; use Monolog\Logger; -class SyslogHandlerTest extends \PHPUnit_Framework_TestCase +class SyslogHandlerTest extends \PHPUnit\Framework\TestCase { /** * @covers Monolog\Handler\SyslogHandler::__construct @@ -38,7 +38,7 @@ class SyslogHandlerTest extends \PHPUnit_Framework_TestCase */ public function testConstructInvalidFacility() { - $this->setExpectedException('UnexpectedValueException'); + $this->expectException('UnexpectedValueException'); $handler = new SyslogHandler('test', 'unknown'); } } diff --git a/tests/Monolog/Handler/SyslogUdpHandlerTest.php b/tests/Monolog/Handler/SyslogUdpHandlerTest.php index 7ee8a98..9f32d91 100644 --- a/tests/Monolog/Handler/SyslogUdpHandlerTest.php +++ b/tests/Monolog/Handler/SyslogUdpHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; /** * @requires extension sockets @@ -42,7 +42,10 @@ class SyslogUdpHandlerTest extends TestCase $handler->setFormatter(new \Monolog\Formatter\ChromePHPFormatter()); - $socket = $this->getMock('\Monolog\Handler\SyslogUdp\UdpSocket', array('write'), array('lol', 'lol')); + $socket = $this->getMockBuilder('Monolog\Handler\SyslogUdp\UdpSocket') + ->setMethods(['write']) + ->setConstructorArgs(['lol', 'lol']) + ->getMock(); $socket->expects($this->at(0)) ->method('write') ->with("lol", "<".(LOG_AUTHPRIV + LOG_WARNING).">1 $time $host php $pid - - "); @@ -60,7 +63,10 @@ class SyslogUdpHandlerTest extends TestCase $handler = new SyslogUdpHandler("127.0.0.1", 514, "authpriv"); $handler->setFormatter($this->getIdentityFormatter()); - $socket = $this->getMock('\Monolog\Handler\SyslogUdp\UdpSocket', array('write'), array('lol', 'lol')); + $socket = $this->getMockBuilder('Monolog\Handler\SyslogUdp\UdpSocket') + ->setMethods(['write']) + ->setConstructorArgs(['lol', 'lol']) + ->getMock(); $socket->expects($this->never()) ->method('write'); @@ -71,6 +77,6 @@ class SyslogUdpHandlerTest extends TestCase protected function getRecordWithMessage($msg) { - return array('message' => $msg, 'level' => \Monolog\Logger::WARNING, 'context' => null, 'extra' => array(), 'channel' => 'lol'); + return ['message' => $msg, 'level' => \Monolog\Logger::WARNING, 'context' => null, 'extra' => [], 'channel' => 'lol']; } } diff --git a/tests/Monolog/Handler/TestHandlerTest.php b/tests/Monolog/Handler/TestHandlerTest.php index bfb8d3d..db3f01f 100644 --- a/tests/Monolog/Handler/TestHandlerTest.php +++ b/tests/Monolog/Handler/TestHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; /** @@ -51,20 +51,20 @@ class TestHandlerTest extends TestCase $records = $handler->getRecords(); unset($records[0]['formatted']); - $this->assertEquals(array($record), $records); + $this->assertEquals([$record], $records); } public function methodProvider() { - return array( - array('Emergency', Logger::EMERGENCY), - array('Alert' , Logger::ALERT), - array('Critical' , Logger::CRITICAL), - array('Error' , Logger::ERROR), - array('Warning' , Logger::WARNING), - array('Info' , Logger::INFO), - array('Notice' , Logger::NOTICE), - array('Debug' , Logger::DEBUG), - ); + return [ + ['Emergency', Logger::EMERGENCY], + ['Alert' , Logger::ALERT], + ['Critical' , Logger::CRITICAL], + ['Error' , Logger::ERROR], + ['Warning' , Logger::WARNING], + ['Info' , Logger::INFO], + ['Notice' , Logger::NOTICE], + ['Debug' , Logger::DEBUG], + ]; } } diff --git a/tests/Monolog/Handler/UdpSocketTest.php b/tests/Monolog/Handler/UdpSocketTest.php index fa524d0..1adf79a 100644 --- a/tests/Monolog/Handler/UdpSocketTest.php +++ b/tests/Monolog/Handler/UdpSocketTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Handler\SyslogUdp\UdpSocket; /** @@ -21,7 +21,10 @@ class UdpSocketTest extends TestCase { public function testWeDoNotTruncateShortMessages() { - $socket = $this->getMock('\Monolog\Handler\SyslogUdp\UdpSocket', array('send'), array('lol', 'lol')); + $socket = $this->getMockBuilder('Monolog\Handler\SyslogUdp\UdpSocket') + ->setMethods(['send']) + ->setConstructorArgs(['lol', 'lol']) + ->getMock(); $socket->expects($this->at(0)) ->method('send') @@ -32,7 +35,10 @@ class UdpSocketTest extends TestCase public function testLongMessagesAreTruncated() { - $socket = $this->getMock('\Monolog\Handler\SyslogUdp\UdpSocket', array('send'), array('lol', 'lol')); + $socket = $this->getMockBuilder('Monolog\Handler\SyslogUdp\UdpSocket') + ->setMethods(['send']) + ->setConstructorArgs(['lol', 'lol']) + ->getMock(); $truncatedString = str_repeat("derp", 16254).'d'; @@ -53,7 +59,7 @@ class UdpSocketTest extends TestCase } /** - * @expectedException LogicException + * @expectedException RuntimeException */ public function testWriteAfterCloseErrors() { diff --git a/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php b/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php index 8d37a1f..60f5175 100644 --- a/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php +++ b/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Logger; class WhatFailureGroupHandlerTest extends TestCase @@ -22,7 +22,7 @@ class WhatFailureGroupHandlerTest extends TestCase */ public function testConstructorOnlyTakesHandler() { - new WhatFailureGroupHandler(array(new TestHandler(), "foo")); + new WhatFailureGroupHandler([new TestHandler(), "foo"]); } /** @@ -31,7 +31,7 @@ class WhatFailureGroupHandlerTest extends TestCase */ public function testHandle() { - $testHandlers = array(new TestHandler(), new TestHandler()); + $testHandlers = [new TestHandler(), new TestHandler()]; $handler = new WhatFailureGroupHandler($testHandlers); $handler->handle($this->getRecord(Logger::DEBUG)); $handler->handle($this->getRecord(Logger::INFO)); @@ -47,9 +47,9 @@ class WhatFailureGroupHandlerTest extends TestCase */ public function testHandleBatch() { - $testHandlers = array(new TestHandler(), new TestHandler()); + $testHandlers = [new TestHandler(), new TestHandler()]; $handler = new WhatFailureGroupHandler($testHandlers); - $handler->handleBatch(array($this->getRecord(Logger::DEBUG), $this->getRecord(Logger::INFO))); + $handler->handleBatch([$this->getRecord(Logger::DEBUG), $this->getRecord(Logger::INFO)]); foreach ($testHandlers as $test) { $this->assertTrue($test->hasDebugRecords()); $this->assertTrue($test->hasInfoRecords()); @@ -62,7 +62,7 @@ class WhatFailureGroupHandlerTest extends TestCase */ public function testIsHandling() { - $testHandlers = array(new TestHandler(Logger::ERROR), new TestHandler(Logger::WARNING)); + $testHandlers = [new TestHandler(Logger::ERROR), new TestHandler(Logger::WARNING)]; $handler = new WhatFailureGroupHandler($testHandlers); $this->assertTrue($handler->isHandling($this->getRecord(Logger::ERROR))); $this->assertTrue($handler->isHandling($this->getRecord(Logger::WARNING))); @@ -75,7 +75,7 @@ class WhatFailureGroupHandlerTest extends TestCase public function testHandleUsesProcessors() { $test = new TestHandler(); - $handler = new WhatFailureGroupHandler(array($test)); + $handler = new WhatFailureGroupHandler([$test]); $handler->pushProcessor(function ($record) { $record['extra']['foo'] = true; @@ -94,7 +94,7 @@ class WhatFailureGroupHandlerTest extends TestCase { $test = new TestHandler(); $exception = new ExceptionTestHandler(); - $handler = new WhatFailureGroupHandler(array($exception, $test, $exception)); + $handler = new WhatFailureGroupHandler([$exception, $test, $exception]); $handler->pushProcessor(function ($record) { $record['extra']['foo'] = true; @@ -112,7 +112,7 @@ class ExceptionTestHandler extends TestHandler /** * {@inheritdoc} */ - public function handle(array $record) + public function handle(array $record): bool { parent::handle($record); diff --git a/tests/Monolog/Handler/ZendMonitorHandlerTest.php b/tests/Monolog/Handler/ZendMonitorHandlerTest.php index 69b001e..4879ebe 100644 --- a/tests/Monolog/Handler/ZendMonitorHandlerTest.php +++ b/tests/Monolog/Handler/ZendMonitorHandlerTest.php @@ -1,4 +1,5 @@ -<?php +<?php declare(strict_types=1); + /* * This file is part of the Monolog package. * @@ -10,7 +11,7 @@ namespace Monolog\Handler; -use Monolog\TestCase; +use Monolog\Test\TestCase; class ZendMonitorHandlerTest extends TestCase { @@ -29,12 +30,12 @@ class ZendMonitorHandlerTest extends TestCase public function testWrite() { $record = $this->getRecord(); - $formatterResult = array( + $formatterResult = [ 'message' => $record['message'], - ); + ]; $zendMonitor = $this->getMockBuilder('Monolog\Handler\ZendMonitorHandler') - ->setMethods(array('writeZendMonitorCustomEvent', 'getDefaultFormatter')) + ->setMethods(['writeZendMonitorCustomEvent', 'getDefaultFormatter']) ->getMock(); $formatterMock = $this->getMockBuilder('Monolog\Formatter\NormalizerFormatter') diff --git a/tests/Monolog/LoggerTest.php b/tests/Monolog/LoggerTest.php index 1ecc34a..428daa0 100644 --- a/tests/Monolog/LoggerTest.php +++ b/tests/Monolog/LoggerTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -14,7 +14,7 @@ namespace Monolog; use Monolog\Processor\WebProcessor; use Monolog\Handler\TestHandler; -class LoggerTest extends \PHPUnit_Framework_TestCase +class LoggerTest extends \PHPUnit\Framework\TestCase { /** * @covers Monolog\Logger::getName @@ -38,7 +38,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase */ public function testWithName() { - $first = new Logger('first', array($handler = new TestHandler())); + $first = new Logger('first', [$handler = new TestHandler()]); $second = $first->withName('second'); $this->assertSame('first', $first->getName()); @@ -78,7 +78,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase $logger = new Logger('foo'); $handler = new TestHandler; $logger->pushHandler($handler); - $logger->addWarning('test'); + $logger->warning('test'); list($record) = $handler->getRecords(); $this->assertEquals('foo', $record['channel']); } @@ -90,12 +90,13 @@ class LoggerTest extends \PHPUnit_Framework_TestCase { $logger = new Logger(__METHOD__); - $handler = $this->getMock('Monolog\Handler\NullHandler', array('handle')); - $handler->expects($this->once()) - ->method('handle'); - $logger->pushHandler($handler); + $handler = $this->prophesize('Monolog\Handler\NullHandler'); + $handler->handle(\Prophecy\Argument::any())->shouldBeCalled(); + $handler->isHandling(['level' => 300])->willReturn(true); - $this->assertTrue($logger->addWarning('test')); + $logger->pushHandler($handler->reveal()); + + $this->assertTrue($logger->addRecord(Logger::WARNING, 'test')); } /** @@ -105,19 +106,20 @@ class LoggerTest extends \PHPUnit_Framework_TestCase { $logger = new Logger(__METHOD__); - $handler = $this->getMock('Monolog\Handler\NullHandler', array('handle'), array(Logger::ERROR)); - $handler->expects($this->never()) - ->method('handle'); - $logger->pushHandler($handler); + $handler = $this->prophesize('Monolog\Handler\NullHandler'); + $handler->handle()->shouldNotBeCalled(); + $handler->isHandling(['level' => 300])->willReturn(false); - $this->assertFalse($logger->addWarning('test')); + $logger->pushHandler($handler->reveal()); + + $this->assertFalse($logger->addRecord(Logger::WARNING, 'test')); } public function testHandlersInCtor() { $handler1 = new TestHandler; $handler2 = new TestHandler; - $logger = new Logger(__METHOD__, array($handler1, $handler2)); + $logger = new Logger(__METHOD__, [$handler1, $handler2]); $this->assertEquals($handler1, $logger->popHandler()); $this->assertEquals($handler2, $logger->popHandler()); @@ -127,7 +129,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase { $processor1 = new WebProcessor; $processor2 = new WebProcessor; - $logger = new Logger(__METHOD__, array(), array($processor1, $processor2)); + $logger = new Logger(__METHOD__, [], [$processor1, $processor2]); $this->assertEquals($processor1, $logger->popProcessor()); $this->assertEquals($processor2, $logger->popProcessor()); @@ -162,18 +164,18 @@ class LoggerTest extends \PHPUnit_Framework_TestCase $handler2 = new TestHandler; $logger->pushHandler($handler1); - $logger->setHandlers(array($handler2)); + $logger->setHandlers([$handler2]); // handler1 has been removed - $this->assertEquals(array($handler2), $logger->getHandlers()); + $this->assertEquals([$handler2], $logger->getHandlers()); - $logger->setHandlers(array( + $logger->setHandlers([ "AMapKey" => $handler1, "Woop" => $handler2, - )); + ]); // Keys have been scrubbed - $this->assertEquals(array($handler1, $handler2), $logger->getHandlers()); + $this->assertEquals([$handler1, $handler2], $logger->getHandlers()); } /** @@ -196,17 +198,6 @@ class LoggerTest extends \PHPUnit_Framework_TestCase } /** - * @covers Monolog\Logger::pushProcessor - * @expectedException InvalidArgumentException - */ - public function testPushProcessorWithNonCallable() - { - $logger = new Logger(__METHOD__); - - $logger->pushProcessor(new \stdClass()); - } - - /** * @covers Monolog\Logger::addRecord */ public function testProcessorsAreExecuted() @@ -219,7 +210,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase return $record; }); - $logger->addError('test'); + $logger->error('test'); list($record) = $handler->getRecords(); $this->assertTrue($record['extra']['win']); } @@ -230,7 +221,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase public function testProcessorsAreCalledOnlyOnce() { $logger = new Logger(__METHOD__); - $handler = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler = $this->createMock('Monolog\Handler\HandlerInterface'); $handler->expects($this->any()) ->method('isHandling') ->will($this->returnValue(true)) @@ -243,7 +234,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase $processor = $this->getMockBuilder('Monolog\Processor\WebProcessor') ->disableOriginalConstructor() - ->setMethods(array('__invoke')) + ->setMethods(['__invoke']) ->getMock() ; $processor->expects($this->once()) @@ -252,7 +243,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase ; $logger->pushProcessor($processor); - $logger->addError('test'); + $logger->error('test'); } /** @@ -261,7 +252,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase public function testProcessorsNotCalledWhenNotHandled() { $logger = new Logger(__METHOD__); - $handler = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler = $this->createMock('Monolog\Handler\HandlerInterface'); $handler->expects($this->once()) ->method('isHandling') ->will($this->returnValue(false)) @@ -271,7 +262,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase $logger->pushProcessor(function ($record) use ($that) { $that->fail('The processor should not be called'); }); - $logger->addAlert('test'); + $logger->alert('test'); } /** @@ -281,7 +272,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase { $logger = new Logger(__METHOD__); - $handler1 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler1 = $this->createMock('Monolog\Handler\HandlerInterface'); $handler1->expects($this->never()) ->method('isHandling') ->will($this->returnValue(false)) @@ -292,7 +283,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase ; $logger->pushHandler($handler1); - $handler2 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler2 = $this->createMock('Monolog\Handler\HandlerInterface'); $handler2->expects($this->once()) ->method('isHandling') ->will($this->returnValue(true)) @@ -303,7 +294,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase ; $logger->pushHandler($handler2); - $handler3 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler3 = $this->createMock('Monolog\Handler\HandlerInterface'); $handler3->expects($this->once()) ->method('isHandling') ->will($this->returnValue(false)) @@ -321,7 +312,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase */ public function testHandlersNotCalledBeforeFirstHandlingWithAssocArray() { - $handler1 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler1 = $this->createMock('Monolog\Handler\HandlerInterface'); $handler1->expects($this->never()) ->method('isHandling') ->will($this->returnValue(false)) @@ -331,7 +322,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue(false)) ; - $handler2 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler2 = $this->createMock('Monolog\Handler\HandlerInterface'); $handler2->expects($this->once()) ->method('isHandling') ->will($this->returnValue(true)) @@ -341,7 +332,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue(false)) ; - $handler3 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler3 = $this->createMock('Monolog\Handler\HandlerInterface'); $handler3->expects($this->once()) ->method('isHandling') ->will($this->returnValue(false)) @@ -350,7 +341,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase ->method('handle') ; - $logger = new Logger(__METHOD__, array('last' => $handler3, 'second' => $handler2, 'first' => $handler1)); + $logger = new Logger(__METHOD__, ['last' => $handler3, 'second' => $handler2, 'first' => $handler1]); $logger->debug('test'); } @@ -362,7 +353,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase { $logger = new Logger(__METHOD__); - $handler1 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler1 = $this->createMock('Monolog\Handler\HandlerInterface'); $handler1->expects($this->any()) ->method('isHandling') ->will($this->returnValue(true)) @@ -373,7 +364,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase ; $logger->pushHandler($handler1); - $handler2 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler2 = $this->createMock('Monolog\Handler\HandlerInterface'); $handler2->expects($this->any()) ->method('isHandling') ->will($this->returnValue(true)) @@ -394,7 +385,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase { $logger = new Logger(__METHOD__); - $handler1 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler1 = $this->createMock('Monolog\Handler\HandlerInterface'); $handler1->expects($this->any()) ->method('isHandling') ->will($this->returnValue(true)) @@ -404,7 +395,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase ; $logger->pushHandler($handler1); - $handler2 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler2 = $this->createMock('Monolog\Handler\HandlerInterface'); $handler2->expects($this->any()) ->method('isHandling') ->will($this->returnValue(true)) @@ -425,7 +416,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase { $logger = new Logger(__METHOD__); - $handler1 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler1 = $this->createMock('Monolog\Handler\HandlerInterface'); $handler1->expects($this->any()) ->method('isHandling') ->will($this->returnValue(false)) @@ -434,7 +425,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase $logger->pushHandler($handler1); $this->assertFalse($logger->isHandling(Logger::DEBUG)); - $handler2 = $this->getMock('Monolog\Handler\HandlerInterface'); + $handler2 = $this->createMock('Monolog\Handler\HandlerInterface'); $handler2->expects($this->any()) ->method('isHandling') ->will($this->returnValue(true)) @@ -446,22 +437,14 @@ class LoggerTest extends \PHPUnit_Framework_TestCase /** * @dataProvider logMethodProvider - * @covers Monolog\Logger::addDebug - * @covers Monolog\Logger::addInfo - * @covers Monolog\Logger::addNotice - * @covers Monolog\Logger::addWarning - * @covers Monolog\Logger::addError - * @covers Monolog\Logger::addCritical - * @covers Monolog\Logger::addAlert - * @covers Monolog\Logger::addEmergency * @covers Monolog\Logger::debug * @covers Monolog\Logger::info * @covers Monolog\Logger::notice - * @covers Monolog\Logger::warn - * @covers Monolog\Logger::err - * @covers Monolog\Logger::crit + * @covers Monolog\Logger::warning + * @covers Monolog\Logger::error + * @covers Monolog\Logger::critical * @covers Monolog\Logger::alert - * @covers Monolog\Logger::emerg + * @covers Monolog\Logger::emergency */ public function testLogMethods($method, $expectedLevel) { @@ -475,27 +458,17 @@ class LoggerTest extends \PHPUnit_Framework_TestCase public function logMethodProvider() { - return array( - // monolog methods - array('addDebug', Logger::DEBUG), - array('addInfo', Logger::INFO), - array('addNotice', Logger::NOTICE), - array('addWarning', Logger::WARNING), - array('addError', Logger::ERROR), - array('addCritical', Logger::CRITICAL), - array('addAlert', Logger::ALERT), - array('addEmergency', Logger::EMERGENCY), - - // ZF/Sf2 compat methods - array('debug', Logger::DEBUG), - array('info', Logger::INFO), - array('notice', Logger::NOTICE), - array('warn', Logger::WARNING), - array('err', Logger::ERROR), - array('crit', Logger::CRITICAL), - array('alert', Logger::ALERT), - array('emerg', Logger::EMERGENCY), - ); + return [ + // PSR-3 methods + ['debug', Logger::DEBUG], + ['info', Logger::INFO], + ['notice', Logger::NOTICE], + ['warning', Logger::WARNING], + ['error', Logger::ERROR], + ['critical', Logger::CRITICAL], + ['alert', Logger::ALERT], + ['emergency', Logger::EMERGENCY], + ]; } /** @@ -504,8 +477,8 @@ class LoggerTest extends \PHPUnit_Framework_TestCase */ public function testSetTimezone($tz) { - Logger::setTimezone($tz); $logger = new Logger('foo'); + $logger->setTimezone($tz); $handler = new TestHandler; $logger->pushHandler($handler); $logger->info('test'); @@ -516,18 +489,74 @@ class LoggerTest extends \PHPUnit_Framework_TestCase public function setTimezoneProvider() { return array_map( - function ($tz) { return array(new \DateTimeZone($tz)); }, + function ($tz) { + return [new \DateTimeZone($tz)]; + }, \DateTimeZone::listIdentifiers() ); } /** + * @covers Monolog\Logger::setTimezone + * @covers Monolog\DateTimeImmutable::__construct + */ + public function testTimezoneIsRespectedInUTC() + { + foreach ([true, false] as $microseconds) { + $logger = new Logger('foo'); + $logger->useMicrosecondTimestamps($microseconds); + $tz = new \DateTimeZone('America/New_York'); + $logger->setTimezone($tz); + $handler = new TestHandler; + $logger->pushHandler($handler); + $dt = new \DateTime('now', $tz); + $logger->info('test'); + list($record) = $handler->getRecords(); + + $this->assertEquals($tz, $record['datetime']->getTimezone()); + $this->assertEquals($dt->format('Y/m/d H:i'), $record['datetime']->format('Y/m/d H:i'), 'Time should match timezone with microseconds set to: '.var_export($microseconds, true)); + } + } + + /** + * @covers Monolog\Logger::setTimezone + * @covers Monolog\DateTimeImmutable::__construct + */ + public function testTimezoneIsRespectedInOtherTimezone() + { + date_default_timezone_set('CET'); + foreach ([true, false] as $microseconds) { + $logger = new Logger('foo'); + $logger->useMicrosecondTimestamps($microseconds); + $tz = new \DateTimeZone('America/New_York'); + $logger->setTimezone($tz); + $handler = new TestHandler; + $logger->pushHandler($handler); + $dt = new \DateTime('now', $tz); + $logger->info('test'); + list($record) = $handler->getRecords(); + + $this->assertEquals($tz, $record['datetime']->getTimezone()); + $this->assertEquals($dt->format('Y/m/d H:i'), $record['datetime']->format('Y/m/d H:i'), 'Time should match timezone with microseconds set to: '.var_export($microseconds, true)); + } + } + + public function tearDown() + { + date_default_timezone_set('UTC'); + } + + /** * @dataProvider useMicrosecondTimestampsProvider * @covers Monolog\Logger::useMicrosecondTimestamps * @covers Monolog\Logger::addRecord */ - public function testUseMicrosecondTimestamps($micro, $assert) + public function testUseMicrosecondTimestamps($micro, $assert, $assertFormat) { + if (PHP_VERSION_ID === 70103) { + $this->markTestSkipped(); + } + $logger = new Logger('foo'); $logger->useMicrosecondTimestamps($micro); $handler = new TestHandler; @@ -535,14 +564,16 @@ class LoggerTest extends \PHPUnit_Framework_TestCase $logger->info('test'); list($record) = $handler->getRecords(); $this->{$assert}('000000', $record['datetime']->format('u')); + $this->assertSame($record['datetime']->format($assertFormat), (string) $record['datetime']); } public function useMicrosecondTimestampsProvider() { - return array( + return [ // this has a very small chance of a false negative (1/10^6) - 'with microseconds' => array(true, 'assertNotSame'), - 'without microseconds' => array(false, PHP_VERSION_ID >= 70100 ? 'assertNotSame' : 'assertSame'), - ); + 'with microseconds' => [true, 'assertNotSame', 'Y-m-d\TH:i:s.uP'], + // php 7.1 always includes microseconds, so we keep them in, but we format the datetime without + 'without microseconds' => [false, PHP_VERSION_ID >= 70100 ? 'assertNotSame' : 'assertSame', 'Y-m-d\TH:i:sP'], + ]; } } diff --git a/tests/Monolog/Processor/GitProcessorTest.php b/tests/Monolog/Processor/GitProcessorTest.php index 5adb505..0059e6d 100644 --- a/tests/Monolog/Processor/GitProcessorTest.php +++ b/tests/Monolog/Processor/GitProcessorTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Processor; -use Monolog\TestCase; +use Monolog\Test\TestCase; class GitProcessorTest extends TestCase { diff --git a/tests/Monolog/Processor/IntrospectionProcessorTest.php b/tests/Monolog/Processor/IntrospectionProcessorTest.php index 0dd411d..5f5d9ae 100644 --- a/tests/Monolog/Processor/IntrospectionProcessorTest.php +++ b/tests/Monolog/Processor/IntrospectionProcessorTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -27,7 +27,7 @@ function tester($handler, $record) namespace Monolog\Processor; use Monolog\Logger; -use Monolog\TestCase; +use Monolog\Test\TestCase; use Monolog\Handler\TestHandler; class IntrospectionProcessorTest extends TestCase @@ -66,10 +66,10 @@ class IntrospectionProcessorTest extends TestCase public function testLevelTooLow() { - $input = array( + $input = [ 'level' => Logger::DEBUG, - 'extra' => array(), - ); + 'extra' => [], + ]; $expected = $input; @@ -81,18 +81,18 @@ class IntrospectionProcessorTest extends TestCase public function testLevelEqual() { - $input = array( + $input = [ 'level' => Logger::CRITICAL, - 'extra' => array(), - ); + 'extra' => [], + ]; $expected = $input; - $expected['extra'] = array( + $expected['extra'] = [ 'file' => null, 'line' => null, 'class' => 'ReflectionMethod', 'function' => 'invokeArgs', - ); + ]; $processor = new IntrospectionProcessor(Logger::CRITICAL); $actual = $processor($input); @@ -102,18 +102,18 @@ class IntrospectionProcessorTest extends TestCase public function testLevelHigher() { - $input = array( + $input = [ 'level' => Logger::EMERGENCY, - 'extra' => array(), - ); + 'extra' => [], + ]; $expected = $input; - $expected['extra'] = array( + $expected['extra'] = [ 'file' => null, 'line' => null, 'class' => 'ReflectionMethod', 'function' => 'invokeArgs', - ); + ]; $processor = new IntrospectionProcessor(Logger::CRITICAL); $actual = $processor($input); diff --git a/tests/Monolog/Processor/MemoryPeakUsageProcessorTest.php b/tests/Monolog/Processor/MemoryPeakUsageProcessorTest.php index eb66614..cd80527 100644 --- a/tests/Monolog/Processor/MemoryPeakUsageProcessorTest.php +++ b/tests/Monolog/Processor/MemoryPeakUsageProcessorTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Processor; -use Monolog\TestCase; +use Monolog\Test\TestCase; class MemoryPeakUsageProcessorTest extends TestCase { diff --git a/tests/Monolog/Processor/MemoryUsageProcessorTest.php b/tests/Monolog/Processor/MemoryUsageProcessorTest.php index 4692dbf..a4809cb 100644 --- a/tests/Monolog/Processor/MemoryUsageProcessorTest.php +++ b/tests/Monolog/Processor/MemoryUsageProcessorTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Processor; -use Monolog\TestCase; +use Monolog\Test\TestCase; class MemoryUsageProcessorTest extends TestCase { diff --git a/tests/Monolog/Processor/MercurialProcessorTest.php b/tests/Monolog/Processor/MercurialProcessorTest.php index 11f2b35..9028e41 100644 --- a/tests/Monolog/Processor/MercurialProcessorTest.php +++ b/tests/Monolog/Processor/MercurialProcessorTest.php @@ -1,9 +1,9 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. * - * (c) Jonathan A. Schweder <jonathanschweder@gmail.com> + * (c) Jordi Boggiano <j.boggiano@seld.be> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -11,7 +11,7 @@ namespace Monolog\Processor; -use Monolog\TestCase; +use Monolog\Test\TestCase; class MercurialProcessorTest extends TestCase { @@ -27,6 +27,7 @@ class MercurialProcessorTest extends TestCase } if ($result != 0) { $this->markTestSkipped('hg is missing'); + return; } diff --git a/tests/Monolog/Processor/ProcessIdProcessorTest.php b/tests/Monolog/Processor/ProcessIdProcessorTest.php index 458d2a3..ec39e8e 100644 --- a/tests/Monolog/Processor/ProcessIdProcessorTest.php +++ b/tests/Monolog/Processor/ProcessIdProcessorTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Processor; -use Monolog\TestCase; +use Monolog\Test\TestCase; class ProcessIdProcessorTest extends TestCase { diff --git a/tests/Monolog/Processor/PsrLogMessageProcessorTest.php b/tests/Monolog/Processor/PsrLogMessageProcessorTest.php index 029a0c0..5071d89 100644 --- a/tests/Monolog/Processor/PsrLogMessageProcessorTest.php +++ b/tests/Monolog/Processor/PsrLogMessageProcessorTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Processor; -class PsrLogMessageProcessorTest extends \PHPUnit_Framework_TestCase +class PsrLogMessageProcessorTest extends \PHPUnit\Framework\TestCase { /** * @dataProvider getPairs @@ -20,24 +20,41 @@ class PsrLogMessageProcessorTest extends \PHPUnit_Framework_TestCase { $proc = new PsrLogMessageProcessor; - $message = $proc(array( + $message = $proc([ 'message' => '{foo}', - 'context' => array('foo' => $val), - )); + 'context' => ['foo' => $val], + ]); $this->assertEquals($expected, $message['message']); } + public function testCustomDateFormat() + { + $format = "Y-m-d"; + $date = new \DateTime(); + + $proc = new PsrLogMessageProcessor($format); + + $message = $proc([ + 'message' => '{foo}', + 'context' => ['foo' => $date], + ]); + $this->assertEquals($date->format($format), $message['message']); + } + public function getPairs() { - return array( - array('foo', 'foo'), - array('3', '3'), - array(3, '3'), - array(null, ''), - array(true, '1'), - array(false, ''), - array(new \stdClass, '[object stdClass]'), - array(array(), '[array]'), - ); + $date = new \DateTime(); + + return [ + ['foo', 'foo'], + ['3', '3'], + [3, '3'], + [null, ''], + [true, '1'], + [false, ''], + [$date, $date->format(PsrLogMessageProcessor::SIMPLE_DATE)], + [new \stdClass, '[object stdClass]'], + [[], '[array]'], + ]; } } diff --git a/tests/Monolog/Processor/TagProcessorTest.php b/tests/Monolog/Processor/TagProcessorTest.php index 0d860c6..da84378 100644 --- a/tests/Monolog/Processor/TagProcessorTest.php +++ b/tests/Monolog/Processor/TagProcessorTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Processor; -use Monolog\TestCase; +use Monolog\Test\TestCase; class TagProcessorTest extends TestCase { @@ -20,7 +20,7 @@ class TagProcessorTest extends TestCase */ public function testProcessor() { - $tags = array(1, 2, 3); + $tags = [1, 2, 3]; $processor = new TagProcessor($tags); $record = $processor($this->getRecord()); @@ -32,18 +32,18 @@ class TagProcessorTest extends TestCase */ public function testProcessorTagModification() { - $tags = array(1, 2, 3); + $tags = [1, 2, 3]; $processor = new TagProcessor($tags); $record = $processor($this->getRecord()); $this->assertEquals($tags, $record['extra']['tags']); - $processor->setTags(array('a', 'b')); + $processor->setTags(['a', 'b']); $record = $processor($this->getRecord()); - $this->assertEquals(array('a', 'b'), $record['extra']['tags']); + $this->assertEquals(['a', 'b'], $record['extra']['tags']); - $processor->addTags(array('a', 'c', 'foo' => 'bar')); + $processor->addTags(['a', 'c', 'foo' => 'bar']); $record = $processor($this->getRecord()); - $this->assertEquals(array('a', 'b', 'a', 'c', 'foo' => 'bar'), $record['extra']['tags']); + $this->assertEquals(['a', 'b', 'a', 'c', 'foo' => 'bar'], $record['extra']['tags']); } } diff --git a/tests/Monolog/Processor/UidProcessorTest.php b/tests/Monolog/Processor/UidProcessorTest.php index 5d13058..927d564 100644 --- a/tests/Monolog/Processor/UidProcessorTest.php +++ b/tests/Monolog/Processor/UidProcessorTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog\Processor; -use Monolog\TestCase; +use Monolog\Test\TestCase; class UidProcessorTest extends TestCase { diff --git a/tests/Monolog/Processor/WebProcessorTest.php b/tests/Monolog/Processor/WebProcessorTest.php index 4105baf..6da6ab8 100644 --- a/tests/Monolog/Processor/WebProcessorTest.php +++ b/tests/Monolog/Processor/WebProcessorTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,20 +11,20 @@ namespace Monolog\Processor; -use Monolog\TestCase; +use Monolog\Test\TestCase; class WebProcessorTest extends TestCase { public function testProcessor() { - $server = array( + $server = [ 'REQUEST_URI' => 'A', 'REMOTE_ADDR' => 'B', 'REQUEST_METHOD' => 'C', 'HTTP_REFERER' => 'D', 'SERVER_NAME' => 'F', 'UNIQUE_ID' => 'G', - ); + ]; $processor = new WebProcessor($server); $record = $processor($this->getRecord()); @@ -38,10 +38,10 @@ class WebProcessorTest extends TestCase public function testProcessorDoNothingIfNoRequestUri() { - $server = array( + $server = [ 'REMOTE_ADDR' => 'B', 'REQUEST_METHOD' => 'C', - ); + ]; $processor = new WebProcessor($server); $record = $processor($this->getRecord()); $this->assertEmpty($record['extra']); @@ -49,12 +49,12 @@ class WebProcessorTest extends TestCase public function testProcessorReturnNullIfNoHttpReferer() { - $server = array( + $server = [ 'REQUEST_URI' => 'A', 'REMOTE_ADDR' => 'B', 'REQUEST_METHOD' => 'C', 'SERVER_NAME' => 'F', - ); + ]; $processor = new WebProcessor($server); $record = $processor($this->getRecord()); $this->assertNull($record['extra']['referrer']); @@ -62,12 +62,12 @@ class WebProcessorTest extends TestCase public function testProcessorDoesNotAddUniqueIdIfNotPresent() { - $server = array( + $server = [ 'REQUEST_URI' => 'A', 'REMOTE_ADDR' => 'B', 'REQUEST_METHOD' => 'C', 'SERVER_NAME' => 'F', - ); + ]; $processor = new WebProcessor($server); $record = $processor($this->getRecord()); $this->assertFalse(isset($record['extra']['unique_id'])); @@ -75,32 +75,32 @@ class WebProcessorTest extends TestCase public function testProcessorAddsOnlyRequestedExtraFields() { - $server = array( + $server = [ 'REQUEST_URI' => 'A', 'REMOTE_ADDR' => 'B', 'REQUEST_METHOD' => 'C', 'SERVER_NAME' => 'F', - ); + ]; - $processor = new WebProcessor($server, array('url', 'http_method')); + $processor = new WebProcessor($server, ['url', 'http_method']); $record = $processor($this->getRecord()); - $this->assertSame(array('url' => 'A', 'http_method' => 'C'), $record['extra']); + $this->assertSame(['url' => 'A', 'http_method' => 'C'], $record['extra']); } public function testProcessorConfiguringOfExtraFields() { - $server = array( + $server = [ 'REQUEST_URI' => 'A', 'REMOTE_ADDR' => 'B', 'REQUEST_METHOD' => 'C', 'SERVER_NAME' => 'F', - ); + ]; - $processor = new WebProcessor($server, array('url' => 'REMOTE_ADDR')); + $processor = new WebProcessor($server, ['url' => 'REMOTE_ADDR']); $record = $processor($this->getRecord()); - $this->assertSame(array('url' => 'B'), $record['extra']); + $this->assertSame(['url' => 'B'], $record['extra']); } /** diff --git a/tests/Monolog/PsrLogCompatTest.php b/tests/Monolog/PsrLogCompatTest.php index ab89944..a4bbcd0 100644 --- a/tests/Monolog/PsrLogCompatTest.php +++ b/tests/Monolog/PsrLogCompatTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. diff --git a/tests/Monolog/RegistryTest.php b/tests/Monolog/RegistryTest.php index 15fdfbd..7ee2cbd 100644 --- a/tests/Monolog/RegistryTest.php +++ b/tests/Monolog/RegistryTest.php @@ -1,4 +1,4 @@ -<?php +<?php declare(strict_types=1); /* * This file is part of the Monolog package. @@ -11,7 +11,7 @@ namespace Monolog; -class RegistryTest extends \PHPUnit_Framework_TestCase +class RegistryTest extends \PHPUnit\Framework\TestCase { protected function setUp() { @@ -38,26 +38,26 @@ class RegistryTest extends \PHPUnit_Framework_TestCase $logger2 = new Logger('test2'); $logger3 = new Logger('test3'); - return array( + return [ // only instances - array( - array($logger1), - array($logger1, $logger2), - array(true, false), - ), + [ + [$logger1], + [$logger1, $logger2], + [true, false], + ], // only names - array( - array($logger1), - array('test1', 'test2'), - array(true, false), - ), + [ + [$logger1], + ['test1', 'test2'], + [true, false], + ], // mixed case - array( - array($logger1, $logger2), - array('test1', $logger2, 'test3', $logger3), - array(true, true, false, false), - ), - ); + [ + [$logger1, $logger2], + ['test1', $logger2, 'test3', $logger3], + [true, true, false, false], + ], + ]; } /** @@ -68,7 +68,7 @@ class RegistryTest extends \PHPUnit_Framework_TestCase Registry::addLogger(new Logger('test1'), 'log'); Registry::clear(); - $this->setExpectedException('\InvalidArgumentException'); + $this->expectException('\InvalidArgumentException'); Registry::getInstance('log'); } @@ -82,7 +82,7 @@ class RegistryTest extends \PHPUnit_Framework_TestCase Registry::addLogger($loggerToAdd); Registry::removeLogger($remove); - $this->setExpectedException('\InvalidArgumentException'); + $this->expectException('\InvalidArgumentException'); Registry::getInstance($loggerToAdd->getName()); } @@ -90,10 +90,10 @@ class RegistryTest extends \PHPUnit_Framework_TestCase { $logger1 = new Logger('test1'); - return array( - array($logger1, $logger1), - array($logger1, 'test1'), - ); + return [ + [$logger1, $logger1], + [$logger1, 'test1'], + ]; } /** diff --git a/tests/Monolog/TestCase.php b/tests/Monolog/TestCase.php deleted file mode 100644 index 4eb7b4c..0000000 --- a/tests/Monolog/TestCase.php +++ /dev/null @@ -1,58 +0,0 @@ -<?php - -/* - * This file is part of the Monolog package. - * - * (c) Jordi Boggiano <j.boggiano@seld.be> - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog; - -class TestCase extends \PHPUnit_Framework_TestCase -{ - /** - * @return array Record - */ - protected function getRecord($level = Logger::WARNING, $message = 'test', $context = array()) - { - return array( - 'message' => $message, - 'context' => $context, - 'level' => $level, - 'level_name' => Logger::getLevelName($level), - 'channel' => 'test', - 'datetime' => \DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true))), - 'extra' => array(), - ); - } - - /** - * @return array - */ - protected function getMultipleRecords() - { - return array( - $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'), - ); - } - - /** - * @return Monolog\Formatter\FormatterInterface - */ - protected function getIdentityFormatter() - { - $formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); - $formatter->expects($this->any()) - ->method('format') - ->will($this->returnCallback(function ($record) { return $record['message']; })); - - return $formatter; - } -} diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..d475dd3 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,14 @@ +<?php declare(strict_types=1); + +/* + * This file is part of the Monolog package. + * + * (c) Jordi Boggiano <j.boggiano@seld.be> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +date_default_timezone_set('UTC'); + +require __DIR__.'/../vendor/autoload.php'; |