152 lines
3.9 KiB
PHP
152 lines
3.9 KiB
PHP
<?php
|
|
namespace nur\io\csv;
|
|
|
|
use nur\t\TestCase;
|
|
|
|
class CsvReaderTest extends TestCase {
|
|
function testReader1() {
|
|
$rwf = fopen("php://memory", "w+b");
|
|
fwrite($rwf, <<<EOT
|
|
nom,prenom,age
|
|
clain,jephté,45
|
|
enpion,tarte,36
|
|
x,y
|
|
z
|
|
|
|
a,b
|
|
first,second
|
|
EOT
|
|
);
|
|
|
|
rewind($rwf);
|
|
$reader = new CsvReader($rwf);
|
|
$reader->setMultiSchema(true);
|
|
$rows = iterator_to_array($reader);
|
|
self::assertSame([
|
|
["nom" => "clain", "prenom" => "jephté", "age" => "45"],
|
|
["nom" => "enpion", "prenom" => "tarte", "age" => "36"],
|
|
["nom" => "x", "prenom" => "y", "age" => false],
|
|
["nom" => "z", "prenom" => false, "age" => false],
|
|
["a" => "first", "b" => "second"],
|
|
], $rows);
|
|
}
|
|
|
|
function testReader2() {
|
|
$rwf = fopen("php://memory", "w+b");
|
|
fwrite($rwf, <<<EOT
|
|
nom,comment,num
|
|
clain,"ceci est
|
|
un commentaire",45
|
|
EOT
|
|
);
|
|
|
|
rewind($rwf);
|
|
$reader = new CsvReader($rwf);
|
|
$rows = iterator_to_array($reader);
|
|
self::assertSame([
|
|
["nom" => "clain", "comment" => "ceci est
|
|
un commentaire", "num" => "45"],
|
|
], $rows);
|
|
}
|
|
|
|
function testReader3() {
|
|
$rwf = fopen("php://memory", "w+b");
|
|
fwrite($rwf, "");
|
|
|
|
rewind($rwf);
|
|
$reader = new CsvReader($rwf);
|
|
$rows = iterator_to_array($reader);
|
|
self::assertSame([], $rows);
|
|
}
|
|
|
|
function testReader4() {
|
|
$rwf = fopen("php://memory", "w+b");
|
|
fwrite($rwf, "nom,prenom,age");
|
|
|
|
rewind($rwf);
|
|
$reader = new CsvReader($rwf);
|
|
$rows = iterator_to_array($reader);
|
|
self::assertSame([], $rows);
|
|
}
|
|
|
|
function testReader5() {
|
|
$reader = new CsvReader(__DIR__ . "/utf8.csv");
|
|
$rows = iterator_to_array($reader);
|
|
self::assertSame([
|
|
["nom" => "clain", "prénom" => "jephté", "age" => "45"],
|
|
], $rows);
|
|
|
|
$reader = new CsvReader(__DIR__ . "/cp1252.csv");
|
|
$reader->setEncodingFilter("cp1252");
|
|
$rows = iterator_to_array($reader);
|
|
self::assertSame([
|
|
["nom" => "clain", "prénom" => "jephté", "age" => "45"],
|
|
], $rows);
|
|
}
|
|
|
|
function testMappings() {
|
|
$rwf = fopen("php://memory", "w+b");
|
|
fwrite($rwf, <<<EOT
|
|
nom,prenom,age,ville
|
|
clain,jephté,45,sainte-clotilde
|
|
enpion,tarte,36,missile fixe
|
|
EOT
|
|
);
|
|
|
|
###########################################################################
|
|
## mappings au format chaine
|
|
|
|
# tester includes + excludes + remap
|
|
# ordre du mapping
|
|
rewind($rwf);
|
|
$reader = new CsvReader($rwf, [
|
|
"header_mappings" => "=prenom,annees=age,nom",
|
|
]);
|
|
$rows = iterator_to_array($reader);
|
|
self::assertSame([
|
|
["annees" => "45", "nom" => "clain"],
|
|
["annees" => "36", "nom" => "enpion"],
|
|
], $rows);
|
|
|
|
# tester excludes + remap
|
|
# ordre de la source
|
|
rewind($rwf);
|
|
$reader = new CsvReader($rwf, [
|
|
"header_mappings" => "=prenom,annees=age",
|
|
]);
|
|
$rows = iterator_to_array($reader);
|
|
self::assertSame([
|
|
["nom" => "clain", "annees" => "45", "ville" => "sainte-clotilde"],
|
|
["nom" => "enpion", "annees" => "36", "ville" => "missile fixe"],
|
|
], $rows);
|
|
|
|
###########################################################################
|
|
## mappings au format tableau
|
|
|
|
# tester includes + excludes + remap
|
|
# ordre du mapping
|
|
rewind($rwf);
|
|
$reader = new CsvReader($rwf, [
|
|
"header_mappings" => ["prenom" => null, "annees" => "age", "nom"],
|
|
]);
|
|
$rows = iterator_to_array($reader);
|
|
self::assertSame([
|
|
["annees" => "45", "nom" => "clain"],
|
|
["annees" => "36", "nom" => "enpion"],
|
|
], $rows);
|
|
|
|
# tester excludes + remap
|
|
# ordre de la source
|
|
rewind($rwf);
|
|
$reader = new CsvReader($rwf, [
|
|
"header_mappings" => ["prenom" => null, "annees" => "age"],
|
|
]);
|
|
$rows = iterator_to_array($reader);
|
|
self::assertSame([
|
|
["nom" => "clain", "annees" => "45", "ville" => "sainte-clotilde"],
|
|
["nom" => "enpion", "annees" => "36", "ville" => "missile fixe"],
|
|
], $rows);
|
|
|
|
}
|
|
}
|