You are here

parser_csv.test in Feeds 7

Same filename and directory in other branches
  1. 6 tests/parser_csv.test
  2. 7.2 tests/parser_csv.test

Tests for ParserCSV library.

File

tests/parser_csv.test
View source
<?php

/**
 * @file
 * Tests for ParserCSV library.
 */

/**
 * Test aggregating a feed as node items.
 *
 * Using DrupalWebTestCase as DrupalUnitTestCase is broken in SimpleTest 2.8.
 * Not inheriting from Feeds base class as ParserCSV should be moved out of
 * Feeds at some time.
 */
class ParserCSVTest extends DrupalWebTestCase {

  /**
   * Describe this test.
   */
  public function getInfo() {
    return array(
      'name' => t('CSV Parser unit tests'),
      'description' => t('Base level test for Feeds\' built in CSV parser.'),
      'group' => t('Feeds'),
    );
  }

  /**
   * Test method.
   */
  public function test() {
    drupal_load('module', 'feeds');
    feeds_include_library('ParserCSV.inc', 'ParserCSV');
    $this
      ->_testSimple();
    $this
      ->_testBatching();
  }

  /**
   * Simple test of parsing functionality.
   */
  protected function _testSimple() {
    $file = $this
      ->absolutePath() . '/tests/feeds/nodes.csv';
    include $this
      ->absolutePath() . '/tests/feeds/nodes.csv.php';
    $iterator = new ParserCSVIterator($file);
    $parser = new ParserCSV();
    $parser
      ->setDelimiter(',');
    $rows = $parser
      ->parse($iterator);
    $this
      ->assertFalse($parser
      ->lastLinePos(), t('Parser reports all lines parsed'));
    $this
      ->assertEqual(md5(serialize($rows)), md5(serialize($control_result)), t('Parsed result matches control result.'));
  }

  /**
   * Test batching.
   */
  protected function _testBatching() {
    $file = $this
      ->absolutePath() . '/tests/feeds/nodes.csv';
    include $this
      ->absolutePath() . '/tests/feeds/nodes.csv.php';

    // Set up parser with 2 lines to parse per call.
    $iterator = new ParserCSVIterator($file);
    $parser = new ParserCSV();
    $parser
      ->setDelimiter(',');
    $parser
      ->setLineLimit(2);
    $rows = array();
    $pos = 0;

    // Call parser until all lines are parsed, then compare to control result.
    do {
      $parser
        ->setStartByte($pos);
      $rows = array_merge($rows, $parser
        ->parse($iterator));
      $pos = $parser
        ->lastLinePos();
      $this
        ->assertTrue($parser
        ->lastLinePos() || count($rows) == 10, t('Parser reports line limit correctly'));
    } while ($pos = $parser
      ->lastLinePos());
    $this
      ->assertEqual(md5(serialize($rows)), md5(serialize($control_result)), t('Parsed result matches control result.'));
  }

  /**
   * Absolute path to feeds.
   */
  public function absolutePath() {
    return DRUPAL_ROOT . '/' . drupal_get_path('module', 'feeds');
  }

}

Classes

Namesort descending Description
ParserCSVTest Test aggregating a feed as node items.