IOFactoryTest.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests;
  3. use PhpOffice\PhpSpreadsheet\IOFactory;
  4. use PhpOffice\PhpSpreadsheet\Reader;
  5. use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
  6. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  7. use PhpOffice\PhpSpreadsheet\Writer;
  8. use PHPUnit\Framework\TestCase;
  9. class IOFactoryTest extends TestCase
  10. {
  11. /**
  12. * @dataProvider providerCreateWriter
  13. *
  14. * @param string $name
  15. * @param string $expected
  16. */
  17. public function testCreateWriter($name, $expected): void
  18. {
  19. $spreadsheet = new Spreadsheet();
  20. $actual = IOFactory::createWriter($spreadsheet, $name);
  21. self::assertSame($expected, get_class($actual));
  22. }
  23. public function providerCreateWriter(): array
  24. {
  25. return [
  26. ['Xls', Writer\Xls::class],
  27. ['Xlsx', Writer\Xlsx::class],
  28. ['Ods', Writer\Ods::class],
  29. ['Csv', Writer\Csv::class],
  30. ['Html', Writer\Html::class],
  31. ['Mpdf', Writer\Pdf\Mpdf::class],
  32. ['Tcpdf', Writer\Pdf\Tcpdf::class],
  33. ['Dompdf', Writer\Pdf\Dompdf::class],
  34. ];
  35. }
  36. public function testRegisterWriter(): void
  37. {
  38. IOFactory::registerWriter('Pdf', Writer\Pdf\Mpdf::class);
  39. $spreadsheet = new Spreadsheet();
  40. $actual = IOFactory::createWriter($spreadsheet, 'Pdf');
  41. self::assertInstanceOf(Writer\Pdf\Mpdf::class, $actual);
  42. }
  43. /**
  44. * @dataProvider providerCreateReader
  45. *
  46. * @param string $name
  47. * @param string $expected
  48. */
  49. public function testCreateReader($name, $expected): void
  50. {
  51. $actual = IOFactory::createReader($name);
  52. self::assertSame($expected, get_class($actual));
  53. }
  54. public function providerCreateReader(): array
  55. {
  56. return [
  57. ['Xls', Reader\Xls::class],
  58. ['Xlsx', Reader\Xlsx::class],
  59. ['Xml', Reader\Xml::class],
  60. ['Ods', Reader\Ods::class],
  61. ['Gnumeric', Reader\Gnumeric::class],
  62. ['Csv', Reader\Csv::class],
  63. ['Slk', Reader\Slk::class],
  64. ['Html', Reader\Html::class],
  65. ];
  66. }
  67. public function testRegisterReader(): void
  68. {
  69. IOFactory::registerReader('Custom', Reader\Html::class);
  70. $actual = IOFactory::createReader('Custom');
  71. self::assertInstanceOf(Reader\Html::class, $actual);
  72. }
  73. /**
  74. * @dataProvider providerIdentify
  75. */
  76. public function testIdentifyCreateLoad(string $file, string $expectedName, string $expectedClass): void
  77. {
  78. $actual = IOFactory::identify($file);
  79. self::assertSame($expectedName, $actual);
  80. $actual = IOFactory::createReaderForFile($file);
  81. self::assertSame($expectedClass, get_class($actual));
  82. $actual = IOFactory::load($file);
  83. self::assertInstanceOf(Spreadsheet::class, $actual);
  84. }
  85. public function providerIdentify(): array
  86. {
  87. return [
  88. ['samples/templates/26template.xlsx', 'Xlsx', Reader\Xlsx::class],
  89. ['samples/templates/GnumericTest.gnumeric', 'Gnumeric', Reader\Gnumeric::class],
  90. ['samples/templates/old.gnumeric', 'Gnumeric', Reader\Gnumeric::class],
  91. ['samples/templates/30template.xls', 'Xls', Reader\Xls::class],
  92. ['samples/templates/OOCalcTest.ods', 'Ods', Reader\Ods::class],
  93. ['samples/templates/SylkTest.slk', 'Slk', Reader\Slk::class],
  94. ['samples/templates/excel2003.xml', 'Xml', Reader\Xml::class],
  95. // Following not readable by Excel.
  96. //['samples/templates/Excel2003XMLTest.xml', 'Xml', Reader\Xml::class],
  97. ['samples/templates/46readHtml.html', 'Html', Reader\Html::class],
  98. ];
  99. }
  100. public function testFormatAsExpected(): void
  101. {
  102. $fileName = 'samples/templates/30template.xls';
  103. $actual = IOFactory::identify($fileName, [IOFactory::READER_XLS]);
  104. self::assertSame('Xls', $actual);
  105. }
  106. public function testFormatNotAsExpectedThrowsException(): void
  107. {
  108. $fileName = 'samples/templates/30template.xls';
  109. $this->expectException(ReaderException::class);
  110. IOFactory::identify($fileName, [IOFactory::READER_ODS]);
  111. }
  112. public function testIdentifyNonExistingFileThrowException(): void
  113. {
  114. $this->expectException(ReaderException::class);
  115. IOFactory::identify('/non/existing/file');
  116. }
  117. public function testIdentifyExistingDirectoryThrowExceptions(): void
  118. {
  119. $this->expectException(ReaderException::class);
  120. IOFactory::identify('.');
  121. }
  122. public function testRegisterInvalidWriter(): void
  123. {
  124. $this->expectException(\PhpOffice\PhpSpreadsheet\Writer\Exception::class);
  125. IOFactory::registerWriter('foo', 'bar');
  126. }
  127. public function testRegisterInvalidReader(): void
  128. {
  129. $this->expectException(\PhpOffice\PhpSpreadsheet\Reader\Exception::class);
  130. IOFactory::registerReader('foo', 'bar');
  131. }
  132. public function testCreateInvalidWriter(): void
  133. {
  134. $this->expectException(\PhpOffice\PhpSpreadsheet\Writer\Exception::class);
  135. $spreadsheet = new Spreadsheet();
  136. IOFactory::createWriter($spreadsheet, 'bad');
  137. }
  138. public function testCreateInvalidReader(): void
  139. {
  140. $this->expectException(\PhpOffice\PhpSpreadsheet\Reader\Exception::class);
  141. IOFactory::createReader('bad');
  142. }
  143. public function testCreateReaderUnknownExtension(): void
  144. {
  145. $filename = 'samples/Reader/sampleData/example1.tsv';
  146. $reader = IOFactory::createReaderForFile($filename);
  147. self::assertEquals('PhpOffice\\PhpSpreadsheet\\Reader\\Csv', get_class($reader));
  148. }
  149. public function testCreateReaderCsvExtension(): void
  150. {
  151. $filename = 'samples/Reader/sampleData/example1.csv';
  152. $reader = IOFactory::createReaderForFile($filename);
  153. self::assertEquals('PhpOffice\\PhpSpreadsheet\\Reader\\Csv', get_class($reader));
  154. }
  155. public function testCreateReaderNoExtension(): void
  156. {
  157. $filename = 'samples/Reader/sampleData/example1xls';
  158. $reader = IOFactory::createReaderForFile($filename);
  159. self::assertEquals('PhpOffice\\PhpSpreadsheet\\Reader\\Xls', get_class($reader));
  160. }
  161. public function testCreateReaderNotSpreadsheet(): void
  162. {
  163. $this->expectException(\PhpOffice\PhpSpreadsheet\Reader\Exception::class);
  164. $filename = __FILE__;
  165. IOFactory::createReaderForFile($filename);
  166. }
  167. }