#764094 by David_Rothstein: Add tests to check that the theme system works in hook_init() (i.e., as early as possible).

merge-requests/26/head
Angie Byron 2010-04-29 05:22:06 +00:00
parent 10eec627ba
commit ea75851ef5
2 changed files with 55 additions and 2 deletions

View File

@ -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()."));
}
}

View File

@ -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.
*/