You are here

class AlignFilterTest in Entity Embed 7

Same name and namespace in other branches
  1. 7.2 entity_embed.test \AlignFilterTest

Tests the align filter.

Hierarchy

Expanded class hierarchy of AlignFilterTest

File

./entity_embed.test, line 334
Test integration for the entity_embed module.

View source
class AlignFilterTest extends DrupalUnitTestCase {
  public static function getInfo() {
    return array(
      'name' => 'Align filter test',
      'description' => 'Tests the alignment filter.',
      'group' => 'Entity Embed',
    );
  }
  function setUp() {
    drupal_load('module', 'entity_embed');
    parent::setUp();
  }

  /**
   * Tests the embed_button administration functionality.
   */
  function testAlignFilter() {

    // Setup dummy filter object.
    $filter = new stdClass();
    $filter->callback = '_entity_embed_filter_align';

    // No data-align attribute.
    $tests = array(
      '<img src="llama.jpg" />' => array(
        '<img src="llama.jpg" />' => TRUE,
      ),
    );
    $this
      ->assertFilteredString($filter, $tests);

    // Data-align attribute: all 3 allowed values.
    $tests = array(
      '<img src="llama.jpg" data-align="left" />' => array(
        '<img src="llama.jpg" class="align-left" />' => TRUE,
      ),
    );
    $this
      ->assertFilteredString($filter, $tests);
    $tests = array(
      '<img src="llama.jpg" data-align="center" />' => array(
        '<img src="llama.jpg" class="align-center" />' => TRUE,
      ),
    );
    $this
      ->assertFilteredString($filter, $tests);
    $tests = array(
      '<img src="llama.jpg" data-align="right" />' => array(
        '<img src="llama.jpg" class="align-right" />' => TRUE,
      ),
    );
    $this
      ->assertFilteredString($filter, $tests);

    // Data-align attribute: a disallowed value.
    $tests = array(
      '<img src="llama.jpg" data-align="left foobar" />' => array(
        '<img src="llama.jpg" />' => TRUE,
      ),
    );
    $this
      ->assertFilteredString($filter, $tests);

    // Empty data-align attribute.
    $tests = array(
      '<img src="llama.jpg" data-align="" />' => array(
        '<img src="llama.jpg" />' => TRUE,
      ),
    );
    $this
      ->assertFilteredString($filter, $tests);

    // Ensure the filter also works with uncommon yet valid attribute quoting.
    $tests = array(
      '<img src=llama.jpg data-align=right />' => array(
        '<img src="llama.jpg" class="align-right" />' => TRUE,
      ),
    );
    $this
      ->assertFilteredString($filter, $tests);

    // Security test: attempt to inject an additional class.
    $tests = array(
      '<img src="llama.jpg" data-align="center another-class-here" />' => array(
        '<img src="llama.jpg" />' => TRUE,
      ),
    );
    $this
      ->assertFilteredString($filter, $tests);

    // Security test: attempt an XSS.
    $tests = array(
      '<img src="llama.jpg" data-align="center \'onclick=\'alert(foo);" />' => array(
        '<img src="llama.jpg" />' => TRUE,
      ),
    );
    $this
      ->assertFilteredString($filter, $tests);
  }

  /**
   * Asserts multiple filter output expectations for multiple input strings.
   *
   * @param $filter
   *   A input filter object.
   * @param $tests
   *   An associative array, whereas each key is an arbitrary input string and
   *   each value is again an associative array whose keys are filter output
   *   strings and whose values are Booleans indicating whether the output is
   *   expected or not.
   *
   * For example:
   * @code
   * $tests = array(
   *   'Input string' => array(
   *     '<p>Input string</p>' => TRUE,
   *     'Input string<br' => FALSE,
   *   ),
   * );
   * @endcode
   */
  function assertFilteredString($filter, $tests) {
    foreach ($tests as $source => $tasks) {
      $function = $filter->callback;
      $result = $function($source, $filter);
      foreach ($tasks as $value => $is_expected) {

        // Not using assertIdentical, since combination with strpos() is hard to grok.
        if ($is_expected) {
          $success = $this
            ->assertTrue(strpos($result, $value) !== FALSE, format_string('@source: @value found.', array(
            '@source' => var_export($source, TRUE),
            '@value' => var_export($value, TRUE),
          )));
        }
        else {
          $success = $this
            ->assertTrue(strpos($result, $value) === FALSE, format_string('@source: @value not found.', array(
            '@source' => var_export($source, TRUE),
            '@value' => var_export($value, TRUE),
          )));
        }
        if (!$success) {
          $this
            ->verbose('Source:<pre>' . check_plain(var_export($source, TRUE)) . '</pre>' . '<hr />' . 'Result:<pre>' . check_plain(var_export($result, TRUE)) . '</pre>' . '<hr />' . ($is_expected ? 'Expected:' : 'Not expected:') . '<pre>' . check_plain(var_export($value, TRUE)) . '</pre>');
        }
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
AlignFilterTest::assertFilteredString function Asserts multiple filter output expectations for multiple input strings.
AlignFilterTest::getInfo public static function
AlignFilterTest::setUp function Sets up unit test environment. Overrides DrupalUnitTestCase::setUp
AlignFilterTest::testAlignFilter function Tests the embed_button administration functionality.
DrupalTestCase::$assertions protected property Assertions thrown in that test case.
DrupalTestCase::$databasePrefix protected property The database prefix of this test run.
DrupalTestCase::$originalFileDirectory protected property The original file directory, before it was changed for testing purposes.
DrupalTestCase::$results public property Current results of this test case.
DrupalTestCase::$setup protected property Flag to indicate whether the test has been set up.
DrupalTestCase::$setupDatabasePrefix protected property
DrupalTestCase::$setupEnvironment protected property
DrupalTestCase::$skipClasses protected property This class is skipped when looking for the source of an assertion.
DrupalTestCase::$testId protected property The test run ID.
DrupalTestCase::$timeLimit protected property Time limit for the test.
DrupalTestCase::$useSetupInstallationCache public property Whether to cache the installation part of the setUp() method.
DrupalTestCase::$useSetupModulesCache public property Whether to cache the modules installation part of the setUp() method.
DrupalTestCase::$verboseDirectoryUrl protected property URL to the verbose output file directory.
DrupalTestCase::assert protected function Internal helper: stores the assert.
DrupalTestCase::assertEqual protected function Check to see if two values are equal.
DrupalTestCase::assertFalse protected function Check to see if a value is false (an empty string, 0, NULL, or FALSE).
DrupalTestCase::assertIdentical protected function Check to see if two values are identical.
DrupalTestCase::assertNotEqual protected function Check to see if two values are not equal.
DrupalTestCase::assertNotIdentical protected function Check to see if two values are not identical.
DrupalTestCase::assertNotNull protected function Check to see if a value is not NULL.
DrupalTestCase::assertNull protected function Check to see if a value is NULL.
DrupalTestCase::assertTrue protected function Check to see if a value is not false (not an empty string, 0, NULL, or FALSE).
DrupalTestCase::deleteAssert public static function Delete an assertion record by message ID.
DrupalTestCase::error protected function Fire an error assertion. 1
DrupalTestCase::errorHandler public function Handle errors during test runs. 1
DrupalTestCase::exceptionHandler protected function Handle exceptions.
DrupalTestCase::fail protected function Fire an assertion that is always negative.
DrupalTestCase::generatePermutations public static function Converts a list of possible parameters into a stack of permutations.
DrupalTestCase::getAssertionCall protected function Cycles through backtrace until the first non-assertion method is found.
DrupalTestCase::getDatabaseConnection public static function Returns the database connection to the site running Simpletest.
DrupalTestCase::insertAssert public static function Store an assertion from outside the testing context.
DrupalTestCase::pass protected function Fire an assertion that is always positive.
DrupalTestCase::randomName public static function Generates a random string containing letters and numbers.
DrupalTestCase::randomString public static function Generates a random string of ASCII characters of codes 32 to 126.
DrupalTestCase::run public function Run all tests in this class.
DrupalTestCase::verbose protected function Logs a verbose message in a text file.
DrupalUnitTestCase::tearDown protected function 1
DrupalUnitTestCase::__construct function Constructor for DrupalUnitTestCase. Overrides DrupalTestCase::__construct