diff --git a/core/modules/system/lib/Drupal/system/Tests/Theme/TwigSettingsTest.php b/core/modules/system/lib/Drupal/system/Tests/Theme/TwigSettingsTest.php new file mode 100644 index 0000000..a41542b --- /dev/null +++ b/core/modules/system/lib/Drupal/system/Tests/Theme/TwigSettingsTest.php @@ -0,0 +1,103 @@ + 'Twig Settings', + 'description' => 'Tests overriding Twig engine settings via settings.php.', + 'group' => 'Theme', + ); + } + + /** + * Ensures Twig template auto reload setting can be overridden. + */ + function testTwigAutoReloadOverride() { + // Enable auto reload and rebuild the service container. + $this->settingsSet('twig_auto_reload', TRUE); + $this->rebuildContainer(); + + // Check isAutoReload() via the Twig service container. + $this->assertTrue(drupal_container()->get('twig')->isAutoReload(), 'Automatic reloading of Twig templates enabled.'); + + // Disable auto reload and check the service container again. + $this->settingsSet('twig_auto_reload', FALSE); + $this->rebuildContainer(); + + $this->assertFalse(drupal_container()->get('twig')->isAutoReload(), 'Automatic reloading of Twig templates disabled.'); + } + + /** + * Ensures Twig engine debug setting can be overridden. + */ + function testTwigDebugOverride() { + // Enable debug and rebuild the service container. + $this->settingsSet('twig_debug', TRUE); + $this->rebuildContainer(); + + // Check isDebug() via the Twig service container. + $this->assertTrue(drupal_container()->get('twig')->isDebug(), 'Twig debug enabled.'); + + // Disable debug and check the service container again. + $this->settingsSet('twig_debug', FALSE); + $this->rebuildContainer(); + + $this->assertFalse(drupal_container()->get('twig')->isDebug(), 'Twig debug disabled.'); + } + + /** + * Ensures Twig template cache setting can be overridden. + */ + function testTwigCacheOverride() { + theme_enable(array('test_theme_twig')); + variable_set('theme_default', 'test_theme_twig'); + + $cache = array(); + // Prime the theme cache. + foreach (module_implements('theme') as $module) { + _theme_process_registry($cache, $module, 'module', $module, drupal_get_path('module', $module)); + } + + // Load array of Twig templates. + $templates = drupal_find_theme_templates($cache, '.html.twig', drupal_get_path('theme', 'test_theme_twig')); + + // Get the template filename and the cache filename for + // theme_test_template_test.html.twig. + $template_filename = $templates['theme_test_template_test']['path'] . '/' . $templates['theme_test_template_test']['template'] . '.html.twig'; + $cache_filename = drupal_container()->get('twig')->getCacheFilename($template_filename); + + // Navigate to the page and make sure the template gets cached. + $this->drupalGet('theme-test/template-test'); + $this->assertTrue(PhpStorageFactory::get('twig')->exists($cache_filename), 'Cached Twig template found.'); + + // Disable the Twig cache and rebuild the service container. + $this->settingsSet('twig_cache', FALSE); + $this->rebuildContainer(); + + // This should return false after rebuilding the service container. + $new_cache_filename = drupal_container()->get('twig')->getCacheFilename($template_filename); + $this->assertFalse($new_cache_filename, 'Twig environment does not return cache filename after caching is disabled.'); + } + +}