1
0
mirror of https://github.com/Seldaek/monolog.git synced 2025-08-21 04:11:47 +02:00

Merge branch '1.x'

This commit is contained in:
Jordi Boggiano
2019-11-12 21:50:28 +01:00
19 changed files with 262 additions and 210 deletions

View File

@@ -87,7 +87,7 @@ class NormalizerFormatterTest extends TestCase
}
$formatter = new NormalizerFormatter('Y-m-d');
$e = new \SoapFault('foo', 'bar', 'hello', 'world');
$e = new \SoapFault('foo', 'bar', 'hello', (object) ['foo' => 'world']);
$formatted = $formatter->format([
'exception' => $e,
]);
@@ -188,7 +188,7 @@ class NormalizerFormatterTest extends TestCase
restore_error_handler();
$this->assertEquals(@json_encode([$foo, $bar]), $res);
$this->assertEquals('null', $res);
}
public function testCanNormalizeReferences()
@@ -223,7 +223,7 @@ class NormalizerFormatterTest extends TestCase
restore_error_handler();
$this->assertEquals(@json_encode([$resource]), $res);
$this->assertEquals('null', $res);
}
public function testNormalizeHandleLargeArraysWithExactly1000Items()
@@ -330,66 +330,6 @@ class NormalizerFormatterTest extends TestCase
);
}
/**
* @param mixed $in Input
* @param mixed $expect Expected output
* @covers Monolog\Formatter\NormalizerFormatter::detectAndCleanUtf8
* @dataProvider providesDetectAndCleanUtf8
*/
public function testDetectAndCleanUtf8($in, $expect)
{
$formatter = new NormalizerFormatter();
$formatter->detectAndCleanUtf8($in);
$this->assertSame($expect, $in);
}
public function providesDetectAndCleanUtf8()
{
$obj = new \stdClass;
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],
];
}
/**
* @param int $code
* @param string $msg
* @dataProvider providesHandleJsonErrorFailure
*/
public function testHandleJsonErrorFailure($code, $msg)
{
$formatter = new NormalizerFormatter();
$reflMethod = new \ReflectionMethod($formatter, 'handleJsonError');
$reflMethod->setAccessible(true);
$this->expectException('RuntimeException');
$this->expectExceptionMessage($msg);
$reflMethod->invoke($formatter, $code, 'faked');
}
public function providesHandleJsonErrorFailure()
{
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()
{
try {

View File

@@ -48,6 +48,22 @@ EOF;
$this->assertEquals($expected, $this->generateScript());
}
public function testStylingMultiple()
{
$handler = new BrowserConsoleHandler();
$handler->setFormatter($this->getIdentityFormatter());
$handler->handle($this->getRecord(Logger::DEBUG, 'foo[[bar]]{color: red}[[baz]]{color: blue}'));
$expected = <<<EOF
(function (c) {if (c && c.groupCollapsed) {
c.log("%cfoo%cbar%c%cbaz%c", "font-weight: normal", "color: red", "font-weight: normal", "color: blue", "font-weight: normal");
}})(console);
EOF;
$this->assertEquals($expected, $this->generateScript());
}
public function testEscaping()
{
$handler = new BrowserConsoleHandler();

View File

@@ -0,0 +1,70 @@
<?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 UtilsTest extends \PHPUnit_Framework_TestCase
{
/**
* @param int $code
* @param string $msg
* @dataProvider providesHandleJsonErrorFailure
*/
public function testHandleJsonErrorFailure($code, $msg)
{
$this->expectException('RuntimeException', $msg);
Utils::handleJsonError($code, 'faked');
}
public function providesHandleJsonErrorFailure()
{
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'],
];
}
/**
* @param mixed $in Input
* @param mixed $expect Expected output
* @covers Monolog\Formatter\NormalizerFormatter::detectAndCleanUtf8
* @dataProvider providesDetectAndCleanUtf8
*/
public function testDetectAndCleanUtf8($in, $expect)
{
$reflMethod = new \ReflectionMethod(Utils::class, 'detectAndCleanUtf8');
$reflMethod->setAccessible(true);
$args = [&$in];
$reflMethod->invokeArgs(null, $args);
$this->assertSame($expect, $in);
}
public function providesDetectAndCleanUtf8()
{
$obj = new \stdClass;
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],
];
}
}