123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 |
- <?php
- /**
- * @file
- * Test the keyword substitution functionality.
- */
- class CtoolsContextIDTestCase extends DrupalWebTestCase {
- /**
- * {@inheritdoc}
- */
- public static function getInfo() {
- return array(
- 'name' => 'Context IDs',
- 'description' => 'Verify that Context IDs work properly.',
- 'group' => 'ctools',
- 'dependencies' => array('ctools'),
- );
- }
- /**
- * {@inheritdoc}
- */
- protected function setUp(array $modules = array()) {
- $modules[] = 'ctools';
- parent::setUp($modules);
- ctools_include('context');
- }
- private function getTestContexts() {
- $test_objects = array(
- array(),
- array(
- 'name' => 'foo_bar',
- ),
- array(
- 'id' => 25,
- ),
- array(
- 'id' => 5,
- 'name' => NULL,
- ),
- array(
- 'id' => 'a',
- 'name' => 'foo_bar',
- ),
- array(
- 'id' => 'z',
- 'name' => 'baz',
- ),
- array(
- 'id' => 15,
- 'name' => 'baz',
- ),
- array(
- 'id' => 'z',
- 'name' => 'foo',
- ),
- array(
- 'id' => 1,
- 'name' => 'foo',
- ),
- array(
- 'id' => 47,
- 'name' => 'bar',
- ),
- array(
- 'id' => 99,
- 'name' => 'bar',
- ),
- );
- return $test_objects;
- }
- /**
- * Test ctools_context_id where the context only has an id.
- */
- public function testContextId() {
- $context = array();
- $expected = 'context__1';
- $actual = ctools_context_id($context);
- $this->assertEqual($actual, $expected, 'Empty context has id ' . $expected);
- $context = array('id' => 4);
- $expected = 'context__4';
- $actual = ctools_context_id($context);
- $this->assertEqual($actual, $expected, 'Context 4 has id ' . $expected);
- $context = array('id' => 'a');
- $expected = 'context__a';
- $actual = ctools_context_id($context);
- $this->assertEqual($actual, $expected, 'Context "a" has id ' . $expected);
- }
- /**
- * Test ctools_context_id where the context has an id and a name.
- */
- public function testContextIdName() {
- $context = array('id' => '512', 'name' => 'foo');
- $expected = 'context_foo_512';
- $this->assertEqual(ctools_context_id($context), $expected, 'Context "512"/"foo" has id ' . $expected);
- $context = array('id' => '512', 'name' => 'foo_bar');
- $expected = 'context_foo_bar_512';
- $this->assertEqual(ctools_context_id($context), $expected, 'Context "512"/"foo_bar" has id ' . $expected);
- }
- /**
- * Test ctools_context_id where the context has an id & name, and a type is specified.
- */
- public function testContextIdNameType() {
- $type = 'sort';
- $context = array('id' => '512', 'name' => 'foo');
- $expected = 'sort_foo_512';
- $this->assertEqual(ctools_context_id($context, $type), $expected, 'Context "512" has id ' . $expected);
- $type = NULL;
- $context = array('id' => '512', 'name' => 'foo');
- $expected = '_foo_512';
- $this->assertEqual(ctools_context_id($context, $type), $expected, 'Context "512" has id ' . $expected);
- }
- /**
- * Test ctools_context_next_id in various scenarios.
- */
- public function testNextContextId() {
- $test_objects = $this->getTestContexts();
- // If no object list or name is given?
- $value = ctools_context_next_id(NULL, NULL);
- $expected = 1;
- $this->assertEqual($value, $expected, 'NULL objects have next id ' . $expected);
- // If no object list is given?
- $value = ctools_context_next_id(NULL, 'bar');
- $expected = 1;
- $this->assertEqual($value, $expected, 'NULL objects have next id ' . $expected);
- // If no object list is given (another way)?
- $value = ctools_context_next_id(array(), 'bar');
- $expected = 1;
- $this->assertEqual($value, $expected, 'Empty objects have next id ' . $expected);
- // The name is empty... which is just another name.
- $value = ctools_context_next_id($test_objects, '');
- $expected = 1;
- $this->assertEqual($value, $expected, 'Unnamed objects have next id ' . $expected . ' (got ' . $value . ')');
- // The value of the id key is not a number.
- $value = ctools_context_next_id($test_objects, 'foo_bar');
- $expected = 1;
- $this->assertEqual($value, $expected, 'Objects with non-integer ids are ignored ' . $expected);
- // One object's id is not a number (ignore) but another is valid.
- $value = ctools_context_next_id($test_objects, 'baz');
- $expected = 16;
- $this->assertEqual($value, $expected, 'Baz\'s objects have next id ' . $expected);
- // An expected case: there is one match and the id is numeric.
- $value = ctools_context_next_id($test_objects, 'foo');
- $expected = 2;
- $this->assertEqual($value, $expected, 'Foo\'s objects have next id ' . $expected);
- // Another expected case: there are multiple numeric IDs.
- $value = ctools_context_next_id($test_objects, 'bar');
- $expected = 100;
- $this->assertEqual($value, $expected, 'Bar\'s objects have next id ' . $expected);
- }
- }
- /**
- * Test the keyword substitution functionality.
- */
- class CtoolsContextKeywordsSubstitutionTestCase extends DrupalWebTestCase {
- /**
- * {@inheritdoc}
- */
- public static function getInfo() {
- return array(
- 'name' => 'Keywords substitution',
- 'description' => 'Verify that keywords are properly replaced with data.',
- 'group' => 'ctools',
- 'dependencies' => array('ctools'),
- );
- }
- /**
- * {@inheritdoc}
- */
- protected function setUp(array $modules = array()) {
- $modules[] = 'ctools';
- parent::setUp($modules);
- ctools_include('context');
- }
- /**
- * Test the keyword substitution.
- */
- 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(
- array(
- '%node:changed:raw:',
- array('%title' => ''),
- "{$node->changed}:",
- t('Multi-level token has been replaced. Colon left untouched.'),
- ),
- array(
- '%node:title',
- array('%title' => ''),
- "{$node->title}",
- t('Keyword and converter have been replaced.'),
- ),
- array(
- '%%node:title',
- array('%title' => ''),
- "%node:title",
- t('Keyword after escaped percent sign left untouched.'),
- ),
- array(
- '%node:title%node:nid',
- array('%title' => ''),
- "{$node->title}{$node->nid}",
- t('Multiple substitutions have been replaced.'),
- ),
- array(
- '%node:title:',
- array('%title' => ''),
- "{$node->title}:",
- t('Colon after keyword and converter left untouched.'),
- ),
- array(
- '%node:title%%',
- array('%title' => ''),
- "{$node->title}%",
- t('Escaped percent sign after keyword and converter left untouched.'),
- ),
- array(
- '%%%node:title',
- array('%title' => ''),
- "%{$node->title}",
- t('Keyword after escaped and unescaped percent sign has been replaced.'),
- ),
- array(
- '%%foo:bar',
- array('%title' => ''),
- "%foo:bar",
- t('Non-existant context ignored.'),
- ),
- array(
- 'There was about 20%-30% difference in price.',
- array('%title' => ''),
- 'There was about 20%-30% difference in price.',
- t('Non-keyword percent sign left untouched.'),
- ),
- array(
- 'href="my%20file%2dname.pdf"',
- array('%title' => ''),
- 'href="my%20file%2dname.pdf"',
- t('HTTP URL escape left untouched.'),
- ),
- array(
- 'href="my%a0file%fdname.pdf"',
- array('%title' => ''),
- 'href="my%a0file%fdname.pdf"',
- t('HTTP URL escape (high-chars) left untouched.'),
- ),
- array(
- '<a href="http://www.example.com/here%20is%20a%20pdf.pdf">Click here!</a>',
- array('%title' => ''),
- '<a href="http://www.example.com/here%20is%20a%20pdf.pdf">Click here!</a>',
- t('HTTP URL escape percent sign left untouched in HTML.'),
- ),
- array(
- 'SELECT * FROM {table} WHERE field = "%s"',
- array('%title' => ''),
- 'SELECT * FROM {table} WHERE field = "%s"',
- t('SQL percent sign left untouched.'),
- ),
- array(
- '%title',
- array('%title' => 'foobar'),
- 'foobar',
- t('String value in $keywords array is returned.'),
- ),
- array(
- '%title',
- array('%title' => ''),
- '',
- t('Empty string value in $keywords array returns empty string.'),
- ),
- array(
- '%title',
- array('%title' => NULL),
- '',
- t('NULL value in $keywords array returns empty string.'),
- ),
- array(
- '%title',
- array('%title' => FALSE),
- '',
- t('FALSE value in $keywords array returns empty string.'),
- ),
- array(
- '%title',
- array('%title' => 11),
- '11',
- t('Integer value in $keywords array returns string representation of the integer.'),
- ),
- array(
- '%title',
- array('%title' => 'substring %title'),
- 'substring %title',
- t('Input value as substring in $keywords array left untouched.'),
- ),
- );
- foreach ($checks as $check) {
- list($string, $keywords, $expected_result, $message) = $check;
- $actual_result = ctools_context_keyword_substitute($string, $keywords, $contexts);
- $this->assertEqual($actual_result, $expected_result, $message);
- }
- }
- }
- /**
- * Test the context classes.
- */
- class CtoolsContextUnitTestCase extends DrupalUnitTestCase {
- /**
- * {@inheritdoc}
- */
- public static function getInfo() {
- return array(
- 'name' => 'Context unit tests',
- 'description' => 'Verifies that context classes behave correctly',
- 'group' => 'ctools',
- 'dependencies' => array('ctools'),
- );
- }
- /**
- * {@inheritdoc}
- */
- protected function setUp() {
- parent::setUp();
- require_once __DIR__ . '/../includes/context.inc';
- }
- /**
- * Tests that contexts have the correct required property value.
- */
- public function testOptionalRequiredContext() {
- $required_context = new ctools_context_required('test1');
- $this->assertTrue($required_context->required);
- $optional_context = new ctools_context_optional('test2');
- $this->assertFalse($optional_context->required);
- }
- }
|