'Keywords substitution',
'description' => 'Verify that keywords are properly replaced with data.',
'group' => 'ctools',
);
}
public function setUp() {
parent::setUp('ctools');
ctools_include('context');
}
public function testKeywordsSubstitution() {
// Create node context for substitution.
$node = $this->drupalCreateNode();
$context = ctools_context_create('node', $node);
$contexts = array('argument_1' => $context);
// Run tests on some edge cases.
$checks = array(
'%node:changed:raw:' => array(
"{$node->changed}:",
t('Multi-level token has been replaced. Colon left untouched.'),
),
'%node:title' => array(
"{$node->title}",
t('Keyword and converter have been replaced.'),
),
'%%node:title' => array(
"%node:title",
t('Keyword after escaped percent sign left untouched.'),
),
'%node:title%node:nid' => array(
"{$node->title}{$node->nid}",
t('Multiple substitutions have been replaced.'),
),
'%node:title:' => array(
"{$node->title}:",
t('Colon after keyword and converter left untouched.'),
),
'%node:title%%' => array(
"{$node->title}%",
t('Escaped percent sign after keyword and converter left untouched.'),
),
'%%%node:title' => array(
"%{$node->title}",
t('Keyword after escaped and unescaped percent sign has been replaced.'),
),
'%%foo:bar' => array(
"%foo:bar",
t('Non-existant context ignored.'),
),
'There was about 20%-30% difference in price.' => array(
'There was about 20%-30% difference in price.',
t('Non-keyword percent sign left untouched.'),
),
'href="my%20file%2dname.pdf"' => array(
'href="my%20file%2dname.pdf"',
t('HTTP URL escape left untouched.'),
),
'href="my%a0file%fdname.pdf"' => array(
'href="my%a0file%fdname.pdf"',
t('HTTP URL escape (high-chars) left untouched.'),
),
'Click here!' => array(
'Click here!',
t('HTTP URL escape percent sign left untouched in HTML.'),
),
'SELECT * FROM {table} WHERE field = "%s"' => array(
'SELECT * FROM {table} WHERE field = "%s"',
t('SQL percent sign left untouched.'),
),
);
foreach ($checks as $string => $expectations) {
list($expected_result, $message) = $expectations;
$actual_result = ctools_context_keyword_substitute($string, array(), $contexts);
$this->assertEqual($actual_result, $expected_result, $message);
}
}
}