function ThemeTest::testThemeSuggestions

Test function theme_get_suggestions() for SA-CORE-2009-003.

File

drupal/core/modules/system/lib/Drupal/system/Tests/Theme/ThemeTest.php, line 41
Definition of Drupal\system\Tests\Theme\ThemeTest.

Class

ThemeTest
Tests low-level theme functions.

Namespace

Drupal\system\Tests\Theme

Code

function testThemeSuggestions() {

  // Set the front page as something random otherwise the CLI
  // test runner fails.
  config('system.site')
    ->set('page.front', 'nobody-home')
    ->save();
  $args = array(
    'node',
    '1',
    'edit',
  );
  $suggestions = theme_get_suggestions($args, 'page');
  $this
    ->assertEqual($suggestions, array(
    'page__node',
    'page__node__%',
    'page__node__1',
    'page__node__edit',
  ), 'Found expected node edit page suggestions');

  // Check attack vectors.
  $args = array(
    'node',
    '\\1',
  );
  $suggestions = theme_get_suggestions($args, 'page');
  $this
    ->assertEqual($suggestions, array(
    'page__node',
    'page__node__%',
    'page__node__1',
  ), 'Removed invalid \\ from suggestions');
  $args = array(
    'node',
    '1/',
  );
  $suggestions = theme_get_suggestions($args, 'page');
  $this
    ->assertEqual($suggestions, array(
    'page__node',
    'page__node__%',
    'page__node__1',
  ), 'Removed invalid / from suggestions');
  $args = array(
    'node',
    "1\0",
  );
  $suggestions = theme_get_suggestions($args, 'page');
  $this
    ->assertEqual($suggestions, array(
    'page__node',
    'page__node__%',
    'page__node__1',
  ), 'Removed invalid \\0 from suggestions');

  // Define path with hyphens to be used to generate suggestions.
  $args = array(
    'node',
    '1',
    'hyphen-path',
  );
  $result = array(
    'page__node',
    'page__node__%',
    'page__node__1',
    'page__node__hyphen_path',
  );
  $suggestions = theme_get_suggestions($args, 'page');
  $this
    ->assertEqual($suggestions, $result, 'Found expected page suggestions for paths containing hyphens.');
}