CsvLineEndingTest.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Csv;
  3. use PhpOffice\PhpSpreadsheet\Reader\Csv;
  4. use PhpOffice\PhpSpreadsheet\Shared\File;
  5. use PHPUnit\Framework\TestCase;
  6. class CsvLineEndingTest extends TestCase
  7. {
  8. /** @var string */
  9. private $tempFile = '';
  10. protected function tearDown(): void
  11. {
  12. if ($this->tempFile !== '') {
  13. unlink($this->tempFile);
  14. $this->tempFile = '';
  15. }
  16. }
  17. /**
  18. * @dataProvider providerEndings
  19. */
  20. public function testEndings(string $ending): void
  21. {
  22. $this->tempFile = $filename = File::temporaryFilename();
  23. $data = ['123', '456', '789'];
  24. file_put_contents($filename, implode($ending, $data));
  25. $reader = new Csv();
  26. $spreadsheet = $reader->load($filename);
  27. $sheet = $spreadsheet->getActiveSheet();
  28. self::assertEquals($data[0], $sheet->getCell('A1')->getValue());
  29. self::assertEquals($data[1], $sheet->getCell('A2')->getValue());
  30. self::assertEquals($data[2], $sheet->getCell('A3')->getValue());
  31. $spreadsheet->disconnectWorksheets();
  32. }
  33. /**
  34. * @dataProvider providerEndings
  35. */
  36. public function testEndingsNoDetect(string $ending): void
  37. {
  38. $this->tempFile = $filename = File::temporaryFilename();
  39. $data = ['123', '456', '789'];
  40. file_put_contents($filename, implode($ending, $data));
  41. $reader = new Csv();
  42. $reader->setTestAutoDetect(false);
  43. $spreadsheet = $reader->load($filename);
  44. $sheet = $spreadsheet->getActiveSheet();
  45. if ($ending === "\r") {
  46. // Can't handle Mac line endings without autoDetect
  47. self::assertEquals(implode("\n", $data), $sheet->getCell('A1')->getValue());
  48. self::assertNull($sheet->getCell('A2')->getValue());
  49. self::assertNull($sheet->getCell('A3')->getValue());
  50. } else {
  51. self::assertEquals($data[0], $sheet->getCell('A1')->getValue());
  52. self::assertEquals($data[1], $sheet->getCell('A2')->getValue());
  53. self::assertEquals($data[2], $sheet->getCell('A3')->getValue());
  54. }
  55. $spreadsheet->disconnectWorksheets();
  56. }
  57. public function providerEndings(): array
  58. {
  59. return [
  60. 'Unix endings' => ["\n"],
  61. 'Mac endings' => ["\r"],
  62. 'Windows endings' => ["\r\n"],
  63. ];
  64. }
  65. }