Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

87 lines (74 sloc) 3.755 kb
<?php
class CSVParserTest extends SapphireTest {
function testParsingWithHeaders() {
/* By default, a CSV file will be interpreted as having headers */
$csv = new CSVParser('sapphire/tests/dev/CsvBulkLoaderTest_PlayersWithHeader.csv');
$firstNames = $birthdays = $biographies = $registered = array();
foreach($csv as $record) {
/* Each row in the CSV file will be keyed with the header row */
$this->assertEquals(array('FirstName','Biography','Birthday','IsRegistered'), array_keys($record));
$firstNames[] = $record['FirstName'];
$biographies[] = $record['Biography'];
$birthdays[] = $record['Birthday'];
$registered[] = $record['IsRegistered'];
}
$this->assertEquals(array('John','Jane','Jamie','Järg'), $firstNames);
$this->assertEquals(array(
"He's a good guy",
sprintf("She is awesome.%sSo awesome that she gets multiple rows and \"escaped\" strings in her biography", PHP_EOL),
"Pretty old, with an escaped comma",
"Unicode FTW"), $biographies);
$this->assertEquals(array("31/01/1988","31/01/1982","31/01/1882","31/06/1982"), $birthdays);
$this->assertEquals(array('1', '0', '1', '1'), $registered);
}
function testParsingWithHeadersAndColumnMap() {
/* By default, a CSV file will be interpreted as having headers */
$csv = new CSVParser('sapphire/tests/dev/CsvBulkLoaderTest_PlayersWithHeader.csv');
/* We can set up column remapping. The keys are case-insensitive. */
$csv->mapColumns(array(
'FirstName' => '__fn',
'bIoGrApHy' => '__BG',
));
$firstNames = $birthdays = $biographies = $registered = array();
foreach($csv as $record) {
/* Each row in the CSV file will be keyed with the renamed columns. Any unmapped column names will be left as-is. */
$this->assertEquals(array('__fn','__BG','Birthday','IsRegistered'), array_keys($record));
$firstNames[] = $record['__fn'];
$biographies[] = $record['__BG'];
$birthdays[] = $record['Birthday'];
$registered[] = $record['IsRegistered'];
}
$this->assertEquals(array('John','Jane','Jamie','Järg'), $firstNames);
$this->assertEquals(array(
"He's a good guy",
sprintf("She is awesome.%sSo awesome that she gets multiple rows and \"escaped\" strings in her biography", PHP_EOL),
"Pretty old, with an escaped comma",
"Unicode FTW"), $biographies);
$this->assertEquals(array("31/01/1988","31/01/1982","31/01/1882","31/06/1982"), $birthdays);
$this->assertEquals(array('1', '0', '1', '1'), $registered);
}
function testParsingWithExplicitHeaderRow() {
/* If your CSV file doesn't have a header row */
$csv = new CSVParser('sapphire/tests/dev/CsvBulkLoaderTest_PlayersWithHeader.csv');
$csv->provideHeaderRow(array('__fn','__bio','__bd','__reg'));
$firstNames = $birthdays = $biographies = $registered = array();
foreach($csv as $record) {
/* Each row in the CSV file will be keyed with the header row that you gave */
$this->assertEquals(array('__fn','__bio','__bd','__reg'), array_keys($record));
$firstNames[] = $record['__fn'];
$biographies[] = $record['__bio'];
$birthdays[] = $record['__bd'];
$registered[] = $record['__reg'];
}
/* And the first row will be returned in the data */
$this->assertEquals(array('FirstName','John','Jane','Jamie','Järg'), $firstNames);
$this->assertEquals(array(
'Biography',
"He's a good guy",
sprintf("She is awesome.%sSo awesome that she gets multiple rows and \"escaped\" strings in her biography", PHP_EOL),
"Pretty old, with an escaped comma",
"Unicode FTW"), $biographies);
$this->assertEquals(array("Birthday","31/01/1988","31/01/1982","31/01/1882","31/06/1982"), $birthdays);
$this->assertEquals(array('IsRegistered', '1', '0', '1', '1'), $registered);
}
}
Jump to Line
Something went wrong with that request. Please try again.