diff --git a/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php b/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php index c632849e53..8e835d8beb 100644 --- a/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php +++ b/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php @@ -19,6 +19,7 @@ namespace Symfony\Component\ClassLoader; class ClassCollectionLoader { private static $loaded; + private static $useTokenizer = true; /** * Loads a list of classes and caches them in one big file. @@ -125,7 +126,11 @@ class ClassCollectionLoader */ public static function fixNamespaceDeclarations($source) { - if (!function_exists('token_get_all')) { + if (!function_exists('token_get_all') || !self::$useTokenizer) { + if (preg_match('/namespace(.*?)\s*;/', $source)) { + $source = preg_replace('/namespace(.*?)(\s*);/', "namespace$1$2\n{", $source)."}\n"; + } + return $source; } @@ -219,4 +224,12 @@ class ClassCollectionLoader return $output; } + + /** + * This method is only useful for testing. + */ + public static function enableTokenizer($bool) + { + self::$useTokenizer = (Boolean) $bool; + } } diff --git a/tests/Symfony/Tests/Component/ClassLoader/ClassCollectionLoaderTest.php b/tests/Symfony/Tests/Component/ClassLoader/ClassCollectionLoaderTest.php index ed0b7b96fa..609928da16 100644 --- a/tests/Symfony/Tests/Component/ClassLoader/ClassCollectionLoaderTest.php +++ b/tests/Symfony/Tests/Component/ClassLoader/ClassCollectionLoaderTest.php @@ -15,53 +15,34 @@ use Symfony\Component\ClassLoader\ClassCollectionLoader; class ClassCollectionLoaderTest extends \PHPUnit_Framework_TestCase { - public function testFixNamespaceDeclarations() + /** + * @dataProvider getFixNamespaceDeclarationsData + */ + public function testFixNamespaceDeclarations($source, $expected) { - $source = <<assertEquals('assertEquals('assertEquals($expected, ClassCollectionLoader::fixNamespaceDeclarations($source)); + public function getFixNamespaceDeclarationsData() + { + return array( + array("namespace;\nclass Foo {}\n", "namespace\n{\nclass Foo {}\n}\n"), + array("namespace Foo;\nclass Foo {}\n", "namespace Foo\n{\nclass Foo {}\n}\n"), + array("namespace Bar ;\nclass Foo {}\n", "namespace Bar \n{\nclass Foo {}\n}\n"), + array("namespace Foo\Bar;\nclass Foo {}\n", "namespace Foo\Bar\n{\nclass Foo {}\n}\n"), + array("namespace Foo\Bar\Bar\n{\nclass Foo {}\n}\n", "namespace Foo\Bar\Bar\n{\nclass Foo {}\n}\n"), + array("namespace\n{\nclass Foo {}\n}\n", "namespace\n{\nclass Foo {}\n}\n"), + ); } /**