StreamTest.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Functional;
  3. use PhpOffice\PhpSpreadsheet\IOFactory;
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PHPUnit\Framework\TestCase;
  6. class StreamTest extends TestCase
  7. {
  8. public function providerFormats(): array
  9. {
  10. $providerFormats = [
  11. ['Xls'],
  12. ['Xlsx'],
  13. ['Ods'],
  14. ['Csv'],
  15. ['Html'],
  16. ['Mpdf'],
  17. ['Dompdf'],
  18. ['Tcpdf'],
  19. ];
  20. return $providerFormats;
  21. }
  22. /**
  23. * @dataProvider providerFormats
  24. */
  25. public function testAllWritersCanWriteToStream(string $format): void
  26. {
  27. $spreadsheet = new Spreadsheet();
  28. $spreadsheet->getActiveSheet()->setCellValue('A1', 'foo');
  29. $writer = IOFactory::createWriter($spreadsheet, $format);
  30. $stream = fopen('php://memory', 'wb+');
  31. $stat = ($stream === false) ? false : fstat($stream);
  32. if ($stream === false || $stat === false) {
  33. self::fail('fopen or fstat failed');
  34. } else {
  35. self::assertSame(0, $stat['size']);
  36. $writer->save($stream);
  37. self::assertIsResource($stream, 'should not close the stream for further usage out of PhpSpreadsheet');
  38. $stat = fstat($stream);
  39. if ($stat === false) {
  40. self::fail('fstat failed');
  41. } else {
  42. self::assertGreaterThan(0, $stat['size'], 'something should have been written to the stream');
  43. }
  44. self::assertGreaterThan(0, ftell($stream), 'should not be rewinded, because not all streams support it');
  45. }
  46. }
  47. }