diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/simpletest/tests/theme.test | 31 | ||||
-rw-r--r-- | modules/simpletest/tests/theme_test.module | 2 | ||||
-rw-r--r-- | modules/simpletest/tests/themes/test_basetheme/test_basetheme.info | 7 | ||||
-rw-r--r-- | modules/simpletest/tests/themes/test_subtheme/test_subtheme.info | 7 | ||||
-rw-r--r-- | modules/simpletest/tests/themes/test_theme/test_theme.info | 2 | ||||
-rw-r--r-- | modules/system/system.admin.inc | 2 | ||||
-rw-r--r-- | modules/system/system.module | 38 |
7 files changed, 53 insertions, 36 deletions
diff --git a/modules/simpletest/tests/theme.test b/modules/simpletest/tests/theme.test index ba6440028..27a8e47b9 100644 --- a/modules/simpletest/tests/theme.test +++ b/modules/simpletest/tests/theme.test @@ -124,6 +124,37 @@ class ThemeTestCase extends DrupalWebTestCase { module_enable(array('theme_test'), FALSE); $this->assertIdentical(theme('theme_test_foo', array('foo' => 'c')), 'c', 'The theme registry contains theme_test_foo again after re-enabling the module.'); } + + /** + * Test the list_themes() function. + */ + function testListThemes() { + $themes = list_themes(); + // Check if drupal_theme_access() retrieves enabled themes properly from list_themes(). + $this->assertTrue(drupal_theme_access('test_theme'), t('Enabled theme detected')); + // Check if list_themes() returns disabled themes. + $this->assertTrue(array_key_exists('test_basetheme', $themes), t('Disabled theme detected')); + // Check for base theme and subtheme lists. + $base_theme_list = array('test_basetheme' => 'Theme test base theme'); + $sub_theme_list = array('test_subtheme' => 'Theme test subtheme'); + $this->assertIdentical($themes['test_basetheme']->sub_themes, $sub_theme_list, t('Base theme\'s object includes list of subthemes.')); + $this->assertIdentical($themes['test_subtheme']->base_themes, $base_theme_list, t('Subtheme\'s object includes list of base themes.')); + // Check for theme engine in subtheme. + $this->assertIdentical($themes['test_subtheme']->engine, 'phptemplate', t('Subtheme\'s object includes the theme engine.')); + // Check for theme engine prefix. + $this->assertIdentical($themes['test_basetheme']->prefix, 'phptemplate', t('Base theme\'s object includes the theme engine prefix.')); + $this->assertIdentical($themes['test_subtheme']->prefix, 'phptemplate', t('Subtheme\'s object includes the theme engine prefix.')); + } + + /** + * Test the theme_get_setting() function. + */ + function testThemeGetSetting() { + $GLOBALS['theme_key'] = 'test_theme'; + $this->assertIdentical(theme_get_setting('theme_test_setting'), 'default value', t('theme_get_setting() uses the default theme automatically.')); + $this->assertNotEqual(theme_get_setting('subtheme_override', 'test_basetheme'), theme_get_setting('subtheme_override', 'test_subtheme'), t('Base theme\'s default settings values can be overridden by subtheme.')); + $this->assertIdentical(theme_get_setting('basetheme_only', 'test_subtheme'), 'base theme value', t('Base theme\'s default settings values are inherited by subtheme.')); + } } /** diff --git a/modules/simpletest/tests/theme_test.module b/modules/simpletest/tests/theme_test.module index a9bd2ad24..61a12bb70 100644 --- a/modules/simpletest/tests/theme_test.module +++ b/modules/simpletest/tests/theme_test.module @@ -25,6 +25,8 @@ function theme_test_theme($existing, $type, $theme, $path) { */ function theme_test_system_theme_info() { $themes['test_theme'] = drupal_get_path('module', 'theme_test') . '/themes/test_theme/test_theme.info'; + $themes['test_basetheme'] = drupal_get_path('module', 'theme_test') . '/themes/test_basetheme/test_basetheme.info'; + $themes['test_subtheme'] = drupal_get_path('module', 'theme_test') . '/themes/test_subtheme/test_subtheme.info'; return $themes; } diff --git a/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info b/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info new file mode 100644 index 000000000..c39e8a259 --- /dev/null +++ b/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info @@ -0,0 +1,7 @@ +name = Theme test base theme +description = Test theme which acts as a base theme for other test subthemes. +core = 7.x +hidden = TRUE + +settings[basetheme_only] = base theme value +settings[subtheme_override] = base theme value diff --git a/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info b/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info new file mode 100644 index 000000000..7da71e003 --- /dev/null +++ b/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info @@ -0,0 +1,7 @@ +name = Theme test subtheme +description = Test theme which uses test_basetheme as the base theme. +core = 7.x +base theme = test_basetheme +hidden = TRUE + +settings[subtheme_override] = subtheme value diff --git a/modules/simpletest/tests/themes/test_theme/test_theme.info b/modules/simpletest/tests/themes/test_theme/test_theme.info index dd5584b0b..4bbbe7a21 100644 --- a/modules/simpletest/tests/themes/test_theme/test_theme.info +++ b/modules/simpletest/tests/themes/test_theme/test_theme.info @@ -14,3 +14,5 @@ hidden = TRUE ; version from being loaded, and that errors aren't caused by the lack of this ; file within the theme folder. stylesheets[all][] = system.base.css + +settings[theme_test_setting] = default value diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc index e9682e7dd..23a975b0c 100644 --- a/modules/system/system.admin.inc +++ b/modules/system/system.admin.inc @@ -400,7 +400,7 @@ function system_theme_settings($form, &$form_state, $key = '') { // Default settings are defined in theme_get_setting() in includes/theme.inc if ($key) { $var = 'theme_' . $key . '_settings'; - $themes = system_rebuild_theme_data(); + $themes = list_themes(); $features = $themes[$key]->info['features']; } else { diff --git a/modules/system/system.module b/modules/system/system.module index 072850e01..48b2959c6 100644 --- a/modules/system/system.module +++ b/modules/system/system.module @@ -2553,7 +2553,7 @@ function _system_rebuild_theme_data() { // Now that we've established all our master themes, go back and fill in data // for subthemes. foreach ($sub_themes as $key) { - $themes[$key]->base_themes = system_find_base_themes($themes, $key); + $themes[$key]->base_themes = drupal_find_base_themes($themes, $key); // Don't proceed if there was a problem with the root base theme. if (!current($themes[$key]->base_themes)) { continue; @@ -2648,42 +2648,10 @@ function _system_default_theme_features() { /** * Find all the base themes for the specified theme. * - * Themes can inherit templates and function implementations from earlier themes. - * - * @param $themes - * An array of available themes. - * @param $key - * The name of the theme whose base we are looking for. - * @param $used_keys - * A recursion parameter preventing endless loops. - * @return - * Returns an array of all of the theme's ancestors; the first element's value - * will be NULL if an error occurred. + * This function has been deprecated in favor of drupal_find_base_themes(). */ function system_find_base_themes($themes, $key, $used_keys = array()) { - $base_key = $themes[$key]->info['base theme']; - // Does the base theme exist? - if (!isset($themes[$base_key])) { - return array($base_key => NULL); - } - - $current_base_theme = array($base_key => $themes[$base_key]->info['name']); - - // Is the base theme itself a child of another theme? - if (isset($themes[$base_key]->info['base theme'])) { - // Do we already know the base themes of this theme? - if (isset($themes[$base_key]->base_themes)) { - return $themes[$base_key]->base_themes + $current_base_theme; - } - // Prevent loops. - if (!empty($used_keys[$base_key])) { - return array($base_key => NULL); - } - $used_keys[$base_key] = TRUE; - return system_find_base_themes($themes, $base_key, $used_keys) + $current_base_theme; - } - // If we get here, then this is our parent theme. - return $current_base_theme; + return drupal_find_base_themes($themes, $key, $used_keys); } /** |