CsvWriterTest.php 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace Exporter\Test\Source;
  3. use Exporter\Writer\CsvWriter;
  4. class CsvWriterTest extends \PHPUnit_Framework_TestCase
  5. {
  6. protected $filename;
  7. public function setUp()
  8. {
  9. $this->filename = 'foobar.csv';
  10. if (is_file($this->filename)) {
  11. unlink($this->filename);
  12. }
  13. }
  14. /**
  15. * @expectedException \Exporter\Exception\InvalidDataFormatException
  16. */
  17. public function testInvalidDataFormat()
  18. {
  19. $writer = new CsvWriter($this->filename, ',', '', "\\", false);
  20. $writer->open();
  21. $writer->write(array('john "2', 'doe', '1'));
  22. }
  23. public function testEnclosureFormating()
  24. {
  25. $writer = new CsvWriter($this->filename, ',', '"', "\\", false);
  26. $writer->open();
  27. $writer->write(array(' john , ""2"', 'doe', '1'));
  28. $writer->close();
  29. $expected = '" john , """"2""",doe,1';
  30. $this->assertEquals($expected, trim(file_get_contents($this->filename)));
  31. }
  32. public function testEnclosureFormatingWithExcel()
  33. {
  34. $writer = new CsvWriter($this->filename, ',', '"', "", false);
  35. $writer->open();
  36. $writer->write(array('john , ""2"', 'doe ', '1'));
  37. $writer->close();
  38. $expected = '"john , """"2""","doe ",1';
  39. $this->assertEquals($expected, trim(file_get_contents($this->filename)));
  40. }
  41. public function testWithHeaders()
  42. {
  43. $writer = new CsvWriter($this->filename, ',', '"', "", true);
  44. $writer->open();
  45. $writer->write(array('name' => 'john , ""2"', 'surname' => 'doe ', 'year' => '2001'));
  46. $writer->close();
  47. $expected = 'name,surname,year'."\n".'"john , """"2""","doe ",2001';
  48. $this->assertEquals($expected, trim(file_get_contents($this->filename)));
  49. }
  50. public function tearDown()
  51. {
  52. unlink($this->filename);
  53. }
  54. }