2022-10-24 23:44:05 -04:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* @license MIT
|
|
|
|
* Copyright 2022 Dustin Wilson, et al.
|
|
|
|
* See LICENSE and AUTHORS files for details
|
|
|
|
*/
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
2022-11-13 23:36:41 -05:00
|
|
|
namespace MensBeam\Foundation\Catcher\Test;
|
|
|
|
use MensBeam\Foundation\Catcher;
|
2022-10-30 22:51:27 -04:00
|
|
|
use MensBeam\Foundation\Catcher\{
|
2022-11-13 23:36:41 -05:00
|
|
|
Error,
|
2022-10-24 23:44:05 -04:00
|
|
|
HTMLHandler,
|
2022-11-13 23:36:41 -05:00
|
|
|
JSONHandler,
|
|
|
|
PlainTextHandler
|
2022-10-24 23:44:05 -04:00
|
|
|
};
|
2022-11-06 13:36:00 -05:00
|
|
|
use Eloquent\Phony\Phpunit\Phony;
|
2022-10-24 23:44:05 -04:00
|
|
|
|
2022-12-26 23:10:56 -05:00
|
|
|
|
2022-10-24 23:44:05 -04:00
|
|
|
class TestCatcher extends \PHPUnit\Framework\TestCase {
|
|
|
|
/**
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher::__construct
|
2022-10-24 23:44:05 -04:00
|
|
|
*
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher::getHandlers
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::pushHandler
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::register
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unregister
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\HTMLHandler::__construct
|
2022-10-24 23:44:05 -04:00
|
|
|
*/
|
|
|
|
public function testMethod___construct(): void {
|
|
|
|
$c = new Catcher();
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-12-09 07:56:46 -05:00
|
|
|
$this->assertSame(1, count($c->getHandlers()));
|
2022-10-26 23:22:30 -04:00
|
|
|
$this->assertSame(PlainTextHandler::class, $c->getHandlers()[0]::class);
|
2022-10-30 22:51:27 -04:00
|
|
|
$c->unregister();
|
2022-10-24 23:44:05 -04:00
|
|
|
|
|
|
|
$c = new Catcher(
|
|
|
|
new PlainTextHandler(),
|
|
|
|
new HTMLHandler(),
|
|
|
|
new JSONHandler()
|
|
|
|
);
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-10-30 22:51:27 -04:00
|
|
|
$this->assertSame('MensBeam\Foundation\Catcher', $c::class);
|
2022-12-09 07:56:46 -05:00
|
|
|
$this->assertSame(3, count($c->getHandlers()));
|
2022-10-26 23:22:30 -04:00
|
|
|
$h = $c->getHandlers();
|
|
|
|
$this->assertSame(PlainTextHandler::class, $h[0]::class);
|
|
|
|
$this->assertSame(HTMLHandler::class, $h[1]::class);
|
|
|
|
$this->assertSame(JSONHandler::class, $h[2]::class);
|
2022-10-30 22:51:27 -04:00
|
|
|
$c->unregister();
|
2022-10-24 23:44:05 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher::getLastThrowable
|
2022-10-24 23:44:05 -04:00
|
|
|
*
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::handleError
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::handleThrowable
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::pushHandler
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::register
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unregister
|
2022-11-13 23:36:41 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Error::__construct
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::__construct
|
2022-12-26 23:10:56 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::buildOutputArray
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::dispatch
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::handle
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\PlainTextHandler::dispatchCallback
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\PlainTextHandler::handleCallback
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::__construct
|
2022-12-26 23:10:56 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::getErrorType
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::getPrevious
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::getThrowable
|
2022-10-24 23:44:05 -04:00
|
|
|
*/
|
2022-10-30 22:51:27 -04:00
|
|
|
public function testMethod_getLastThrowable(): void {
|
|
|
|
$c = new Catcher(new PlainTextHandler([ 'silent' => true ]));
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-10-30 22:51:27 -04:00
|
|
|
trigger_error('Ook!', \E_USER_WARNING);
|
2022-12-09 07:56:46 -05:00
|
|
|
$this->assertSame(\E_USER_WARNING, $c->getLastThrowable()->getCode());
|
2022-10-30 22:51:27 -04:00
|
|
|
$c->unregister();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::pushHandler
|
|
|
|
*
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::register
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unregister
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::__construct
|
|
|
|
*/
|
|
|
|
public function testMethod_pushHandler(): void {
|
2022-10-26 23:22:30 -04:00
|
|
|
$e = null;
|
|
|
|
set_error_handler(function($errno) use (&$e) {
|
|
|
|
$e = $errno;
|
2022-10-24 23:44:05 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
$h = new PlainTextHandler();
|
|
|
|
$c = new Catcher($h, $h);
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-10-30 22:51:27 -04:00
|
|
|
$c->unregister();
|
2022-12-09 07:56:46 -05:00
|
|
|
$this->assertSame(\E_USER_WARNING, $e);
|
2022-10-30 22:51:27 -04:00
|
|
|
$e = null;
|
2022-10-24 23:44:05 -04:00
|
|
|
|
2022-10-30 22:51:27 -04:00
|
|
|
$c = new Catcher();
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-10-30 22:51:27 -04:00
|
|
|
$c->unregister();
|
|
|
|
$c->pushHandler($h, $h);
|
2022-12-09 07:56:46 -05:00
|
|
|
$this->assertSame(\E_USER_WARNING, $e);
|
2022-10-30 22:51:27 -04:00
|
|
|
|
|
|
|
restore_error_handler();
|
|
|
|
|
|
|
|
$c = new Catcher();
|
|
|
|
$c->unregister();
|
|
|
|
|
|
|
|
$e = null;
|
|
|
|
try {
|
|
|
|
$c->pushHandler();
|
|
|
|
} catch (\Throwable $t) {
|
|
|
|
$e = $t::class;
|
|
|
|
} finally {
|
|
|
|
$this->assertSame(\ArgumentCountError::class, $e);
|
|
|
|
}
|
2022-10-24 23:44:05 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher::popHandler
|
2022-10-24 23:44:05 -04:00
|
|
|
*
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::pushHandler
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::register
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unregister
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\HTMLHandler::__construct
|
2022-10-24 23:44:05 -04:00
|
|
|
*/
|
2022-10-30 22:51:27 -04:00
|
|
|
public function testMethod_popHandler(): void {
|
|
|
|
$h = [
|
|
|
|
new HTMLHandler(),
|
2022-10-24 23:44:05 -04:00
|
|
|
new PlainTextHandler(),
|
2022-10-30 22:51:27 -04:00
|
|
|
new JSONHandler()
|
|
|
|
];
|
|
|
|
$c = new Catcher(...$h);
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-10-30 22:51:27 -04:00
|
|
|
$hh = $c->popHandler();
|
|
|
|
$this->assertSame($h[2], $hh);
|
|
|
|
$hh = $c->popHandler();
|
|
|
|
$this->assertSame($h[1], $hh);
|
2022-10-24 23:44:05 -04:00
|
|
|
|
2022-10-26 23:22:30 -04:00
|
|
|
$e = null;
|
2022-10-24 23:44:05 -04:00
|
|
|
try {
|
2022-10-30 22:51:27 -04:00
|
|
|
$c->popHandler();
|
2022-10-26 23:22:30 -04:00
|
|
|
} catch (\Throwable $t) {
|
|
|
|
$e = $t::class;
|
2022-10-24 23:44:05 -04:00
|
|
|
} finally {
|
2022-10-30 22:51:27 -04:00
|
|
|
$c->unregister();
|
2022-10-26 23:22:30 -04:00
|
|
|
$this->assertSame(\Exception::class, $e);
|
2022-10-24 23:44:05 -04:00
|
|
|
}
|
|
|
|
}
|
2022-10-26 23:22:30 -04:00
|
|
|
|
|
|
|
/**
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher::isRegistered
|
|
|
|
*
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::pushHandler
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::register
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unregister
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::__construct
|
|
|
|
*/
|
|
|
|
public function testMethod_register(): void {
|
|
|
|
$c = new Catcher();
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-10-30 22:51:27 -04:00
|
|
|
$this->assertTrue($c->isRegistered());
|
|
|
|
$this->assertFalse($c->register());
|
|
|
|
$c->unregister();
|
|
|
|
$this->assertFalse($c->isRegistered());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::setHandlers
|
2022-10-26 23:22:30 -04:00
|
|
|
*
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::getHandlers
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::pushHandler
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::register
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unregister
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::__construct
|
2022-10-26 23:22:30 -04:00
|
|
|
*/
|
|
|
|
public function testMethod_setHandlers(): void {
|
|
|
|
$c = new Catcher();
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-10-26 23:22:30 -04:00
|
|
|
$c->setHandlers(new PlainTextHandler());
|
|
|
|
$h = $c->getHandlers();
|
2022-12-09 07:56:46 -05:00
|
|
|
$this->assertSame(1, count($h));
|
2022-10-26 23:22:30 -04:00
|
|
|
$this->assertSame(PlainTextHandler::class, $h[0]::class);
|
2022-10-30 22:51:27 -04:00
|
|
|
$c->unregister();
|
2022-10-26 23:22:30 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher::shiftHandler
|
2022-10-26 23:22:30 -04:00
|
|
|
*
|
2022-10-30 22:51:27 -04:00
|
|
|
* @covers \MensBeam\Foundation\Catcher::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::pushHandler
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::register
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unregister
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\HTMLHandler::__construct
|
|
|
|
*/
|
|
|
|
public function testMethod_shiftHandler(): void {
|
|
|
|
$h = [
|
|
|
|
new HTMLHandler(),
|
|
|
|
new PlainTextHandler(),
|
|
|
|
new JSONHandler()
|
|
|
|
];
|
|
|
|
$c = new Catcher(...$h);
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-10-30 22:51:27 -04:00
|
|
|
$c->unregister();
|
|
|
|
$hh = $c->shiftHandler();
|
|
|
|
$this->assertSame($h[0], $hh);
|
|
|
|
$hh = $c->shiftHandler();
|
|
|
|
$this->assertSame($h[1], $hh);
|
|
|
|
|
|
|
|
$e = null;
|
|
|
|
try {
|
|
|
|
$c->shiftHandler();
|
|
|
|
} catch (\Throwable $t) {
|
|
|
|
$e = $t::class;
|
|
|
|
} finally {
|
|
|
|
$this->assertSame(\Exception::class, $e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unregister
|
|
|
|
*
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::pushHandler
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::register
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::__construct
|
|
|
|
*/
|
|
|
|
public function testMethod_unregister(): void {
|
|
|
|
$c = new Catcher();
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-10-30 22:51:27 -04:00
|
|
|
$c->unregister();
|
|
|
|
$this->assertFalse($c->unregister());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unshiftHandler
|
|
|
|
*
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::getHandlers
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::pushHandler
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::register
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unregister
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\HTMLHandler::__construct
|
2022-10-26 23:22:30 -04:00
|
|
|
*/
|
|
|
|
public function testMethod_unshiftHandler(): void {
|
|
|
|
$c = new Catcher(new PlainTextHandler());
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-10-26 23:22:30 -04:00
|
|
|
$c->unshiftHandler(new JSONHandler(), new HTMLHandler(), new PlainTextHandler());
|
|
|
|
$h = $c->getHandlers();
|
2022-12-09 07:56:46 -05:00
|
|
|
$this->assertSame(4, count($h));
|
2022-10-26 23:22:30 -04:00
|
|
|
$this->assertSame(JSONHandler::class, $h[0]::class);
|
|
|
|
$this->assertSame(HTMLHandler::class, $h[1]::class);
|
|
|
|
$this->assertSame(PlainTextHandler::class, $h[2]::class);
|
|
|
|
$this->assertSame(PlainTextHandler::class, $h[3]::class);
|
|
|
|
|
|
|
|
$e = null;
|
|
|
|
set_error_handler(function($errno) use (&$e) {
|
|
|
|
$e = $errno;
|
|
|
|
});
|
|
|
|
|
|
|
|
$c->unshiftHandler($h[0]);
|
2022-12-09 07:56:46 -05:00
|
|
|
$this->assertSame(\E_USER_WARNING, $e);
|
2022-10-30 22:51:27 -04:00
|
|
|
$e = null;
|
|
|
|
$h = new PlainTextHandler();
|
|
|
|
$c->unshiftHandler($h, $h);
|
2022-12-09 07:56:46 -05:00
|
|
|
$this->assertSame(\E_USER_WARNING, $e);
|
2022-10-26 23:22:30 -04:00
|
|
|
|
|
|
|
restore_error_handler();
|
2022-10-30 22:51:27 -04:00
|
|
|
$c->unregister();
|
|
|
|
|
|
|
|
$c = new Catcher();
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-10-30 22:51:27 -04:00
|
|
|
$c->unregister();
|
|
|
|
|
|
|
|
$e = null;
|
|
|
|
try {
|
|
|
|
$c->unshiftHandler();
|
|
|
|
} catch (\Throwable $t) {
|
|
|
|
$e = $t::class;
|
|
|
|
} finally {
|
|
|
|
$this->assertSame(\ArgumentCountError::class, $e);
|
|
|
|
}
|
2022-10-26 23:22:30 -04:00
|
|
|
}
|
2022-10-30 22:51:27 -04:00
|
|
|
|
|
|
|
/**
|
2022-11-06 13:36:00 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher::handleError
|
2022-10-30 22:51:27 -04:00
|
|
|
*
|
2022-11-06 13:36:00 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::getLastThrowable
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::handleThrowable
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::pushHandler
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::register
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unregister
|
2022-11-13 23:36:41 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Error::__construct
|
2022-11-06 13:36:00 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::__construct
|
2022-12-26 23:10:56 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::buildOutputArray
|
2022-11-06 13:36:00 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::dispatch
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::handle
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\PlainTextHandler::dispatchCallback
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\PlainTextHandler::handleCallback
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::__construct
|
2022-12-26 23:10:56 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::getErrorType
|
2022-11-06 13:36:00 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::getPrevious
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::getThrowable
|
2022-10-30 22:51:27 -04:00
|
|
|
*/
|
2022-11-06 13:36:00 -05:00
|
|
|
public function testMethod_handleError(): void {
|
2022-10-30 22:51:27 -04:00
|
|
|
$c = new Catcher(new PlainTextHandler([ 'silent' => true ]));
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-11-06 13:36:00 -05:00
|
|
|
|
|
|
|
trigger_error('Ook!', \E_USER_NOTICE);
|
|
|
|
$t = $c->getLastThrowable();
|
|
|
|
$this->assertSame(Error::class, $t::class);
|
|
|
|
$this->assertSame(\E_USER_NOTICE, $t->getCode());
|
|
|
|
|
|
|
|
trigger_error('Ook!', \E_USER_DEPRECATED);
|
|
|
|
$t = $c->getLastThrowable();
|
|
|
|
$this->assertSame(Error::class, $t::class);
|
|
|
|
$this->assertSame(\E_USER_DEPRECATED, $t->getCode());
|
|
|
|
|
2022-10-30 22:51:27 -04:00
|
|
|
trigger_error('Ook!', \E_USER_WARNING);
|
2022-11-06 13:36:00 -05:00
|
|
|
$t = $c->getLastThrowable();
|
|
|
|
$this->assertSame(Error::class, $t::class);
|
|
|
|
$this->assertSame(\E_USER_WARNING, $t->getCode());
|
|
|
|
|
|
|
|
trigger_error('Ook!', \E_USER_ERROR);
|
|
|
|
$t = $c->getLastThrowable();
|
|
|
|
$this->assertSame(Error::class, $t::class);
|
|
|
|
$this->assertSame(\E_USER_ERROR, $t->getCode());
|
|
|
|
|
|
|
|
$er = error_reporting();
|
|
|
|
error_reporting(0);
|
|
|
|
trigger_error('Ook!', \E_USER_ERROR);
|
|
|
|
error_reporting($er);
|
|
|
|
|
|
|
|
$c->unregister();
|
2022-11-13 23:36:41 -05:00
|
|
|
|
|
|
|
$h1 = Phony::partialMock(PlainTextHandler::class, [ [ 'silent' => true ] ]);
|
|
|
|
$h2 = Phony::partialMock(HTMLHandler::class, [ [ 'silent' => true ] ]);
|
|
|
|
$h3 = Phony::partialMock(JSONHandler::class, [ [ 'silent' => true ] ]);
|
|
|
|
|
|
|
|
$h = Phony::partialMock(Catcher::class, [
|
|
|
|
$h1->get(),
|
|
|
|
$h2->get(),
|
|
|
|
$h3->get()
|
|
|
|
]);
|
|
|
|
$c = $h->get();
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-11-13 23:36:41 -05:00
|
|
|
|
|
|
|
trigger_error('Ook!', \E_USER_ERROR);
|
|
|
|
|
|
|
|
$h1->dispatch->called();
|
|
|
|
$h2->dispatch->called();
|
|
|
|
$h3->dispatch->called();
|
|
|
|
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->throwErrors = true;
|
2023-01-11 00:32:43 -05:00
|
|
|
try {
|
|
|
|
trigger_error('Ook!', \E_USER_WARNING);
|
|
|
|
} catch (\Throwable $t) {
|
|
|
|
$this->assertInstanceOf(Error::class, $t);
|
|
|
|
$this->assertSame(\E_USER_WARNING, $t->getCode());
|
|
|
|
}
|
|
|
|
|
2022-12-18 00:18:29 -05:00
|
|
|
try {
|
|
|
|
trigger_error('Ook!', \E_USER_ERROR);
|
|
|
|
} catch (\Throwable $t) {
|
|
|
|
$this->assertInstanceOf(Error::class, $t);
|
|
|
|
$this->assertSame(\E_USER_ERROR, $t->getCode());
|
|
|
|
}
|
|
|
|
|
2022-11-13 23:36:41 -05:00
|
|
|
$c->unregister();
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->throwErrors = false;
|
2022-11-06 13:36:00 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::handleThrowable
|
|
|
|
*
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::getLastThrowable
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::handleError
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::pushHandler
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::register
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unregister
|
2022-11-13 23:36:41 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Error::__construct
|
2022-11-06 13:36:00 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::__construct
|
2022-12-26 23:10:56 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::buildOutputArray
|
2022-11-06 13:36:00 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::dispatch
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::handle
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\PlainTextHandler::dispatchCallback
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\PlainTextHandler::handleCallback
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::getPrevious
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::getThrowable
|
|
|
|
*/
|
|
|
|
public function testMethod_handleThrowable(): void {
|
|
|
|
$c = new Catcher(new PlainTextHandler([ 'silent' => true, 'forceBreak' => true ]));
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-11-06 13:36:00 -05:00
|
|
|
trigger_error('Ook!', \E_USER_ERROR);
|
|
|
|
$t = $c->getLastThrowable();
|
|
|
|
$this->assertSame(Error::class, $t::class);
|
|
|
|
$this->assertSame(\E_USER_ERROR, $t->getCode());
|
|
|
|
$c->unregister();
|
|
|
|
|
|
|
|
$h = Phony::partialMock(Catcher::class, [ new PlainTextHandler([ 'silent' => true ]) ]);
|
|
|
|
$h->exit->returns();
|
|
|
|
$c = $h->get();
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = false;
|
|
|
|
$c->throwErrors = false;
|
|
|
|
|
2022-11-06 13:36:00 -05:00
|
|
|
trigger_error('Ook!', \E_USER_ERROR);
|
|
|
|
$t = $c->getLastThrowable();
|
|
|
|
$this->assertSame(Error::class, $t::class);
|
|
|
|
$this->assertSame(\E_USER_ERROR, $t->getCode());
|
|
|
|
$c->unregister();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::handleShutdown
|
|
|
|
*
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::getLastError
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::handleError
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::handleThrowable
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::pushHandler
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::register
|
|
|
|
* @covers \MensBeam\Foundation\Catcher::unregister
|
2022-11-13 23:36:41 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Error::__construct
|
2022-11-06 13:36:00 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::__construct
|
2022-12-26 23:10:56 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::buildOutputArray
|
2022-11-06 13:36:00 -05:00
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::dispatch
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\Handler::handle
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\PlainTextHandler::dispatchCallback
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\PlainTextHandler::handleCallback
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::__construct
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::getPrevious
|
|
|
|
* @covers \MensBeam\Foundation\Catcher\ThrowableController::getThrowable
|
|
|
|
*/
|
|
|
|
public function testMethod_handleShutdown(): void {
|
|
|
|
$c = new Catcher();
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-11-06 13:36:00 -05:00
|
|
|
$c->handleShutdown();
|
|
|
|
$p = new \ReflectionProperty($c, 'isShuttingDown');
|
|
|
|
$p->setAccessible(true);
|
|
|
|
$this->assertTrue($p->getValue($c));
|
|
|
|
$c->unregister();
|
|
|
|
|
|
|
|
$c = new Catcher();
|
2022-12-18 00:18:29 -05:00
|
|
|
$c->preventExit = true;
|
|
|
|
$c->throwErrors = false;
|
2022-11-06 13:36:00 -05:00
|
|
|
$c->unregister();
|
|
|
|
$c->handleShutdown();
|
|
|
|
$p = new \ReflectionProperty($c, 'isShuttingDown');
|
|
|
|
$p->setAccessible(true);
|
|
|
|
$this->assertFalse($p->getValue($c));
|
|
|
|
|
|
|
|
$h = Phony::partialMock(Catcher::class, [ new PlainTextHandler([ 'silent' => true ]) ]);
|
|
|
|
$h->getLastError->returns([
|
|
|
|
'type' => \E_ERROR,
|
|
|
|
'message' => 'Ook!',
|
|
|
|
'file' => '/dev/null',
|
|
|
|
'line' => 2112
|
|
|
|
]);
|
|
|
|
$c = $h->get();
|
|
|
|
$c->handleShutdown();
|
|
|
|
$h->handleError->called();
|
|
|
|
$h->handleThrowable->called();
|
|
|
|
$c->unregister();
|
|
|
|
}
|
2022-10-24 23:44:05 -04:00
|
|
|
}
|