FunctionalTestCase.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <?php
  2. namespace Gaufrette\Functional\FileStream;
  3. use Gaufrette\StreamWrapper;
  4. use PHPUnit\Framework\TestCase;
  5. class FunctionalTestCase extends TestCase
  6. {
  7. protected $filesystem;
  8. /**
  9. * @test
  10. */
  11. public function shouldCheckIsFile()
  12. {
  13. $this->filesystem->write('test.txt', 'some content');
  14. $this->assertTrue(is_file('gaufrette://filestream/test.txt'));
  15. $this->filesystem->delete('test.txt');
  16. $this->assertFalse(is_file('gaufrette://filestream/test.txt'));
  17. }
  18. /**
  19. * @test
  20. */
  21. public function shouldCheckFileExists()
  22. {
  23. $this->filesystem->write('test.txt', 'some content');
  24. $this->assertFileExists('gaufrette://filestream/test.txt');
  25. $this->filesystem->delete('test.txt');
  26. $this->assertFileNotExists('gaufrette://filestream/test.txt');
  27. }
  28. /**
  29. * @test
  30. */
  31. public function shouldWriteAndReadFile()
  32. {
  33. file_put_contents('gaufrette://filestream/test.txt', 'test content');
  34. $this->assertEquals('test content', file_get_contents('gaufrette://filestream/test.txt'));
  35. $this->filesystem->delete('test.txt');
  36. }
  37. /**
  38. * @test
  39. * @expectedException \LogicException
  40. * @expectedExceptionMessage The stream does not allow read.
  41. */
  42. public function shouldNotReadWhenOpenInWriteMode()
  43. {
  44. $this->filesystem->write('test.txt', 'test content');
  45. $fileHandler = fopen('gaufrette://filestream/test.txt', 'w');
  46. fread($fileHandler, 10);
  47. fclose($fileHandler);
  48. $this->filesystem->delete('test.txt');
  49. }
  50. /**
  51. * @test
  52. * @expectedException \LogicException
  53. * @expectedExceptionMessage The stream does not allow write.
  54. */
  55. public function shouldNotWriteWhenOpenInReadMode()
  56. {
  57. $this->filesystem->write('test.txt', 'test content');
  58. $fileHandler = fopen('gaufrette://filestream/test.txt', 'r');
  59. fwrite($fileHandler, 'test content2');
  60. fclose($fileHandler);
  61. $this->filesystem->delete('test.txt');
  62. }
  63. /**
  64. * @test
  65. */
  66. public function shouldWriteFromSettedPosition()
  67. {
  68. $fileHandler = fopen('gaufrette://filestream/test.txt', 'w');
  69. fseek($fileHandler, 1, SEEK_SET);
  70. fwrite($fileHandler, 'est');
  71. fseek($fileHandler, 0, SEEK_SET);
  72. fwrite($fileHandler, 't');
  73. fclose($fileHandler);
  74. $this->assertEquals('test', $this->filesystem->read('test.txt'));
  75. $fileHandler = fopen('gaufrette://filestream/test.txt', 'w');
  76. fseek($fileHandler, 0, SEEK_SET);
  77. fwrite($fileHandler, 't');
  78. fseek($fileHandler, 1, SEEK_SET);
  79. fwrite($fileHandler, 'est');
  80. fseek($fileHandler, 0, SEEK_SET);
  81. fwrite($fileHandler, 'f');
  82. fclose($fileHandler);
  83. $this->assertEquals('fest', $this->filesystem->read('test.txt'));
  84. }
  85. /**
  86. * @test
  87. */
  88. public function shouldWriteEmptyContent()
  89. {
  90. $bytes = file_put_contents('gaufrette://filestream/test.txt', '');
  91. $this->assertEquals('', file_get_contents('gaufrette://filestream/test.txt'));
  92. $this->filesystem->delete('test.txt');
  93. $this->assertSame(0, $bytes);
  94. }
  95. /**
  96. * @test
  97. */
  98. public function shouldSetAndGetPosition()
  99. {
  100. file_put_contents('gaufrette://filestream/test.txt', 'test content');
  101. $fileHandler = fopen('gaufrette://filestream/test.txt', 'r+');
  102. fseek($fileHandler, 1, SEEK_SET);
  103. $this->assertEquals(1, ftell($fileHandler));
  104. fseek($fileHandler, 1, SEEK_CUR);
  105. $this->assertEquals(2, ftell($fileHandler));
  106. fclose($fileHandler);
  107. $fileHandler = fopen('gaufrette://filestream/test.txt', 'r+');
  108. fseek($fileHandler, 1, SEEK_CUR);
  109. $this->assertEquals(1, ftell($fileHandler));
  110. fclose($fileHandler);
  111. $fileHandler = fopen('gaufrette://filestream/test.txt', 'r+');
  112. fseek($fileHandler, -2, SEEK_END);
  113. $this->assertEquals(10, ftell($fileHandler));
  114. fclose($fileHandler);
  115. }
  116. /**
  117. * @test
  118. */
  119. public function shouldNotSeekWhenWhenceParameterIsInvalid()
  120. {
  121. file_put_contents('gaufrette://filestream/test.txt', 'test content');
  122. $fileHandler = fopen('gaufrette://filestream/test.txt', 'r+');
  123. $this->assertEquals(-1, fseek($fileHandler, 1, 666));
  124. }
  125. /**
  126. * @test
  127. */
  128. public function shouldHandlesSubDir()
  129. {
  130. file_put_contents('gaufrette://filestream/subdir/test.txt', 'test content');
  131. $this->assertTrue(is_file('gaufrette://filestream/subdir/test.txt'));
  132. $this->filesystem->delete('subdir/test.txt');
  133. $this->assertFalse(is_file('gaufrette://filestream/subdir/test.txt'));
  134. }
  135. /**
  136. * @test
  137. */
  138. public function shouldUnlinkFile()
  139. {
  140. if (strtolower(substr(PHP_OS, 0, 3)) === 'win') {
  141. $this->markTestSkipped('Flaky test on windows.');
  142. }
  143. $this->filesystem->write('test.txt', 'some content');
  144. unlink('gaufrette://filestream/test.txt');
  145. $this->assertFalse($this->filesystem->has('test.txt'));
  146. }
  147. /**
  148. * @test
  149. */
  150. public function shouldCopyFile()
  151. {
  152. file_put_contents('gaufrette://filestream/copy1.txt', 'test content');
  153. $this->assertTrue(is_file('gaufrette://filestream/copy1.txt'));
  154. $this->assertFalse(is_file('gaufrette://filestream/copy2.txt'));
  155. copy('gaufrette://filestream/copy1.txt', 'gaufrette://filestream/copy2.txt');
  156. $this->assertTrue(is_file('gaufrette://filestream/copy1.txt'));
  157. $this->assertTrue(is_file('gaufrette://filestream/copy2.txt'));
  158. }
  159. /**
  160. * @test
  161. * @dataProvider modesProvider
  162. */
  163. public function shouldCreateNewFile($mode)
  164. {
  165. $fileHandler = fopen('gaufrette://filestream/test.txt', $mode);
  166. $this->assertFileExists('gaufrette://filestream/test.txt');
  167. }
  168. public static function modesProvider()
  169. {
  170. return array(
  171. array('w'),
  172. array('a+'),
  173. array('w+'),
  174. array('ab+'),
  175. array('wb'),
  176. array('wb+')
  177. );
  178. }
  179. protected function registerLocalFilesystemInStream()
  180. {
  181. $filesystemMap = StreamWrapper::getFilesystemMap();
  182. $filesystemMap->set('filestream', $this->filesystem);
  183. StreamWrapper::register();
  184. }
  185. }