'CSV parser functional tests', 'description' => 'Tests the CSV parser using the UI.', 'group' => 'Feeds', ); } /** * Tests parsing a CSV when the mbstring extension is not available. */ public function testMbstringExtensionDisabled() { // Set "feeds_use_mbstring" to FALSE to emulate that the mbstring extension // is not loaded. variable_set('feeds_use_mbstring', FALSE); // Remove items after parsing because in < PHP 5.4 processing items with // encoding issues leads to test failures because check_plain() can only // handle UTF-8 encoded strings. // @see feeds_tests_feeds_after_parse() variable_set('feeds_tests_feeds_after_parse_empty_items', TRUE); // Create node type. $node_type = $this->drupalCreateContentType(); // Create and configure importer. $this->createImporterConfiguration('Content CSV', 'csv'); $this->setPlugin('csv', 'FeedsFileFetcher'); $this->setPlugin('csv', 'FeedsCSVParser'); $this->setSettings('csv', 'FeedsNodeProcessor', array('bundle' => $node_type->type)); $this->addMappings('csv', array( 0 => array( 'source' => 'id', 'target' => 'guid', ), 1 => array( 'source' => 'text', 'target' => 'title', ), )); // Ensure that on the CSV parser settings page a message is shown about that // the mbstring extension is not available. $this->drupalGet('admin/structure/feeds/csv/settings/FeedsCSVParser'); $this->assertNoField('encoding'); $this->assertText('PHP mbstring extension must be available for character encoding conversion.'); // Try to import a CSV file that is not UTF-8 encoded. No encoding warning // should be shown, but import should fail. $this->importFile('csv', $this->absolutePath() . '/tests/feeds/encoding_SJIS.csv'); $this->assertNoText('Source file is not in UTF-8 encoding.'); } /** * Tests an encoding failure during parsing a CSV. */ public function testEncodingFailure() { // Create node type. $node_type = $this->drupalCreateContentType(); // Create and configure importer. $this->createImporterConfiguration('Content CSV', 'csv'); $this->setPlugin('csv', 'FeedsFileFetcher'); $this->setPlugin('csv', 'FeedsCSVParser'); $this->setSettings('csv', 'FeedsNodeProcessor', array('bundle' => $node_type->type)); $this->addMappings('csv', array( 0 => array( 'source' => 'id', 'target' => 'guid', ), 1 => array( 'source' => 'text', 'target' => 'title', ), )); // Ensure that on the CSV parser settings page a setting for encoding is // shown. $this->drupalGet('admin/structure/feeds/csv/settings/FeedsCSVParser'); $this->assertField('encoding'); $this->assertNoText('PHP mbstring extension must be available for character encoding conversion.'); // Try to import a CSV file that is not UTF-8 encoded. Import should be // halted and an encoding warning should be shown. $this->importFile('csv', $this->absolutePath() . '/tests/feeds/encoding_SJIS.csv'); $this->assertNoText('Failed importing 4 nodes.'); $this->assertText('Source file is not in UTF-8 encoding.'); } }