. * */ namespace Test\Files; class Filesystem extends \PHPUnit_Framework_TestCase { /** * @var array tmpDirs */ private $tmpDirs=array(); /** * @return array */ private function getStorageData() { $dir = \OC_Helper::tmpFolder(); $this->tmpDirs[] = $dir; return array('datadir' => $dir); } public function tearDown() { foreach ($this->tmpDirs as $dir) { \OC_Helper::rmdirr($dir); } } public function setUp() { \OC\Files\Filesystem::clearMounts(); } public function testMount() { \OC\Files\Filesystem::mount('\OC\Files\Storage\Local',self::getStorageData(),'/'); $this->assertEquals('/',\OC\Files\Filesystem::getMountPoint('/')); $this->assertEquals('/',\OC\Files\Filesystem::getMountPoint('/some/folder')); list( , $internalPath)=\OC\Files\Filesystem::resolvePath('/'); $this->assertEquals('',$internalPath); list( , $internalPath)=\OC\Files\Filesystem::resolvePath('/some/folder'); $this->assertEquals('some/folder',$internalPath); \OC\Files\Filesystem::mount('\OC\Files\Storage\Local',self::getStorageData(),'/some'); $this->assertEquals('/',\OC\Files\Filesystem::getMountPoint('/')); $this->assertEquals('/some/',\OC\Files\Filesystem::getMountPoint('/some/folder')); $this->assertEquals('/some/',\OC\Files\Filesystem::getMountPoint('/some/')); $this->assertEquals('/some/',\OC\Files\Filesystem::getMountPoint('/some')); list( , $internalPath)=\OC\Files\Filesystem::resolvePath('/some/folder'); $this->assertEquals('folder',$internalPath); } public function testNormalize() { $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('/path/')); $this->assertEquals('/path/', \OC\Files\Filesystem::normalizePath('/path/', false)); $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('path')); $this->assertEquals('/path', \OC\Files\Filesystem::normalizePath('\path')); $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo//bar/')); $this->assertEquals('/foo/bar', \OC\Files\Filesystem::normalizePath('/foo////bar')); if (class_exists('Patchwork\PHP\Shim\Normalizer')) { $this->assertEquals("/foo/bar\xC3\xBC", \OC\Files\Filesystem::normalizePath("/foo/baru\xCC\x88")); } } public function testHooks() { if(\OC\Files\Filesystem::getView()){ $user = \OC_User::getUser(); }else{ $user=uniqid(); \OC\Files\Filesystem::init($user, '/'.$user.'/files'); } \OC_Hook::clear('OC_Filesystem'); \OC_Hook::connect('OC_Filesystem', 'post_write', $this, 'dummyHook'); \OC\Files\Filesystem::mount('OC\Files\Storage\Temporary', array(), '/'); $rootView=new \OC\Files\View(''); $rootView->mkdir('/'.$user); $rootView->mkdir('/'.$user.'/files'); // \OC\Files\Filesystem::file_put_contents('/foo', 'foo'); \OC\Files\Filesystem::mkdir('/bar'); // \OC\Files\Filesystem::file_put_contents('/bar//foo', 'foo'); $tmpFile = \OC_Helper::tmpFile(); file_put_contents($tmpFile, 'foo'); $fh = fopen($tmpFile, 'r'); // \OC\Files\Filesystem::file_put_contents('/bar//foo', $fh); } public function dummyHook($arguments) { $path = $arguments['path']; $this->assertEquals($path, \OC\Files\Filesystem::normalizePath($path)); //the path passed to the hook should already be normalized } }