'CSV Export', 'description' => 'Various tests for exporting to CSV.', 'group' => 'Views Data Export', ); } protected $vde_export_type = 'CSV'; protected function getStylePluginName() { return 'views_data_export_csv'; } protected function getExportView($path = 'vde_test') { // Create the basic view. $view = $this->getBasicExportView(); $display = $view->new_display('views_data_export', 'Data export', 'vde_test'); $display->override_option('style_plugin', $this->getStylePluginName()); $display->override_option('path', $path); $expected = '"ID","Name","Age" "1","John","25" "2","George","27" "3","Ringo","28" "4","Paul","26" "5","Meredith","30"'; return array(&$view, $expected); } /** * Test to ensure that HTML tags are kept in CSV files when requested. */ protected function testKeepHTML() { $view = $this->getBasicExportView(); $display = $view->display['default']->handler; $display->override_option('fields', array( 'id' => array( 'id' => 'id', 'table' => 'views_test', 'field' => 'id', 'relationship' => 'none', // Add a label to include HTML 'label' => 'ID', ), 'name' => array( 'id' => 'name', 'table' => 'views_test', 'field' => 'name', 'relationship' => 'none', // Alter this field to include HTML. 'alter' => array( 'alter_text' => TRUE, 'text' => '[name]', ), ), 'age' => array( 'id' => 'age', 'table' => 'views_test', 'field' => 'age', 'relationship' => 'none', ), )); $style_options = array( 'keep_html' => TRUE, ); $expected = '"ID","Name","Age" "1","John","25" "2","George","27" "3","Ringo","28" "4","Paul","26" "5","Meredith","30"'; $message = 'Keep HTML test in ' . $this->vde_export_type . ' export matched expected output.'; $this->executeAndCompareGivenView($view, $expected, $message, $style_options); // And now make sure that HTML tags are stripped correctly. $style_options = array( 'keep_html' => FALSE, ); $expected = '"ID","Name","Age" "1","John","25" "2","George","27" "3","Ringo","28" "4","Paul","26" "5","Meredith","30"'; $message = 'Keep HTML reverse test in ' . $this->vde_export_type . ' export matched expected output.'; $this->executeAndCompareGivenView($view, $expected, $message, $style_options); } /** * Test to ensure that HTML tags are kept in CSV files when requested. */ protected function testTrimFields() { $view = $this->getBasicExportView(); $display = $view->display['default']->handler; $display->override_option('fields', array( 'id' => array( 'id' => 'id', 'table' => 'views_test', 'field' => 'id', 'relationship' => 'none', 'label' => 'ID', ), 'name' => array( 'id' => 'name', 'table' => 'views_test', 'field' => 'name', 'relationship' => 'none', // Alter this field to include HTML. 'alter' => array( 'alter_text' => TRUE, 'text' => ' [name] ', ), ), 'age' => array( 'id' => 'age', 'table' => 'views_test', 'field' => 'age', 'relationship' => 'none', ), )); $style_options = array( 'trim' => FALSE, ); $expected = '"ID","Name","Age" "1"," John ","25" "2"," George ","27" "3"," Ringo ","28" "4"," Paul ","26" "5"," Meredith ","30"'; $message = 'Trim reverse test in ' . $this->vde_export_type . ' export matched expected output.'; $this->executeAndCompareGivenView($view, $expected, $message, $style_options); // And now make sure that trimming works as expected. $style_options = array( 'trim' => TRUE, ); $expected = '"ID","Name","Age" "1","John","25" "2","George","27" "3","Ringo","28" "4","Paul","26" "5","Meredith","30"'; $message = 'Trim test in ' . $this->vde_export_type . ' export matched expected output.'; $this->executeAndCompareGivenView($view, $expected, $message, $style_options); } /** * Test to ensure that Encoding options work. */ protected function testIconvEncoding() { $view = $this->getBasicExportView(); db_update('views_test') ->fields(array('name' => 'Jo€hn')) ->condition('name', 'John') ->execute(); $encodings = array( 'ISO-8859-1//TRANSLIT' => 'EUR', 'utf8_decode' => '?', ); foreach ($encodings as $encoding => $conversion) { $style_options = array( 'encoding' => $encoding, ); $expected = '"ID","Name","Age" "1","Jo' . $conversion . 'hn","25" "2","George","27" "3","Ringo","28" "4","Paul","26" "5","Meredith","30"'; $message = 'Character encoding ' . $encoding . ' worked correctly.'; $this->executeAndCompareGivenView($view, $expected, $message, $style_options); } } /** * Test to ensure that all new line characters are replaced in CSV files when requested. */ protected function testReplaceNewLines() { $view = $this->getBasicExportView(); $display = $view->display['default']->handler; $display->override_option('fields', array( 'id' => array( 'id' => 'id', 'table' => 'views_test', 'field' => 'id', 'relationship' => 'none', 'label' => 'ID', ), 'name' => array( 'id' => 'name', 'table' => 'views_test', 'field' => 'name', 'relationship' => 'none', ), 'age' => array( 'id' => 'age', 'table' => 'views_test', 'field' => 'age', 'relationship' => 'none', ), 'job' => array( 'id' => 'job', 'table' => 'views_test', 'field' => 'job', 'relationship' => 'none', ), )); $style_options = array( 'replace_newlines' => TRUE, 'newline_replacement' => ';', 'newline_token' => 0, ); $expected = <<executeAndCompareGivenView($view, $expected, $message, $style_options); // And now replace all kind of newlines. $style_options = array( 'replace_newlines' => TRUE, 'newline_replacement' => ';', 'newline_token' => 1, ); $expected = '"ID","Name","Age","Job" "1","John","25","Singer;Songwriter;Pianist" "2","George","27","Singer;Guitar player;Sitar player" "3","Ringo","28","Drummer" "4","Paul","26","Songwriter;Bass guitarist" "5","Meredith","30","Speaker"'; $message = 'All newline characters are replaced.'; $this->executeAndCompareGivenView($view, $expected, $message, $style_options); } }