mirror of
https://github.com/symfony/debug.git
synced 2026-03-27 18:52:18 +01:00
* 2.6: [2.6] add @group legacy [2.3] add @group legacy Conflicts: src/Symfony/Bridge/Doctrine/Tests/Validator/Constraints/LegacyUniqueEntityValidator2Dot4ApiTest.php src/Symfony/Bridge/Propel1/Tests/Form/ChoiceList/ModelChoiceListTest.php src/Symfony/Component/Form/Tests/Extension/Validator/Constraints/LegacyFormValidator2Dot4ApiTest.php src/Symfony/Component/Security/Core/Tests/Validator/Constraints/LegacyUserPasswordValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyAllValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyBlankValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyCallbackValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyCardSchemeValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyChoiceValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArray2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorArrayObject2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyCollectionValidatorCustomArrayObject2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorArray2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyCountValidatorCountable2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyCurrencyValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyDateTimeValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyDateValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyEmailValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyEqualToValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyExpressionValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyFalseValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorObject2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyFileValidatorPath2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanOrEqualValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyGreaterThanValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyIbanValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyIdenticalToValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyImageValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyIpValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyIsbnValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyIssnValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyLanguageValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyLengthValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanOrEqualValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyLessThanValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyLocaleValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyLuhnValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyNotBlankValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyNotEqualToValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyNotIdenticalToValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyNotNullValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyNullValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyRangeValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyRegexValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyTimeValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyTrueValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyTypeValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyUrlValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/Constraints/LegacyUuidValidator2Dot4ApiTest.php src/Symfony/Component/Validator/Tests/ValidatorBuilderTest.php
186 lines
7.7 KiB
PHP
186 lines
7.7 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;
|
|
|
|
class ClassNotFoundFatalErrorHandlerTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
/**
|
|
* @dataProvider provideClassNotFoundData
|
|
*/
|
|
public function testHandleClassNotFound($error, $translatedMessage)
|
|
{
|
|
$handler = new ClassNotFoundFatalErrorHandler();
|
|
|
|
$exception = $handler->handleError($error, new FatalErrorException('', 0, $error['type'], $error['file'], $error['line']));
|
|
|
|
$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
|
|
* @dataProvider provideLegacyClassNotFoundData
|
|
* @group legacy
|
|
*/
|
|
public function testLegacyHandleClassNotFound($error, $translatedMessage, $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']));
|
|
|
|
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());
|
|
}
|
|
|
|
public function provideClassNotFoundData()
|
|
{
|
|
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\"?",
|
|
),
|
|
);
|
|
}
|
|
|
|
public function provideLegacyClassNotFoundData()
|
|
{
|
|
$this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
|
|
|
|
$prefixes = array('Symfony\Component\Debug\Exception\\' => realpath(__DIR__.'/../../Exception'));
|
|
|
|
$symfonyAutoloader = new SymfonyClassLoader();
|
|
$symfonyAutoloader->addPrefixes($prefixes);
|
|
|
|
if (class_exists('Symfony\Component\ClassLoader\UniversalClassLoader')) {
|
|
$symfonyUniversalClassLoader = new SymfonyUniversalClassLoader();
|
|
$symfonyUniversalClassLoader->registerPrefixes($prefixes);
|
|
} else {
|
|
$symfonyUniversalClassLoader = $symfonyAutoloader;
|
|
}
|
|
|
|
return array(
|
|
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($symfonyUniversalClassLoader, '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__.'/../FIXTURES/REQUIREDTWICE.PHP')) {
|
|
$this->markTestSkipped('Can only be run on case insensitive filesystems');
|
|
}
|
|
|
|
require_once __DIR__.'/../FIXTURES/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);
|
|
}
|
|
}
|