117 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur\io\csv;
 | 
						|
 | 
						|
use nur\b\io\StringWriter;
 | 
						|
use nur\t\TestCase;
 | 
						|
 | 
						|
class CsvWriterTest extends TestCase {
 | 
						|
  function testWriter() {
 | 
						|
    $w = new StringWriter();
 | 
						|
    $writer = new CsvWriter($w);
 | 
						|
    $writer->writeAll([
 | 
						|
      ["nom" => "clain", "prenom" => "jephté", "age" => 45],
 | 
						|
      ["nom" => "enpion", "prenom" => "tarte", "age" => 36],
 | 
						|
      ["nom" => "cool", "prenom" => "plusieurs
 | 
						|
lignes", "age" => 15],
 | 
						|
    ]);
 | 
						|
    self::assertSame("nom,prenom,age
 | 
						|
clain,jephté,45
 | 
						|
enpion,tarte,36
 | 
						|
cool,\"plusieurs
 | 
						|
lignes\",15
 | 
						|
", $w->getString());
 | 
						|
  }
 | 
						|
 | 
						|
  function testResource() {
 | 
						|
    $w = fopen("php://memory", "w+b");
 | 
						|
    $writer = new CsvWriter($w);
 | 
						|
    $writer->writeAll([
 | 
						|
      ["nom" => "clain", "prenom" => "jephté", "age" => 45],
 | 
						|
      ["nom" => "enpion", "prenom" => "tarte", "age" => 36],
 | 
						|
      ["nom" => "cool", "prenom" => "plusieurs
 | 
						|
lignes", "age" => 15],
 | 
						|
    ]);
 | 
						|
    rewind($w);
 | 
						|
    self::assertSame("nom,prenom,age
 | 
						|
clain,jephté,45
 | 
						|
enpion,tarte,36
 | 
						|
cool,\"plusieurs
 | 
						|
lignes\",15
 | 
						|
", stream_get_contents($w));
 | 
						|
  }
 | 
						|
 | 
						|
  function testEmpty() {
 | 
						|
    $w = new StringWriter();
 | 
						|
    $writer = new CsvWriter($w);
 | 
						|
    $writer->writeAll([]);
 | 
						|
    self::assertSame("", $w->getString());
 | 
						|
 | 
						|
    $w = new StringWriter();
 | 
						|
    $writer = new CsvWriter($w);
 | 
						|
    $writer->setHeaders(["nom", "prenom", "age"]);
 | 
						|
    $writer->writeAll([]);
 | 
						|
    self::assertSame("nom,prenom,age\n", $w->getString());
 | 
						|
  }
 | 
						|
 | 
						|
  function testMappings() {
 | 
						|
    $rows = [
 | 
						|
      ["nom" => "clain", "prenom" => "jephte", "annees" => "45", "ville" => "sainte-clotilde"],
 | 
						|
      ["nom" => "enpion", "prenom" => "tarte", "annees" => "36", "ville" => "missile fixe"],
 | 
						|
    ];
 | 
						|
 | 
						|
    ###########################################################################
 | 
						|
    ## mappings au format chaine
 | 
						|
 | 
						|
    # tester includes + excludes + remap
 | 
						|
    # ordre du mapping
 | 
						|
    $w = new StringWriter();
 | 
						|
    $writer = new CsvWriter($w, [
 | 
						|
      "header_mappings" => "=prenom,annees=age,nom",
 | 
						|
    ]);
 | 
						|
    $writer->writeAll($rows);
 | 
						|
    self::assertSame("prenom,age,nom
 | 
						|
,45,clain
 | 
						|
,36,enpion
 | 
						|
", $w->getString());
 | 
						|
 | 
						|
    # tester excludes + remap
 | 
						|
    # ordre de la source
 | 
						|
    $w = new StringWriter();
 | 
						|
    $writer = new CsvWriter($w, [
 | 
						|
      "header_mappings" => "=prenom,annees=age",
 | 
						|
    ]);
 | 
						|
    $writer->writeAll($rows);
 | 
						|
    self::assertSame("nom,prenom,age,ville
 | 
						|
clain,,45,sainte-clotilde
 | 
						|
enpion,,36,\"missile fixe\"
 | 
						|
", $w->getString());
 | 
						|
 | 
						|
    ###########################################################################
 | 
						|
    ## mappings au format tableau
 | 
						|
 | 
						|
    # tester includes + excludes + remap
 | 
						|
    # ordre du mapping
 | 
						|
    $w = new StringWriter();
 | 
						|
    $writer = new CsvWriter($w, [
 | 
						|
      "header_mappings" => ["prenom" => null, "annees" => "age", "nom"],
 | 
						|
    ]);
 | 
						|
    $writer->writeAll($rows);
 | 
						|
    self::assertSame("prenom,age,nom
 | 
						|
,45,clain
 | 
						|
,36,enpion
 | 
						|
", $w->getString());
 | 
						|
 | 
						|
    # tester excludes + remap
 | 
						|
    # ordre de la source
 | 
						|
    $w = new StringWriter();
 | 
						|
    $writer = new CsvWriter($w, [
 | 
						|
      "header_mappings" => ["prenom" => null, "annees" => "age"],
 | 
						|
    ]);
 | 
						|
    $writer->writeAll($rows);
 | 
						|
    self::assertSame("nom,prenom,age,ville
 | 
						|
clain,,45,sainte-clotilde
 | 
						|
enpion,,36,\"missile fixe\"
 | 
						|
", $w->getString());
 | 
						|
  }
 | 
						|
}
 |