subpathauto.test in Sub-pathauto (Sub-path URL Aliases) 7
Test integration for the subpathauto.module.
File
subpathauto.testView source
<?php
/**
* @file
* Test integration for the subpathauto.module.
*/
class SubPathautoUnitTestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'Sub-pathauto unit tests',
'description' => 'Test basic functionality for Sub-pathauto.',
'group' => 'Sub-pathauto',
);
}
function setUp() {
parent::setUp(array(
'subpathauto',
));
$this
->addAlias('node/1', 'content/first-node');
$this
->addAlias('node/1/test', 'content/first-node-test');
$this
->addAlias('admin', 'malicious-path');
}
function testSubPathAliases() {
$this
->assertAlias('node/1', 'content/first-node');
$this
->assertAlias('node/1/a', 'content/first-node/a');
$this
->assertNoAlias('node/1/a/b');
$this
->assertAlias('node/1/test', 'content/first-node-test');
$this
->assertAlias('node/1/test/a', 'content/first-node-test/a');
$this
->assertNoAlias('node/1/test/a/b');
// Change the depth to two-levels deep.
variable_set('subpathauto_depth', 2);
drupal_static_reset();
$this
->assertAlias('node/1', 'content/first-node');
$this
->assertAlias('node/1/a', 'content/first-node/a');
$this
->assertAlias('node/1/a/b', 'content/first-node/a/b');
$this
->assertNoAlias('node/1/a/b/c');
$this
->assertAlias('node/1/test', 'content/first-node-test');
$this
->assertAlias('node/1/test/a/b', 'content/first-node-test/a/b');
$this
->assertNoAlias('node/1/test/a/b/c');
// Test that admin paths should be excluded.
drupal_static_reset();
$this
->assertNoAlias('node/1/edit');
$this
->assertNoAlias('admin/modules');
// Test with $options['alias'] and $options['external'].
$this
->assertNoAlias('node/1/a', array(
'alias' => TRUE,
));
$this
->assertAlias('node/1/a', 'content/first-node/a', array(
'alias' => FALSE,
));
$this
->assertNoAlias('node/1/a', array(
'external' => TRUE,
));
$this
->assertAlias('node/1/a', 'content/first-node/a', array(
'external' => FALSE,
));
// Enable sub-path aliases for admin paths.
variable_set('subpathauto_ignore_admin', 0);
drupal_static_reset();
$this
->assertAlias('node/1/edit', 'content/first-node/edit');
$this
->assertAlias('admin/modules', 'malicious-path/modules');
}
function getPathAlias($path, $options = array()) {
// Merge in defaults.
$options += array(
'fragment' => '',
'query' => array(),
'absolute' => FALSE,
'alias' => FALSE,
'prefix' => '',
);
if (!isset($options['external'])) {
// Return an external link if $path contains an allowed absolute URL. Only
// call the slow drupal_strip_dangerous_protocols() if $path contains a ':'
// before any / ? or #. Note: we could use url_is_external($path) here, but
// that would require another function call, and performance inside url() is
// critical.
$colonpos = strpos($path, ':');
$options['external'] = $colonpos !== FALSE && !preg_match('![/?#]!', substr($path, 0, $colonpos)) && drupal_strip_dangerous_protocols($path) == $path;
}
// Preserve the original path before altering or aliasing.
$original_path = $path;
// Allow other modules to alter the outbound URL and options.
drupal_alter('url_outbound', $path, $options, $original_path);
if (isset($options['fragment']) && $options['fragment'] !== '') {
$options['fragment'] = '#' . $options['fragment'];
}
if ($options['external']) {
return $path;
}
global $base_url, $base_secure_url, $base_insecure_url;
// The special path '<front>' links to the default front page.
if ($path == '<front>') {
$path = '';
}
elseif (!empty($path) && !$options['alias']) {
$language = isset($options['language']) && isset($options['language']->language) ? $options['language']->language : '';
$alias = drupal_get_path_alias($original_path, $language);
if ($alias != $original_path) {
$path = $alias;
}
}
return $path;
}
function assertAlias($source, $alias, array $options = array()) {
$actual_alias = $this
->getPathAlias($source, $options);
$actual_source = drupal_get_normal_path($alias);
$args = array(
'@source' => $source,
'@alias' => $alias,
'@source-actual' => $actual_source,
'@alias-actual' => $actual_alias,
);
return $this
->assertIdentical($alias, $actual_alias, t("drupal_get_path_alias('@source') was '@alias-actual' and expected '@alias'", $args)) || $this
->assertIdentical($source, $actual_source, t("drupal_get_normal_path('@alias') was '@source-actual' and expected '@source'", $args));
}
function assertNoAlias($source, array $options = array()) {
return $this
->assertAlias($source, $source, $options);
}
function addAlias($source, $alias, $langcode = LANGUAGE_NONE) {
$alias = array(
'source' => $source,
'alias' => $alias,
'language' => $langcode,
);
path_save($alias);
drupal_clear_path_cache();
}
}
Classes
Name | Description |
---|---|
SubPathautoUnitTestCase | @file Test integration for the subpathauto.module. |