public function TwigEnvironmentTest::testTemplateInvalidation in Drupal 8
Same name and namespace in other branches
- 9 core/tests/Drupal/KernelTests/Core/Theme/TwigEnvironmentTest.php \Drupal\KernelTests\Core\Theme\TwigEnvironmentTest::testTemplateInvalidation()
Test template invalidation.
File
- core/
tests/ Drupal/ KernelTests/ Core/ Theme/ TwigEnvironmentTest.php, line 194
Class
- TwigEnvironmentTest
- Tests the twig environment.
Namespace
Drupal\KernelTests\Core\ThemeCode
public function testTemplateInvalidation() {
$template_before = <<<TWIG
<div>Hello before</div>
TWIG;
$template_after = <<<TWIG
<div>Hello after</div>
TWIG;
$tempfile = tempnam(sys_get_temp_dir(), '__METHOD__') . '.html.twig';
file_put_contents($tempfile, $template_before);
/** @var \Drupal\Core\Template\TwigEnvironment $environment */
$environment = \Drupal::service('twig');
$output = $environment
->load(basename($tempfile))
->render();
$this
->assertEquals($template_before, $output);
file_put_contents($tempfile, $template_after);
$output = $environment
->load(basename($tempfile))
->render();
$this
->assertEquals($template_before, $output);
$environment
->invalidate();
// Manually change $templateClassPrefix to force a different template
// classname, as the other class is still loaded. This wouldn't be a problem
// on a real site where you reload the page.
$reflection = new \ReflectionClass(\Twig_Environment::class);
$property_reflection = $reflection
->getProperty('templateClassPrefix');
$property_reflection
->setAccessible(TRUE);
$property_reflection
->setValue($environment, 'otherPrefix');
$output = $environment
->load(basename($tempfile))
->render();
$this
->assertEquals($template_after, $output);
}