Chris@13: assertInstanceOf('Psy\Exception\Exception', $e); Chris@13: $this->assertInstanceOf('ErrorException', $e); Chris@13: $this->assertInstanceOf('Psy\Exception\ErrorException', $e); Chris@13: } Chris@13: Chris@13: public function testMessage() Chris@13: { Chris@13: $e = new ErrorException('foo'); Chris@13: Chris@13: $this->assertContains('foo', $e->getMessage()); Chris@13: $this->assertSame('foo', $e->getRawMessage()); Chris@13: } Chris@13: Chris@13: /** Chris@13: * @dataProvider getLevels Chris@13: */ Chris@13: public function testErrorLevels($level, $type) Chris@13: { Chris@13: $e = new ErrorException('foo', 0, $level); Chris@13: $this->assertContains('PHP ' . $type, $e->getMessage()); Chris@13: } Chris@13: Chris@13: /** Chris@13: * @dataProvider getLevels Chris@13: */ Chris@13: public function testThrowException($level, $type) Chris@13: { Chris@13: try { Chris@13: ErrorException::throwException($level, '{whot}', '{file}', '13'); Chris@13: } catch (ErrorException $e) { Chris@13: $this->assertContains('PHP ' . $type, $e->getMessage()); Chris@13: $this->assertContains('{whot}', $e->getMessage()); Chris@13: $this->assertContains('in {file}', $e->getMessage()); Chris@13: $this->assertContains('on line 13', $e->getMessage()); Chris@13: } Chris@13: } Chris@13: Chris@13: public function getLevels() Chris@13: { Chris@13: return [ Chris@16: [E_WARNING, 'Warning'], Chris@16: [E_CORE_WARNING, 'Warning'], Chris@16: [E_COMPILE_WARNING, 'Warning'], Chris@16: [E_USER_WARNING, 'Warning'], Chris@16: [E_STRICT, 'Strict error'], Chris@16: [E_DEPRECATED, 'Deprecated'], Chris@16: [E_USER_DEPRECATED, 'Deprecated'], Chris@16: [E_RECOVERABLE_ERROR, 'Recoverable fatal error'], Chris@16: [0, 'Error'], Chris@13: ]; Chris@13: } Chris@13: Chris@13: /** Chris@13: * @dataProvider getUserLevels Chris@13: */ Chris@13: public function testThrowExceptionAsErrorHandler($level, $type) Chris@13: { Chris@17: \set_error_handler(['Psy\Exception\ErrorException', 'throwException']); Chris@13: try { Chris@17: \trigger_error('{whot}', $level); Chris@13: } catch (ErrorException $e) { Chris@13: $this->assertContains('PHP ' . $type, $e->getMessage()); Chris@13: $this->assertContains('{whot}', $e->getMessage()); Chris@13: } Chris@17: \restore_error_handler(); Chris@13: } Chris@13: Chris@13: public function getUserLevels() Chris@13: { Chris@13: return [ Chris@13: [E_USER_ERROR, 'Error'], Chris@13: [E_USER_WARNING, 'Warning'], Chris@13: [E_USER_NOTICE, 'Notice'], Chris@13: [E_USER_DEPRECATED, 'Deprecated'], Chris@13: ]; Chris@13: } Chris@13: Chris@13: public function testIgnoreExecutionLoopFilename() Chris@13: { Chris@13: $e = new ErrorException('{{message}}', 0, 1, '/fake/path/to/Psy/ExecutionLoop.php'); Chris@13: $this->assertEmpty($e->getFile()); Chris@13: Chris@13: $e = new ErrorException('{{message}}', 0, 1, 'c:\fake\path\to\Psy\ExecutionLoop.php'); Chris@13: $this->assertEmpty($e->getFile()); Chris@13: Chris@13: $e = new ErrorException('{{message}}', 0, 1, '/fake/path/to/Psy/File.php'); Chris@13: $this->assertNotEmpty($e->getFile()); Chris@13: } Chris@16: Chris@16: public function testFromError() Chris@16: { Chris@17: if (\version_compare(PHP_VERSION, '7.0.0', '<')) { Chris@16: $this->markTestSkipped(); Chris@16: } Chris@16: Chris@16: $error = new \Error('{{message}}', 0); Chris@16: $exception = ErrorException::fromError($error); Chris@16: Chris@16: $this->assertContains('PHP Error: {{message}}', $exception->getMessage()); Chris@16: $this->assertEquals(0, $exception->getCode()); Chris@16: $this->assertEquals($error->getFile(), $exception->getFile()); Chris@16: $this->assertSame($exception->getPrevious(), $error); Chris@16: } Chris@13: }