diff --git a/modules/simpletest/tests/theme.test b/modules/simpletest/tests/theme.test index cb2a39bb0fe2f38768d9c1da9c74dbe5a3b90810..1f637372374a14c5ce1b2490b085593ad2fada1d 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 52359778f4f893de302bd7e05dfe480af04fc650..d11705bea73dc3cdd10cc36d5ede810348e2ff19 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. */