mirror of
https://github.com/symfony/debug.git
synced 2026-03-25 17:52:07 +01:00
* 2.6: Added 'default' color [HttpFoundation] Reload the session after regenerating its id [HttpFoundation] Add a test case to confirm a bug in session migration [2.6] Static Code Analysis for Components and Bundles [Finder] Command::addAtIndex() fails with Command instance argument [DependencyInjection] Freeze also FrozenParameterBag::remove [Twig][Bridge] replaced `extends` with `use` in bootstrap_3_horizontal_layout.html.twig fix CS fixed CS Add a way to reset the singleton [Security] allow to use `method` in XML configs Remove duplicate example Remove var not used due to returning early (introduced in 8982c32) Enhance hhvm test skip message
201 lines
8.3 KiB
PHP
201 lines
8.3 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Symfony\Component\Debug\Tests\FatalErrorHandler;
|
|
|
|
use Symfony\Component\ClassLoader\ClassLoader as SymfonyClassLoader;
|
|
use Symfony\Component\ClassLoader\UniversalClassLoader as SymfonyUniversalClassLoader;
|
|
use Symfony\Component\Debug\Exception\FatalErrorException;
|
|
use Symfony\Component\Debug\FatalErrorHandler\ClassNotFoundFatalErrorHandler;
|
|
use Symfony\Component\Debug\DebugClassLoader;
|
|
use Composer\Autoload\ClassLoader as ComposerClassLoader;
|
|
|
|
class ClassNotFoundFatalErrorHandlerTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
public static function setUpBeforeClass()
|
|
{
|
|
foreach (spl_autoload_functions() as $function) {
|
|
if (!is_array($function)) {
|
|
continue;
|
|
}
|
|
|
|
// get class loaders wrapped by DebugClassLoader
|
|
if ($function[0] instanceof DebugClassLoader) {
|
|
$function = $function[0]->getClassLoader();
|
|
}
|
|
|
|
if ($function[0] instanceof ComposerClassLoader) {
|
|
$function[0]->add('Symfony_Component_Debug_Tests_Fixtures', dirname(dirname(dirname(dirname(dirname(__DIR__))))));
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @dataProvider provideClassNotFoundData
|
|
*/
|
|
public function testHandleClassNotFound($error, $translatedMessage, $autoloader = null)
|
|
{
|
|
if ($autoloader) {
|
|
// Unregister all autoloaders to ensure the custom provided
|
|
// autoloader is the only one to be used during the test run.
|
|
$autoloaders = spl_autoload_functions();
|
|
array_map('spl_autoload_unregister', $autoloaders);
|
|
spl_autoload_register($autoloader);
|
|
}
|
|
|
|
$handler = new ClassNotFoundFatalErrorHandler();
|
|
|
|
$exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
|
|
|
|
if ($autoloader) {
|
|
spl_autoload_unregister($autoloader);
|
|
array_map('spl_autoload_register', $autoloaders);
|
|
}
|
|
|
|
$this->assertInstanceOf('Symfony\Component\Debug\Exception\ClassNotFoundException', $exception);
|
|
$this->assertSame($translatedMessage, $exception->getMessage());
|
|
$this->assertSame($error['type'], $exception->getSeverity());
|
|
$this->assertSame($error['file'], $exception->getFile());
|
|
$this->assertSame($error['line'], $exception->getLine());
|
|
}
|
|
|
|
/**
|
|
* @group legacy
|
|
*/
|
|
public function testLegacyHandleClassNotFound()
|
|
{
|
|
$prefixes = array('Symfony\Component\Debug\Exception\\' => realpath(__DIR__.'/../../Exception'));
|
|
$symfonyUniversalClassLoader = new SymfonyUniversalClassLoader();
|
|
$symfonyUniversalClassLoader->registerPrefixes($prefixes);
|
|
|
|
$this->testHandleClassNotFound(
|
|
array(
|
|
'type' => 1,
|
|
'line' => 12,
|
|
'file' => 'foo.php',
|
|
'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
|
|
),
|
|
"Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
|
|
array($symfonyUniversalClassLoader, 'loadClass')
|
|
);
|
|
}
|
|
|
|
public function provideClassNotFoundData()
|
|
{
|
|
$prefixes = array('Symfony\Component\Debug\Exception\\' => realpath(__DIR__.'/../../Exception'));
|
|
|
|
$symfonyAutoloader = new SymfonyClassLoader();
|
|
$symfonyAutoloader->addPrefixes($prefixes);
|
|
|
|
$debugClassLoader = new DebugClassLoader(array($symfonyAutoloader, 'loadClass'));
|
|
|
|
return array(
|
|
array(
|
|
array(
|
|
'type' => 1,
|
|
'line' => 12,
|
|
'file' => 'foo.php',
|
|
'message' => 'Class \'WhizBangFactory\' not found',
|
|
),
|
|
"Attempted to load class \"WhizBangFactory\" from the global namespace.\nDid you forget a \"use\" statement?",
|
|
),
|
|
array(
|
|
array(
|
|
'type' => 1,
|
|
'line' => 12,
|
|
'file' => 'foo.php',
|
|
'message' => 'Class \'Foo\\Bar\\WhizBangFactory\' not found',
|
|
),
|
|
"Attempted to load class \"WhizBangFactory\" from namespace \"Foo\\Bar\".\nDid you forget a \"use\" statement for another namespace?",
|
|
),
|
|
array(
|
|
array(
|
|
'type' => 1,
|
|
'line' => 12,
|
|
'file' => 'foo.php',
|
|
'message' => 'Class \'UndefinedFunctionException\' not found',
|
|
),
|
|
"Attempted to load class \"UndefinedFunctionException\" from the global namespace.\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
|
|
),
|
|
array(
|
|
array(
|
|
'type' => 1,
|
|
'line' => 12,
|
|
'file' => 'foo.php',
|
|
'message' => 'Class \'PEARClass\' not found',
|
|
),
|
|
"Attempted to load class \"PEARClass\" from the global namespace.\nDid you forget a \"use\" statement for \"Symfony_Component_Debug_Tests_Fixtures_PEARClass\"?",
|
|
),
|
|
array(
|
|
array(
|
|
'type' => 1,
|
|
'line' => 12,
|
|
'file' => 'foo.php',
|
|
'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
|
|
),
|
|
"Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
|
|
),
|
|
array(
|
|
array(
|
|
'type' => 1,
|
|
'line' => 12,
|
|
'file' => 'foo.php',
|
|
'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
|
|
),
|
|
"Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
|
|
array($symfonyAutoloader, 'loadClass'),
|
|
),
|
|
array(
|
|
array(
|
|
'type' => 1,
|
|
'line' => 12,
|
|
'file' => 'foo.php',
|
|
'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
|
|
),
|
|
"Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\Bar\".\nDid you forget a \"use\" statement for \"Symfony\Component\Debug\Exception\UndefinedFunctionException\"?",
|
|
array($debugClassLoader, 'loadClass'),
|
|
),
|
|
array(
|
|
array(
|
|
'type' => 1,
|
|
'line' => 12,
|
|
'file' => 'foo.php',
|
|
'message' => 'Class \'Foo\\Bar\\UndefinedFunctionException\' not found',
|
|
),
|
|
"Attempted to load class \"UndefinedFunctionException\" from namespace \"Foo\\Bar\".\nDid you forget a \"use\" statement for another namespace?",
|
|
function ($className) { /* do nothing here */ },
|
|
),
|
|
);
|
|
}
|
|
|
|
public function testCannotRedeclareClass()
|
|
{
|
|
if (!file_exists(__DIR__.'/../FIXTURES2/REQUIREDTWICE.PHP')) {
|
|
$this->markTestSkipped('Can only be run on case insensitive filesystems');
|
|
}
|
|
|
|
require_once __DIR__.'/../FIXTURES2/REQUIREDTWICE.PHP';
|
|
|
|
$error = array(
|
|
'type' => 1,
|
|
'line' => 12,
|
|
'file' => 'foo.php',
|
|
'message' => 'Class \'Foo\\Bar\\RequiredTwice\' not found',
|
|
);
|
|
|
|
$handler = new ClassNotFoundFatalErrorHandler();
|
|
$exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
|
|
|
|
$this->assertInstanceOf('Symfony\Component\Debug\Exception\ClassNotFoundException', $exception);
|
|
}
|
|
}
|