LocalTest.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. namespace Gaufrette\Functional\Adapter;
  3. use Gaufrette\Filesystem;
  4. use Gaufrette\Adapter\Local;
  5. use Gaufrette\Functional\LocalDirectoryDeletor;
  6. class LocalTest extends FunctionalTestCase
  7. {
  8. private $directory;
  9. public function setUp()
  10. {
  11. $this->directory = sprintf('%s/filesystem', str_replace('\\', '/', __DIR__));
  12. if (!file_exists($this->directory)) {
  13. mkdir($this->directory);
  14. }
  15. $this->filesystem = new Filesystem(new Local($this->directory));
  16. }
  17. public function tearDown()
  18. {
  19. $this->filesystem = null;
  20. LocalDirectoryDeletor::deleteDirectory($this->directory);
  21. }
  22. /**
  23. * @test
  24. * @group functional
  25. */
  26. public function shouldWorkWithSyslink()
  27. {
  28. if (strtolower(substr(PHP_OS, 0, 3)) === 'win') {
  29. $this->markTestSkipped('Symlinks are not supported on Windows.');
  30. }
  31. $dirname = sprintf(
  32. '%s/adapters/aaa',
  33. dirname(__DIR__)
  34. );
  35. $linkname = sprintf(
  36. '%s/adapters/../../../../link',
  37. dirname(__DIR__)
  38. );
  39. @mkdir($dirname);
  40. @unlink($linkname);
  41. symlink($dirname, $linkname);
  42. $this->filesystem = new Filesystem(new Local($linkname));
  43. $this->filesystem->write('test.txt', 'abc 123');
  44. $this->assertSame('abc 123', $this->filesystem->read('test.txt'));
  45. $this->filesystem->delete('test.txt');
  46. @unlink($linkname);
  47. @rmdir($dirname);
  48. }
  49. /**
  50. * @test
  51. * @covers Gaufrette\Adapter\Local
  52. * @group functional
  53. */
  54. public function shouldListingOnlyGivenDirectory()
  55. {
  56. $dirname = sprintf(
  57. '%s/localDir',
  58. $this->directory
  59. );
  60. @mkdir($dirname);
  61. $this->filesystem = new Filesystem(new Local($this->directory));
  62. $this->filesystem->write('aaa.txt', 'some content');
  63. $this->filesystem->write('localDir/test.txt', 'some content');
  64. $dirs = $this->filesystem->listKeys('localDir/test');
  65. $this->assertEmpty($dirs['dirs']);
  66. $this->assertCount(1, $dirs['keys']);
  67. $this->assertEquals('localDir/test.txt', $dirs['keys'][0]);
  68. $dirs = $this->filesystem->listKeys();
  69. $this->assertCount(1, $dirs['dirs']);
  70. $this->assertEquals('localDir', $dirs['dirs'][0]);
  71. $this->assertCount(2, $dirs['keys']);
  72. $this->assertEquals('aaa.txt', $dirs['keys'][0]);
  73. $this->assertEquals('localDir/test.txt', $dirs['keys'][1]);
  74. @unlink($dirname.DIRECTORY_SEPARATOR.'test.txt');
  75. @unlink($this->directory.DIRECTORY_SEPARATOR.'aaa.txt');
  76. @rmdir($dirname);
  77. }
  78. /**
  79. * @test
  80. * @covers Gaufrette\Adapter\Local
  81. * @group functional
  82. */
  83. public function shouldListingAllKeys()
  84. {
  85. $dirname = sprintf(
  86. '%s/localDir',
  87. $this->directory
  88. );
  89. @mkdir($dirname);
  90. $this->filesystem = new Filesystem(new Local($this->directory));
  91. $this->filesystem->write('aaa.txt', 'some content');
  92. $this->filesystem->write('localDir/dir1/dir2/dir3/test.txt', 'some content');
  93. $keys = $this->filesystem->keys();
  94. $dirs = $this->filesystem->listKeys();
  95. $this->assertCount(6, $keys);
  96. $this->assertCount(4, $dirs['dirs']);
  97. $this->assertEquals('localDir/dir1/dir2/dir3/test.txt', $dirs['keys'][1]);
  98. foreach ($dirs['keys'] as $item) {
  99. @unlink($item);
  100. }
  101. $reversed = array_reverse($dirs['dirs']);
  102. foreach ($reversed as $item) {
  103. @rmdir($item);
  104. }
  105. }
  106. /**
  107. * @test
  108. * @group functional
  109. */
  110. public function shouldBeAbleToClearCache()
  111. {
  112. $dirname = sprintf(
  113. '%s/adapters/bbb',
  114. dirname(__DIR__)
  115. );
  116. @mkdir($dirname);
  117. $this->filesystem = new Filesystem(new Local($dirname));
  118. $this->filesystem->get('test.txt', true);
  119. $this->filesystem->write('test.txt', '123', true);
  120. $this->filesystem->get('test2.txt', true);
  121. $this->filesystem->write('test2.txt', '123', true);
  122. $fsReflection = new \ReflectionClass($this->filesystem);
  123. $fsIsFileInRegister = $fsReflection->getMethod('isFileInRegister');
  124. $fsIsFileInRegister->setAccessible(true);
  125. $this->assertTrue($fsIsFileInRegister->invoke($this->filesystem, 'test.txt'));
  126. $this->filesystem->removeFromRegister('test.txt');
  127. $this->assertFalse($fsIsFileInRegister->invoke($this->filesystem, 'test.txt'));
  128. $this->filesystem->clearFileRegister();
  129. $fsRegister = $fsReflection->getProperty('fileRegister');
  130. $fsRegister->setAccessible(true);
  131. $this->assertCount(0, $fsRegister->getValue($this->filesystem));
  132. $this->filesystem->delete('test.txt');
  133. $this->filesystem->delete('test2.txt');
  134. @rmdir($dirname);
  135. }
  136. }