From ea75851ef5814a1b118169c56d5005917521eb6c Mon Sep 17 00:00:00 2001 From: Angie Byron <webchick@24967.no-reply.drupal.org> Date: Thu, 29 Apr 2010 05:22:06 +0000 Subject: [PATCH] #764094 by David_Rothstein: Add tests to check that the theme system works in hook_init() (i.e., as early as possible). --- modules/simpletest/tests/theme.test | 29 +++++++++++++++++++++- modules/simpletest/tests/theme_test.module | 28 ++++++++++++++++++++- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/modules/simpletest/tests/theme.test b/modules/simpletest/tests/theme.test index cb2a39bb0fe2..1f637372374a 100644 --- a/modules/simpletest/tests/theme.test +++ b/modules/simpletest/tests/theme.test @@ -44,7 +44,7 @@ class ThemeUnitTest extends DrupalWebTestCase { $suggestions = theme_get_suggestions($args, 'page'); $this->assertEqual($suggestions, array('page__node', 'page__node__%', 'page__node__1'), t('Removed invalid \\0 from suggestions')); } - + /** * Preprocess functions for the base hook should run even for suggestion implementations. */ @@ -155,3 +155,30 @@ class ThemeItemListUnitTest extends DrupalWebTestCase { $this->assertIdentical($expected, $output, 'Nested list is rendered correctly.'); } } + +/** + * Functional test for initialization of the theme system in hook_init(). + */ +class ThemeHookInitUnitTest extends DrupalWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Theme initialization in hook_init()', + 'description' => 'Tests that the theme system can be correctly initialized in hook_init().', + 'group' => 'Theme', + ); + } + + function setUp() { + parent::setUp('theme_test'); + variable_set('theme_default', 'garland'); + } + + /** + * Test that the theme system can generate output when called by hook_init(). + */ + function testThemeInitializationHookInit() { + $this->drupalGet('theme-test/hook-init'); + $this->assertRaw('Themed output generated in hook_init()', t('Themed output generated in hook_init() correctly appears on the page.')); + $this->assertRaw('garland/style.css', t("The default theme's CSS appears on the page when the theme system is initialized in hook_init().")); + } +} diff --git a/modules/simpletest/tests/theme_test.module b/modules/simpletest/tests/theme_test.module index 52359778f4f8..d11705bea73d 100644 --- a/modules/simpletest/tests/theme_test.module +++ b/modules/simpletest/tests/theme_test.module @@ -12,10 +12,36 @@ function theme_test_menu() { 'theme callback' => '_theme_custom_theme', 'type' => MENU_CALLBACK, ); - + $items['theme-test/hook-init'] = array( + 'page callback' => 'theme_test_hook_init_page_callback', + 'access callback' => TRUE, + 'type' => MENU_CALLBACK, + ); return $items; } +/** + * Implements hook_init(). + */ +function theme_test_init() { + // First, force the theme registry to be rebuilt on this page request. This + // allows us to test a full initialization of the theme system in the code + // below. + drupal_theme_rebuild(); + // Next, initialize the theme system by storing themed text in a global + // variable. We will use this later in theme_test_hook_init_page_callback() + // to test that even when the theme system is initialized this early, it is + // still capable of returning output and theming the page as a whole. + $GLOBALS['theme_test_output'] = theme('more_link', array('url' => url('user'), 'title' => 'Themed output generated in hook_init()')); +} + +/** + * Menu callback for testing themed output generated in hook_init(). + */ +function theme_test_hook_init_page_callback() { + return $GLOBALS['theme_test_output']; +} + /** * Custom theme callback. */ -- GitLab