123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- <?php
- /*
- * This file is part of Psy Shell.
- *
- * (c) 2012-2018 Justin Hileman
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Psy\Test\Exception;
- use Psy\Exception\ErrorException;
- class ErrorExceptionTest extends \PHPUnit\Framework\TestCase
- {
- public function testInstance()
- {
- $e = new ErrorException();
- $this->assertInstanceOf('Psy\Exception\Exception', $e);
- $this->assertInstanceOf('ErrorException', $e);
- $this->assertInstanceOf('Psy\Exception\ErrorException', $e);
- }
- public function testMessage()
- {
- $e = new ErrorException('foo');
- $this->assertContains('foo', $e->getMessage());
- $this->assertSame('foo', $e->getRawMessage());
- }
- /**
- * @dataProvider getLevels
- */
- public function testErrorLevels($level, $type)
- {
- $e = new ErrorException('foo', 0, $level);
- $this->assertContains('PHP ' . $type, $e->getMessage());
- }
- /**
- * @dataProvider getLevels
- */
- public function testThrowException($level, $type)
- {
- try {
- ErrorException::throwException($level, '{whot}', '{file}', '13');
- } catch (ErrorException $e) {
- $this->assertContains('PHP ' . $type, $e->getMessage());
- $this->assertContains('{whot}', $e->getMessage());
- $this->assertContains('in {file}', $e->getMessage());
- $this->assertContains('on line 13', $e->getMessage());
- }
- }
- public function getLevels()
- {
- return [
- [E_WARNING, 'Warning'],
- [E_CORE_WARNING, 'Warning'],
- [E_COMPILE_WARNING, 'Warning'],
- [E_USER_WARNING, 'Warning'],
- [E_STRICT, 'Strict error'],
- [E_DEPRECATED, 'Deprecated'],
- [E_USER_DEPRECATED, 'Deprecated'],
- [E_RECOVERABLE_ERROR, 'Recoverable fatal error'],
- [0, 'Error'],
- ];
- }
- /**
- * @dataProvider getUserLevels
- */
- public function testThrowExceptionAsErrorHandler($level, $type)
- {
- \set_error_handler(['Psy\Exception\ErrorException', 'throwException']);
- try {
- \trigger_error('{whot}', $level);
- } catch (ErrorException $e) {
- $this->assertContains('PHP ' . $type, $e->getMessage());
- $this->assertContains('{whot}', $e->getMessage());
- }
- \restore_error_handler();
- }
- public function getUserLevels()
- {
- return [
- [E_USER_ERROR, 'Error'],
- [E_USER_WARNING, 'Warning'],
- [E_USER_NOTICE, 'Notice'],
- [E_USER_DEPRECATED, 'Deprecated'],
- ];
- }
- public function testIgnoreExecutionLoopFilename()
- {
- $e = new ErrorException('{{message}}', 0, 1, '/fake/path/to/Psy/ExecutionLoop.php');
- $this->assertEmpty($e->getFile());
- $e = new ErrorException('{{message}}', 0, 1, 'c:\fake\path\to\Psy\ExecutionLoop.php');
- $this->assertEmpty($e->getFile());
- $e = new ErrorException('{{message}}', 0, 1, '/fake/path/to/Psy/File.php');
- $this->assertNotEmpty($e->getFile());
- }
- public function testFromError()
- {
- if (\version_compare(PHP_VERSION, '7.0.0', '<')) {
- $this->markTestSkipped();
- }
- $error = new \Error('{{message}}', 0);
- $exception = ErrorException::fromError($error);
- $this->assertContains('PHP Error: {{message}}', $exception->getMessage());
- $this->assertEquals(0, $exception->getCode());
- $this->assertEquals($error->getFile(), $exception->getFile());
- $this->assertSame($exception->getPrevious(), $error);
- }
- }
|