function TokenReplaceTestCase::testTokenReplacement

Creates a user and a node, then tests the tokens generated from them.

File

modules/system/system.test, line 2222

Class

TokenReplaceTestCase
Test token replacement in strings.

Code

function testTokenReplacement() {
    // Create the initial objects.
    $account = $this->drupalCreateUser();
    $node = $this->drupalCreateNode(array(
        'uid' => $account->uid,
    ));
    $node->title = '<blink>Blinking Text</blink>';
    global $user, $language;
    $source = '[node:title]';
    // Title of the node we passed in
    $source .= '[node:author:name]';
    // Node author's name
    $source .= '[node:created:since]';
    // Time since the node was created
    $source .= '[current-user:name]';
    // Current user's name
    $source .= '[date:short]';
    // Short date format of REQUEST_TIME
    $source .= '[user:name]';
    // No user passed in, should be untouched
    $source .= '[bogus:token]';
    // Non-existent token
    $target = check_plain($node->title);
    $target .= check_plain($account->name);
    $target .= format_interval(REQUEST_TIME - $node->created, 2, $language->language);
    $target .= check_plain($user->name);
    $target .= format_date(REQUEST_TIME, 'short', '', NULL, $language->language);
    // Test that the clear parameter cleans out non-existent tokens.
    $result = token_replace($source, array(
        'node' => $node,
    ), array(
        'language' => $language,
        'clear' => TRUE,
    ));
    $result = $this->assertEqual($target, $result, 'Valid tokens replaced while invalid tokens cleared out.');
    // Test without using the clear parameter (non-existent token untouched).
    $target .= '[user:name]';
    $target .= '[bogus:token]';
    $result = token_replace($source, array(
        'node' => $node,
    ), array(
        'language' => $language,
    ));
    $this->assertEqual($target, $result, 'Valid tokens replaced while invalid tokens ignored.');
    // Check that the results of token_generate are sanitized properly. This does NOT
    // test the cleanliness of every token -- just that the $sanitize flag is being
    // passed properly through the call stack and being handled correctly by a 'known'
    // token, [node:title].
    $raw_tokens = array(
        'title' => '[node:title]',
    );
    $generated = token_generate('node', $raw_tokens, array(
        'node' => $node,
    ));
    $this->assertEqual($generated['[node:title]'], check_plain($node->title), 'Token sanitized.');
    $generated = token_generate('node', $raw_tokens, array(
        'node' => $node,
    ), array(
        'sanitize' => FALSE,
    ));
    $this->assertEqual($generated['[node:title]'], $node->title, 'Unsanitized token generated properly.');
    // Test token replacement when the string contains no tokens.
    $this->assertEqual(token_replace('No tokens here.'), 'No tokens here.');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.