setUpVfs(); $this->startMockLogger(); } /** * @dataProvider provideTestDetermineRelativePath */ public function testDetermineRelativePath(string $path, bool $expected): void { $this->assertSame($expected, FileSystem::isRelativePath($path)); } public function provideTestDetermineRelativePath(): array { return [ 'relative' => ['relative/path', true], 'absolute' => ['/absolute/path', false], 'windows' => ['C:\Windows', !(DIRECTORY_SEPARATOR === '\\')], ]; } public function testCreateDirectoryWithNoPerm(): void { $old_perm = $this->vfs->getPermissions(); $this->vfs->chmod(0000); $this->assertFalse($this->vfs->hasChild('test')); $this->expectExceptionMessageMatches('/无法建立目录/'); FileSystem::createDir($this->vfs->url() . '/test'); $this->vfs->chmod($old_perm); } public function testCreateDirectory(): void { $this->assertFalse($this->vfs->hasChild('test')); FileSystem::createDir($this->vfs->url() . '/test'); $this->assertTrue($this->vfs->hasChild('test')); } public function testGetReloadableFiles(): void { $files = FileSystem::getReloadableFiles(); $this->assertIsArray($files); $this->assertNotEmpty($files); } public function testGetClassesPsr4(): void { vfsStream::create([ 'Foo' => [ 'Bar.php' => ' ' [ 'Quux.php' => ' '', ], 'Chore' => [ 'global.php' => ' 'vfs); $classes = FileSystem::getClassesPsr4($this->vfs->url(), ''); $this->assertSame([ '\Foo\Bar', '\Foo\Qux\Quux', ], $classes); } public function testGetClassesPsr4WithCustomRule(): void { vfsStream::create([ 'Foo' => [ 'Bar.php' => ' 'vfs); $classes = FileSystem::getClassesPsr4($this->vfs->url(), '', fn (string $dir, array $pathinfo) => $pathinfo['filename'] === 'Bar'); $this->assertSame(['\Foo\Bar'], $classes); } public function testGetClassesPsr4WithReturnPath(): void { vfsStream::create([ 'Foo' => [ 'Bar.php' => ' 'vfs); $classes = FileSystem::getClassesPsr4($this->vfs->url(), '', return_path_value: 'my_path'); $this->assertSame([ '\Foo\Bar' => 'my_path/Foo/Bar.php', '\Foo\Baz' => 'my_path/Foo/Baz.php', ], $classes); } public function testScanDirFilesWithNotExistsDir(): void { FileSystem::scanDirFiles($this->vfs->url() . '/not_exists'); $this->assertLogged('warning', zm_internal_errcode('E00080') . '扫描目录失败,目录不存在'); } public function testScanDirFilesWithNoPerm(): void { $old_perm = $this->vfs->getPermissions(); $this->vfs->chmod(0000); FileSystem::scanDirFiles($this->vfs->url()); $this->assertLogged('warning', zm_internal_errcode('E00080') . '扫描目录失败,目录不可读'); $this->vfs->chmod($old_perm); } }