You are here

class CSVExportViewsDataExportExporterTests in Views data export 7.4

Hierarchy

Expanded class hierarchy of CSVExportViewsDataExportExporterTests

File

tests/exporter_tests/csv.test, line 3

View source
class CSVExportViewsDataExportExporterTests extends ViewsDataExportExporterBaseTest {
  protected $profile = 'testing';
  public static function getInfo() {
    return array(
      'name' => 'CSV Exporter Test',
      'description' => 'Various tests for export using the CSV exporter class.',
      'group' => 'Views Data Export',
    );
  }
  protected function getExporter($options = array()) {

    // todo Replace require_once with an autoloader.
    require_once dirname(__FILE__) . '/../../exporters/views_data_export_exporter_delimited.inc';
    $classname = $this
      ->getExporterClassName();
    return new $classname($options);
  }
  protected function getExporterClassName() {
    return 'ViewsDataExportExporterDelimited';
  }

  /**
   * A very simple test dataset.
   */
  protected function dataSet() {
    return array(
      array(
        'name' => 'John',
        'age' => 25,
        'job' => 'Singer',
        'created' => gmmktime(0, 0, 0, 1, 1, 2000),
      ),
      array(
        'name' => 'George',
        'age' => 27,
        'job' => 'Singer',
        'created' => gmmktime(0, 0, 0, 1, 2, 2000),
      ),
      array(
        'name' => 'Ringo',
        'age' => 28,
        'job' => 'Drummer',
        'created' => gmmktime(6, 30, 30, 1, 1, 2000),
      ),
      array(
        'name' => 'Paul',
        'age' => 26,
        'job' => 'Songwriter',
        'created' => gmmktime(6, 0, 0, 1, 1, 2000),
      ),
      array(
        'name' => 'Meredith',
        'age' => 30,
        'job' => 'Speaker',
        'created' => gmmktime(6, 30, 10, 1, 1, 2000),
      ),
    );
  }

  /**
   * Test the header writing.
   */
  protected function testBOF() {
    $field_titles = array(
      'name',
      'age',
      'job',
      'created',
    );
    $result = $this
      ->executeBOF($this
      ->getExporter(array(
      'field_labels' => array(
        'name',
        'age',
        'job',
        'created',
      ),
    )), $field_titles);
    $expected = '"name","age","job","created"
';
    $this
      ->logVerboseResult($result, 'Actual result');
    $this
      ->logVerboseResult($expected, 'Expected result');
    $this
      ->assertEqual($result, $expected, 'The header is as expected.');
  }

  /**
   * Test out the exporter separator option with a few different characters.
   */
  protected function testSeparatorOptions() {

    // Write the dataset, comma separated.
    $result = $this
      ->executeFullWrite($this
      ->getExporter(array(
      'separator' => ',',
    )), $this
      ->dataSet(), 0, array(
      'name' => 'Name',
      'age' => 'Age',
      'job' => 'Job',
      'created' => 'Created',
    ));
    $expected = '"John","25","Singer","946684800"
"George","27","Singer","946771200"
"Ringo","28","Drummer","946708230"
"Paul","26","Songwriter","946706400"
"Meredith","30","Speaker","946708210"
';
    $this
      ->logVerboseResult($result, 'Actual result');
    $this
      ->logVerboseResult($expected, 'Expected result');
    $this
      ->assertEqual($result, $expected, 'The CSV output is as expected.');

    // Write the dataset, tab separated.
    $result = $this
      ->executeFullWrite($this
      ->getExporter(array(
      'separator' => "\t",
    )), $this
      ->dataSet(), 0, array(
      'name' => 'Name',
      'age' => 'Age',
      'job' => 'Job',
      'created' => 'Created',
    ));
    $expected = '"John"' . "\t" . '"25"' . "\t" . '"Singer"' . "\t" . '"946684800"
"George"' . "\t" . '"27"' . "\t" . '"Singer"' . "\t" . '"946771200"
"Ringo"' . "\t" . '"28"' . "\t" . '"Drummer"' . "\t" . '"946708230"
"Paul"' . "\t" . '"26"' . "\t" . '"Songwriter"' . "\t" . '"946706400"
"Meredith"' . "\t" . '"30"' . "\t" . '"Speaker"' . "\t" . '"946708210"
';
    $this
      ->logVerboseResult($result, 'Actual result');
    $this
      ->logVerboseResult($expected, 'Expected result');
    $this
      ->assertEqual($result, $expected, 'The CSV output is as expected.');
  }

  /**
   * Test the whitespace trim function
   */
  protected function testTrim() {
    $dataSet = array(
      array(
        'name' => '      John      ',
        'age' => 25,
        'job' => 'Singer',
        'created' => gmmktime(0, 0, 0, 1, 1, 2000),
      ),
    );
    $result = $this
      ->executeFullWrite($this
      ->getExporter(array(
      'trim' => true,
    )), $dataSet, 0, array(
      'name' => 'Name',
      'age' => 'Age',
      'job' => 'Job',
      'created' => 'Created',
    ));
    $expected = '"John","25","Singer","946684800"
';
    $this
      ->logVerboseResult($result, 'Actual result');
    $this
      ->logVerboseResult($expected, 'Expected result');
    $this
      ->assertEqual($result, $expected, 'The CSV output is as expected.');
  }
  protected function testQuoteOptions() {

    // Write a dataset with quotes inside, and test the quote removal option.
    $dataSet = array(
      array(
        'name' => 'John, the one with cool hair',
        'age' => 25,
        'job' => 'Sin,ger',
        'created' => gmmktime(0, 0, 0, 1, 1, 2000),
      ),
    );
    $result = $this
      ->executeFullWrite($this
      ->getExporter(array(
      'separator' => ",",
      'quote' => true,
    )), $dataSet, 0, array(
      'name' => 'Name',
      'age' => 'Age',
      'job' => 'Job',
      'created' => 'Created',
    ));
    $expected = '"John, the one with cool hair","25","Sin,ger","946684800"
';
    $this
      ->logVerboseResult($result, 'Actual result');
    $this
      ->logVerboseResult($expected, 'Expected result');
    $this
      ->assertEqual($result, $expected, 'The CSV output is as expected.');
  }

  /**
   * Test the newline replacement option.
   */
  protected function testNewLineOptions() {

    // Write a dataset with newlines in the field values.
    $dataSet = array(
      array(
        'name' => 'John, the one with
cool hair',
        'age' => 25,
        'job' => 'Singer',
        'created' => gmmktime(0, 0, 0, 1, 1, 2000),
      ),
    );
    $result = $this
      ->executeFullWrite($this
      ->getExporter(array(
      'separator' => ",",
      'quote' => true,
      'replace_newlines' => true,
      'newline_replacement' => 'NEWLINE',
    )), $dataSet, 0, array(
      'name' => 'Name',
      'age' => 'Age',
      'job' => 'Job',
      'created' => 'Created',
    ));
    $expected = '"John, the one withNEWLINEcool hair","25","Singer","946684800"
';
    $this
      ->logVerboseResult($result, 'Actual result');
    $this
      ->logVerboseResult($expected, 'Expected result');
    $this
      ->assertEqual($result, $expected, 'The CSV output is as expected.');
  }

  /**
   * Test the HTML escaping option.
   */
  protected function testHTMLOptions() {

    // Write a dataset with HTML inside, and test that it's kept.
    $dataSet = array(
      array(
        'name' => '<em>John</em>',
        'age' => 25,
        'job' => 'Singer',
        'created' => gmmktime(0, 0, 0, 1, 1, 2000),
      ),
    );
    $result = $this
      ->executeFullWrite($this
      ->getExporter(array(
      'separator' => ",",
      'quote' => true,
      'keep_html' => true,
    )), $dataSet, 0, array(
      'name' => 'Name',
      'age' => 'Age',
      'job' => 'Job',
      'created' => 'Created',
    ));
    $expected = '"<em>John</em>","25","Singer","946684800"
';
    $this
      ->logVerboseResult($result, 'Actual result');
    $this
      ->logVerboseResult($expected, 'Expected result');
    $this
      ->assertEqual($result, $expected, 'The CSV output is as expected.');
  }

  /**
   * Test encoding options.
   */
  protected function testEncodingOptions() {

    // A dataset with a non-ASCII UTF-8 character, to help us ensure UTF-8.
    // (As ASCII is a subset of UTF-8, php will detect as ASCII if there are
    // no UTF-8-only characters.)
    $utf_8_dataset = array(
      array(
        'name' => 'JƟhn',
        'age' => 25,
        'job' => 'Singer',
        'created' => gmmktime(0, 0, 0, 1, 1, 2000),
      ),
    );

    // The encodings we want to test, as form_input_value => expected_encoding.
    $encodings = array(
      'utf8_decode' => 'ISO-8859-1',
      'UTF-8' => 'UTF-8',
      //'illegal-encoding-name&*%$' => 'UTF-8',
      '' => 'UTF-8',
    );

    // Render content with each encoding.
    $row_count = 0;
    foreach ($encodings as $encoding => $expected) {
      $result = $this
        ->executeFullWrite($this
        ->getExporter(array(
        'separator' => ',',
        'encoding' => $encoding,
      )), $utf_8_dataset, $row_count, array(
        'name' => 'Name',
        'age' => 'Age',
        'job' => 'Job',
        'created' => 'Created',
      ));
      $row_count++;

      // Check the resulting encoding.
      $result_encoding = mb_detect_encoding($result);
      $encoding_match = in_array($result_encoding, array(
        $expected,
        'ASCII',
      ));
      $this
        ->assertTrue($encoding_match, 'Detected encoding ' . $result_encoding . ' matches ' . $expected . ' for input value ' . $encoding);
    }
  }
  protected function testEOF() {
    $result = $this
      ->executeEOF($this
      ->getExporter());
    $expected = '';
    $this
      ->logVerboseResult($result, 'Actual result');
    $this
      ->logVerboseResult($expected, 'Expected result');
    $this
      ->assertEqual($result, $expected, 'The EOF output is as expected.');
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CSVExportViewsDataExportExporterTests::$profile protected property
CSVExportViewsDataExportExporterTests::dataSet protected function A very simple test dataset.
CSVExportViewsDataExportExporterTests::getExporter protected function
CSVExportViewsDataExportExporterTests::getExporterClassName protected function
CSVExportViewsDataExportExporterTests::getInfo public static function
CSVExportViewsDataExportExporterTests::testBOF protected function Test the header writing.
CSVExportViewsDataExportExporterTests::testEncodingOptions protected function Test encoding options.
CSVExportViewsDataExportExporterTests::testEOF protected function
CSVExportViewsDataExportExporterTests::testHTMLOptions protected function Test the HTML escaping option.
CSVExportViewsDataExportExporterTests::testNewLineOptions protected function Test the newline replacement option.
CSVExportViewsDataExportExporterTests::testQuoteOptions protected function
CSVExportViewsDataExportExporterTests::testSeparatorOptions protected function Test out the exporter separator option with a few different characters.
CSVExportViewsDataExportExporterTests::testTrim protected function Test the whitespace trim function
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.
DrupalUnitTestCase::setUp protected function Sets up unit test environment. 9
DrupalUnitTestCase::tearDown protected function 1
DrupalUnitTestCase::__construct function Constructor for DrupalUnitTestCase. Overrides DrupalTestCase::__construct
ViewsDataExportExporterBaseTest::executeBOF protected function
ViewsDataExportExporterBaseTest::executeEOF protected function
ViewsDataExportExporterBaseTest::executeFullWrite protected function
ViewsDataExportExporterBaseTest::logVerboseResult public function A function to enable the tests to post results to the test results table.
ViewsDataExportExporterBaseTest::verbose protected function Write a message out to the test results table. Overrides DrupalTestCase::verbose