FileTest.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Shared;
  3. use PhpOffice\PhpSpreadsheet\Reader\Exception as ReaderException;
  4. use PhpOffice\PhpSpreadsheet\Shared\File;
  5. use PHPUnit\Framework\TestCase;
  6. class FileTest extends TestCase
  7. {
  8. /** @var bool */
  9. private $uploadFlag = false;
  10. /** @var string */
  11. private $tempfile = '';
  12. protected function setUp(): void
  13. {
  14. $this->uploadFlag = File::getUseUploadTempDirectory();
  15. }
  16. protected function tearDown(): void
  17. {
  18. File::setUseUploadTempDirectory($this->uploadFlag);
  19. if ($this->tempfile !== '') {
  20. unlink($this->tempfile);
  21. $this->tempfile = '';
  22. }
  23. }
  24. public function testGetUseUploadTempDirectory(): void
  25. {
  26. $expectedResult = false;
  27. $result = File::getUseUploadTempDirectory();
  28. self::assertEquals($expectedResult, $result);
  29. }
  30. public function testSetUseUploadTempDirectory(): void
  31. {
  32. $useUploadTempDirectoryValues = [
  33. true,
  34. false,
  35. ];
  36. $temp = ini_get('upload_tmp_dir') ?: '';
  37. $badArray = ['', sys_get_temp_dir()];
  38. foreach ($useUploadTempDirectoryValues as $useUploadTempDirectoryValue) {
  39. File::setUseUploadTempDirectory($useUploadTempDirectoryValue);
  40. $result = File::getUseUploadTempDirectory();
  41. self::assertEquals($useUploadTempDirectoryValue, $result);
  42. $result = File::sysGetTempDir();
  43. if (!$useUploadTempDirectoryValue || in_array($temp, $badArray, true)) {
  44. self::assertSame(realpath(sys_get_temp_dir()), $result);
  45. } else {
  46. self::assertSame(realpath($temp), $result);
  47. }
  48. }
  49. }
  50. public function testUploadTmpDir(): void
  51. {
  52. $temp = ini_get('upload_tmp_dir') ?: '';
  53. $badArray = ['', sys_get_temp_dir()];
  54. if (in_array($temp, $badArray, true)) {
  55. self::markTestSkipped('upload_tmp_dir setting unusable for this test');
  56. } else {
  57. File::setUseUploadTempDirectory(true);
  58. $result = File::sysGetTempDir();
  59. self::assertSame(realpath($temp), $result);
  60. }
  61. }
  62. public function testNotExists(): void
  63. {
  64. $temp = File::temporaryFileName();
  65. file_put_contents($temp, '');
  66. File::assertFile($temp);
  67. self::assertTrue(File::testFileNoThrow($temp));
  68. unlink($temp);
  69. self::assertFalse(File::testFileNoThrow($temp));
  70. $this->expectException(ReaderException::class);
  71. $this->expectExceptionMessage('does not exist');
  72. File::assertFile($temp);
  73. }
  74. public function testNotReadable(): void
  75. {
  76. if (PHP_OS_FAMILY === 'Windows' || stristr(PHP_OS, 'CYGWIN') !== false) {
  77. self::markTestSkipped('chmod does not work reliably on Windows');
  78. }
  79. $this->tempfile = $temp = File::temporaryFileName();
  80. file_put_contents($temp, '');
  81. if (chmod($temp, 0070) === false) {
  82. self::markTestSkipped('chmod failed');
  83. }
  84. self::assertFalse(File::testFileNoThrow($temp));
  85. $this->expectException(ReaderException::class);
  86. $this->expectExceptionMessage('for reading');
  87. File::assertFile($temp);
  88. }
  89. public function testZip(): void
  90. {
  91. $temp = 'samples/templates/26template.xlsx';
  92. File::assertFile($temp, 'xl/workbook.xml');
  93. self::assertTrue(File::testFileNoThrow($temp, 'xl/workbook.xml'));
  94. self::assertFalse(File::testFileNoThrow($temp, 'xl/xworkbook.xml'));
  95. $this->expectException(ReaderException::class);
  96. $this->expectExceptionMessage('Could not find zip member');
  97. File::assertFile($temp, 'xl/xworkbook.xml');
  98. }
  99. }