From 52faa007ae173913bd9899b1d0d5e9b14d7fdbfd Mon Sep 17 00:00:00 2001 From: Maxime STEINHAUSSER Date: Fri, 28 Oct 2016 10:44:52 +0200 Subject: [PATCH] Fix base DataCollector throws warning on unsupported scheme strings --- .../DataCollector/DataCollector.php | 2 +- .../Tests/DataCollector/DataCollectorTest.php | 49 +++++++++++++++++++ .../DataCollector/CloneVarDataCollector.php | 41 ++++++++++++++++ 3 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 src/Symfony/Component/HttpKernel/Tests/DataCollector/DataCollectorTest.php create mode 100644 src/Symfony/Component/HttpKernel/Tests/Fixtures/DataCollector/CloneVarDataCollector.php diff --git a/src/Symfony/Component/HttpKernel/DataCollector/DataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/DataCollector.php index 904baeedbe..1f8538a9f2 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/DataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/DataCollector.php @@ -130,7 +130,7 @@ abstract class DataCollector implements DataCollectorInterface, \Serializable return new ClassStub($var); } } - if (false !== strpos($var, DIRECTORY_SEPARATOR) && file_exists($var)) { + if (false !== strpos($var, DIRECTORY_SEPARATOR) && false === strpos($var, '://') && file_exists($var)) { return new LinkStub($var); } } diff --git a/src/Symfony/Component/HttpKernel/Tests/DataCollector/DataCollectorTest.php b/src/Symfony/Component/HttpKernel/Tests/DataCollector/DataCollectorTest.php new file mode 100644 index 0000000000..a7fb447ad6 --- /dev/null +++ b/src/Symfony/Component/HttpKernel/Tests/DataCollector/DataCollectorTest.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Tests\DataCollector; + +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Tests\Fixtures\DataCollector\CloneVarDataCollector; +use Symfony\Component\VarDumper\Cloner\Stub; +use Symfony\Component\VarDumper\Cloner\VarCloner; +use Symfony\Component\VarDumper\Dumper\CliDumper; + +class DataCollectorTest extends \PHPUnit_Framework_TestCase +{ + public function testCloneVarStringWithScheme() + { + $c = new CloneVarDataCollector('scheme://foo'); + $c->collect(new Request(), new Response()); + $cloner = new VarCloner(); + + $this->assertEquals($cloner->cloneVar('scheme://foo'), $c->getData()); + } + + public function testCloneVarExistingFilePath() + { + $c = new CloneVarDataCollector($filePath = tempnam(sys_get_temp_dir(), 'clone_var_data_collector_')); + $c->collect(new Request(), new Response()); + + $data = $c->getData(); + $this->assertInstanceOf(Stub::class, $data->getRawData()[0][0]); + $this->assertDumpEquals("\"$filePath\"", $data); + } + + private function assertDumpEquals($dump, $data, $message = '') + { + $dumper = new CliDumper(); + $dumper->setColors(false); + + $this->assertSame(rtrim($dump), rtrim($dumper->dump($data, true)), $message); + } +} diff --git a/src/Symfony/Component/HttpKernel/Tests/Fixtures/DataCollector/CloneVarDataCollector.php b/src/Symfony/Component/HttpKernel/Tests/Fixtures/DataCollector/CloneVarDataCollector.php new file mode 100644 index 0000000000..867ccdce57 --- /dev/null +++ b/src/Symfony/Component/HttpKernel/Tests/Fixtures/DataCollector/CloneVarDataCollector.php @@ -0,0 +1,41 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Tests\Fixtures\DataCollector; + +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\DataCollector\DataCollector; + +class CloneVarDataCollector extends DataCollector +{ + private $varToClone; + + public function __construct($varToClone) + { + $this->varToClone = $varToClone; + } + + public function collect(Request $request, Response $response, \Exception $exception = null) + { + $this->data = $this->cloneVar($this->varToClone); + } + + public function getData() + { + return $this->data; + } + + public function getName() + { + return 'clone_var'; + } +}