|
14 | 14 | use PHPUnit\Framework\TestCase;
|
15 | 15 | use Psr\Container\ContainerInterface;
|
16 | 16 | use Symfony\Bundle\FrameworkBundle\Routing\Router;
|
| 17 | +use Symfony\Component\Config\FileLocator; |
17 | 18 | use Symfony\Component\Config\Loader\LoaderInterface;
|
| 19 | +use Symfony\Component\Config\ResourceCheckerConfigCache; |
| 20 | +use Symfony\Component\Config\ResourceCheckerConfigCacheFactory; |
18 | 21 | use Symfony\Component\DependencyInjection\Config\ContainerParametersResource;
|
| 22 | +use Symfony\Component\DependencyInjection\Config\ContainerParametersResourceChecker; |
19 | 23 | use Symfony\Component\DependencyInjection\Container;
|
20 | 24 | use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException;
|
21 | 25 | use Symfony\Component\DependencyInjection\Exception\RuntimeException;
|
| 26 | +use Symfony\Component\Routing\Loader\YamlFileLoader; |
22 | 27 | use Symfony\Component\Routing\Route;
|
23 | 28 | use Symfony\Component\Routing\RouteCollection;
|
24 | 29 |
|
@@ -503,6 +508,51 @@ public function getNonStringValues()
|
503 | 508 | return [[null], [false], [true], [new \stdClass()], [['foo', 'bar']], [[[]]]];
|
504 | 509 | }
|
505 | 510 |
|
| 511 | + /** |
| 512 | + * @dataProvider getContainerParameterForRoute |
| 513 | + */ |
| 514 | + public function testCacheValiditiyWithContainerParameters($parameter) |
| 515 | + { |
| 516 | + $cacheDir = sys_get_temp_dir().\DIRECTORY_SEPARATOR.uniqid('router_', true); |
| 517 | + |
| 518 | + try { |
| 519 | + $container = new Container(); |
| 520 | + $container->set('routing.loader', new YamlFileLoader(new FileLocator(__DIR__.'/Fixtures'))); |
| 521 | + |
| 522 | + $container->setParameter('parameter.condition', $parameter); |
| 523 | + |
| 524 | + $router = new Router($container, 'with_condition.yaml', [ |
| 525 | + 'debug' => true, |
| 526 | + 'cache_dir' => $cacheDir, |
| 527 | + ]); |
| 528 | + |
| 529 | + $resourceCheckers = [ |
| 530 | + new ContainerParametersResourceChecker($container), |
| 531 | + ]; |
| 532 | + |
| 533 | + $router->setConfigCacheFactory(new ResourceCheckerConfigCacheFactory($resourceCheckers)); |
| 534 | + |
| 535 | + $router->getMatcher(); // trigger cache build |
| 536 | + |
| 537 | + $cache = new ResourceCheckerConfigCache($cacheDir.\DIRECTORY_SEPARATOR.'UrlMatcher.php', $resourceCheckers); |
| 538 | + |
| 539 | + $this->assertTrue($cache->isFresh()); |
| 540 | + } finally { |
| 541 | + if (is_dir($cacheDir)) { |
| 542 | + array_map('unlink', glob($cacheDir.\DIRECTORY_SEPARATOR.'*')); |
| 543 | + rmdir($cacheDir); |
| 544 | + } |
| 545 | + } |
| 546 | + } |
| 547 | + |
| 548 | + public function getContainerParameterForRoute() |
| 549 | + { |
| 550 | + yield 'String' => ['"foo"']; |
| 551 | + yield 'Integer' => [0]; |
| 552 | + yield 'Boolean true' => [true]; |
| 553 | + yield 'Boolean false' => [false]; |
| 554 | + } |
| 555 | + |
506 | 556 | private function getServiceContainer(RouteCollection $routes): Container
|
507 | 557 | {
|
508 | 558 | $loader = $this->createMock(LoaderInterface::class);
|
|
0 commit comments