96 lines
4.0 KiB
Plaintext
96 lines
4.0 KiB
Plaintext
<?php
|
|
// $Id$
|
|
|
|
/**
|
|
* @file
|
|
* Tests for the theme API.
|
|
*/
|
|
|
|
/**
|
|
* Unit tests for the Theme API.
|
|
*/
|
|
class TemplateUnitTest extends DrupalWebTestCase {
|
|
public static function getInfo() {
|
|
return array(
|
|
'name' => t('Theme API'),
|
|
'description' => t('Test low-level theme template functions.'),
|
|
'group' => t('Theme'),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Test function template_page_suggestions() for SA-CORE-2009-003.
|
|
*/
|
|
function testTemplateSuggestions() {
|
|
// Set the front page as something random otherwise the CLI
|
|
// test runner fails.
|
|
variable_set('site_frontpage', 'nobody-home');
|
|
$args = array('node', '1', 'edit');
|
|
$suggestions = template_page_suggestions($args);
|
|
$this->assertEqual($suggestions, array('page-node', 'page-node-1', 'page-node-edit'), t('Found expected node edit page template suggestions'));
|
|
// Check attack vectors.
|
|
$args = array('node', '\\1');
|
|
$suggestions = template_page_suggestions($args);
|
|
$this->assertEqual($suggestions, array('page-node', 'page-node-1'), t('Removed invalid \\ from template suggestions'));
|
|
$args = array('node', '1/');
|
|
$suggestions = template_page_suggestions($args);
|
|
$this->assertEqual($suggestions, array('page-node', 'page-node-1'), t('Removed invalid / from template suggestions'));
|
|
$args = array('node', "1\0");
|
|
$suggestions = template_page_suggestions($args);
|
|
$this->assertEqual($suggestions, array('page-node', 'page-node-1'), t('Removed invalid \\0 from template suggestions'));
|
|
// Tests for drupal_discover_template()
|
|
$suggestions = array('page');
|
|
$this->assertEqual(drupal_discover_template(array('themes/garland'), $suggestions), 'themes/garland/page.tpl.php', t('Safe template discovered'));
|
|
$suggestions = array('page');
|
|
$this->assertEqual(drupal_discover_template(array('themes/garland'), $suggestions, '\\.tpl.php'), 'themes/garland/page.tpl.php', t('Unsafe extension fixed'));
|
|
$suggestions = array('page\\');
|
|
$this->assertEqual(drupal_discover_template(array('themes/garland'), $suggestions), 'themes/garland/page.tpl.php', t('Unsafe template suggestion fixed'));
|
|
$suggestions = array('page/');
|
|
$this->assertEqual(drupal_discover_template(array('themes/garland'), $suggestions), 'themes/garland/page.tpl.php', t('Unsafe template suggestion fixed'));
|
|
$suggestions = array("page\0");
|
|
$this->assertEqual(drupal_discover_template(array('themes/garland'), $suggestions), 'themes/garland/page.tpl.php', t('Unsafe template suggestion fixed'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Unit tests for theme_table().
|
|
*/
|
|
class ThemeTableUnitTest extends DrupalWebTestCase {
|
|
public static function getInfo() {
|
|
return array(
|
|
'name' => t('Theme Table'),
|
|
'description' => t('Tests built-in theme functions.'),
|
|
'group' => t('Theme'),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Tableheader.js provides 'sticky' table headers, and is included by default.
|
|
*/
|
|
function testThemeTableStickyHeaders() {
|
|
$header = array('one', 'two', 'three');
|
|
$rows = array(array(1,2,3), array(4,5,6), array(7,8,9));
|
|
$this->content = theme('table', $header, $rows);
|
|
$js = drupal_add_js();
|
|
$this->assertTrue(isset($js['misc/tableheader.js']), t('tableheader.js was included when $sticky = TRUE.'));
|
|
$this->assertRaw('sticky-enabled', t('Table has a class of sticky-enabled when $sticky = TRUE.'));
|
|
drupal_static_reset('drupal_add_js');
|
|
}
|
|
|
|
/**
|
|
* If $sticky is FALSE, no tableheader.js should be included.
|
|
*/
|
|
function testThemeTableNoStickyHeaders() {
|
|
$header = array('one', 'two', 'three');
|
|
$rows = array(array(1,2,3), array(4,5,6), array(7,8,9));
|
|
$attributes = array();
|
|
$caption = NULL;
|
|
$colgroups = array();
|
|
$this->content = theme('table', $header, $rows, $attributes, $caption, $colgroups, FALSE);
|
|
$js = drupal_add_js();
|
|
$this->assertFalse(isset($js['misc/tableheader.js']), t('tableheader.js was not included because $sticky = FALSE.'));
|
|
$this->assertNoRaw('sticky-enabled', t('Table does not have a class of sticky-enabled because $sticky = FALSE.'));
|
|
drupal_static_reset('drupal_add_js');
|
|
}
|
|
}
|