A Throwable catcher and error handling library for PHP
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.0 KiB

<?php
/**
* @license MIT
* Copyright 2022 Dustin Wilson, et al.
* See LICENSE and AUTHORS files for details
*/
declare(strict_types=1);
namespace MensBeam\Framework\TestCase;
use MensBeam\Framework\Catcher;
use MensBeam\Framework\Catcher\{
PlainTextHandler,
HTMLHandler,
JSONHandler
};
class TestCatcher extends \PHPUnit\Framework\TestCase {
/**
* @covers \MensBeam\Framework\Catcher::__construct()
*
* @covers \MensBeam\Framework\Catcher::getHandlers()
* @covers \MensBeam\Framework\Catcher::pushHandler()
* @covers \MensBeam\Framework\Catcher::__destruct()
* @covers \MensBeam\Framework\Catcher\Handler::__construct()
*/
public function testMethod___construct(): void {
$c = new Catcher();
$this->assertSame('MensBeam\Framework\Catcher', $c::class);
$this->assertEquals(1, count($c->getHandlers()));
$c->__destruct();
$c = new Catcher(
new PlainTextHandler(),
new HTMLHandler(),
new JSONHandler()
);
$this->assertSame('MensBeam\Framework\Catcher', $c::class);
$this->assertEquals(3, count($c->getHandlers()));
$c->__destruct();
}
/**
* @covers \MensBeam\Framework\Catcher::pushHandler()
*
* @covers \MensBeam\Framework\Catcher::__construct()
* @covers \MensBeam\Framework\Catcher::__destruct()
* @covers \MensBeam\Framework\Catcher\Handler::__construct()
*/
public function testMethod_pushHandler__warning(): void {
set_error_handler(function($errno) {
$this->assertEquals(\E_USER_WARNING, $errno);
});
$h = new PlainTextHandler();
$c = new Catcher($h, $h);
$c->__destruct();
restore_error_handler();
}
/**
* @covers \MensBeam\Framework\Catcher::removeHandler()
*
* @covers \MensBeam\Framework\Catcher::__construct()
* @covers \MensBeam\Framework\Catcher::__destruct()
* @covers \MensBeam\Framework\Catcher\Handler::__construct()
*/
public function testMethod_removeHandler(): void {
$h = new HTMLHandler();
$c = new Catcher(
new PlainTextHandler(),
$h
);
$this->assertEquals(2, count($c->getHandlers()));
$c->removeHandler($h);
$this->assertEquals(1, count($c->getHandlers()));
$c->__destruct();
}
/**
* @covers \MensBeam\Framework\Catcher::removeHandler()
*
* @covers \MensBeam\Framework\Catcher::__construct()
* @covers \MensBeam\Framework\Catcher::__destruct()
* @covers \MensBeam\Framework\Catcher\Handler::__construct()
*/
public function testMethod_removeHandler__exception(): void {
try {
$h = [
new PlainTextHandler(),
new HTMLHandler(),
];
$c = new Catcher(...$h);
$c->removeHandler(...$h);
} catch (\Exception $e) {
$this->assertSame(\Exception::class, $e::class);
} finally {
$c->__destruct();
}
}
}