+ /**
+ * @group legacy
+ * @expectedDeprecation The "Symfony\Component\HttpKernel\Kernel::getEnvParameters()" method is deprecated as of 3.3 and will be removed in 4.0. Use the %cenv()%c syntax to get the value of any environment variable from configuration files instead.
+ * @expectedDeprecation The support of special environment variables that start with SYMFONY__ (such as "SYMFONY__FOO__BAR") is deprecated as of 3.3 and will be removed in 4.0. Use the %cenv()%c syntax instead to get the value of environment variables in configuration files.
+ */
+ public function testSymfonyEnvironmentVariables()
+ {
+ $_SERVER['SYMFONY__FOO__BAR'] = 'baz';
+
+ $kernel = $this->getKernel();
+ $method = new \ReflectionMethod($kernel, 'getEnvParameters');
+ $method->setAccessible(true);
+
+ $envParameters = $method->invoke($kernel);
+ $this->assertSame('baz', $envParameters['foo.bar']);
+
+ unset($_SERVER['SYMFONY__FOO__BAR']);
+ }
+
+ public function testProjectDirExtension()
+ {
+ $kernel = new CustomProjectDirKernel();
+ $kernel->boot();
+
+ $this->assertSame('foo', $kernel->getProjectDir());
+ $this->assertSame('foo', $kernel->getContainer()->getParameter('kernel.project_dir'));
+ }
+
+ public function testKernelReset()
+ {
+ (new Filesystem())->remove(__DIR__.'/Fixtures/cache');
+
+ $kernel = new CustomProjectDirKernel();
+ $kernel->boot();
+
+ $containerClass = \get_class($kernel->getContainer());
+ $containerFile = (new \ReflectionClass($kernel->getContainer()))->getFileName();
+ unlink(__DIR__.'/Fixtures/cache/custom/FixturesCustomDebugProjectContainer.php.meta');
+
+ $kernel = new CustomProjectDirKernel();
+ $kernel->boot();
+
+ $this->assertInstanceOf($containerClass, $kernel->getContainer());
+ $this->assertFileExists($containerFile);
+ unlink(__DIR__.'/Fixtures/cache/custom/FixturesCustomDebugProjectContainer.php.meta');
+
+ $kernel = new CustomProjectDirKernel(function ($container) { $container->register('foo', 'stdClass')->setPublic(true); });
+ $kernel->boot();
+
+ $this->assertNotInstanceOf($containerClass, $kernel->getContainer());
+ $this->assertFileExists($containerFile);
+ $this->assertFileExists(\dirname($containerFile).'.legacy');
+ }
+
+ public function testKernelPass()
+ {
+ $kernel = new PassKernel();
+ $kernel->boot();
+
+ $this->assertTrue($kernel->getContainer()->getParameter('test.processed'));
+ }
+
+ public function testServicesResetter()
+ {
+ $httpKernelMock = $this->getMockBuilder(HttpKernelInterface::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $httpKernelMock
+ ->expects($this->exactly(2))
+ ->method('handle');
+
+ $kernel = new CustomProjectDirKernel(function ($container) {
+ $container->addCompilerPass(new ResettableServicePass());
+ $container->register('one', ResettableService::class)
+ ->setPublic(true)
+ ->addTag('kernel.reset', array('method' => 'reset'));
+ $container->register('services_resetter', ServicesResetter::class)->setPublic(true);
+ }, $httpKernelMock, 'resetting');
+
+ ResettableService::$counter = 0;
+
+ $request = new Request();
+
+ $kernel->handle($request);
+ $kernel->getContainer()->get('one');
+
+ $this->assertEquals(0, ResettableService::$counter);
+ $this->assertFalse($kernel->getContainer()->initialized('services_resetter'));
+
+ $kernel->handle($request);
+
+ $this->assertEquals(1, ResettableService::$counter);
+ }
+
+ /**
+ * @group time-sensitive
+ */
+ public function testKernelStartTimeIsResetWhileBootingAlreadyBootedKernel()
+ {
+ $kernel = $this->getKernelForTest(array('initializeBundles'), true);
+ $kernel->boot();
+ $preReBoot = $kernel->getStartTime();
+
+ sleep(3600); //Intentionally large value to detect if ClockMock ever breaks
+ $kernel->reboot(null);
+
+ $this->assertGreaterThan($preReBoot, $kernel->getStartTime());
+ }
+