mirror of
https://github.com/zhamao-robot/zhamao-framework.git
synced 2026-07-02 14:25:38 +08:00
update DataProvider relative=null condition and add tests
This commit is contained in:
@@ -127,10 +127,10 @@ class DataProvider
|
||||
/**
|
||||
* 递归或非递归扫描目录,可返回相对目录的文件列表或绝对目录的文件列表
|
||||
*
|
||||
* @param string $dir 目录
|
||||
* @param bool $recursive 是否递归扫描子目录
|
||||
* @param bool|string $relative 是否返回相对目录,如果为true则返回相对目录,如果为false则返回绝对目录
|
||||
* @param bool $include_dir 非递归模式下,是否包含目录
|
||||
* @param string $dir 目录
|
||||
* @param bool $recursive 是否递归扫描子目录
|
||||
* @param bool|mixed|string $relative 是否返回相对目录,如果为true则返回相对目录,如果为false则返回绝对目录
|
||||
* @param bool $include_dir 非递归模式下,是否包含目录
|
||||
* @return array|false
|
||||
* @since 2.5
|
||||
*/
|
||||
@@ -147,6 +147,9 @@ class DataProvider
|
||||
$list = [];
|
||||
if ($relative === true) {
|
||||
$relative = $dir;
|
||||
} elseif ($relative !== false && !is_string($relative)) {
|
||||
Console::warning(zm_internal_errcode('E00058') . "Relative path is not generated: wrong base directory ({$relative})");
|
||||
return false;
|
||||
}
|
||||
foreach ($r as $v) {
|
||||
if ($v == '.' || $v == '..') {
|
||||
@@ -162,9 +165,6 @@ class DataProvider
|
||||
$list[] = ltrim(mb_substr($sub_file, mb_strlen($relative)), '/');
|
||||
} elseif ($relative === false) {
|
||||
$list[] = $sub_file;
|
||||
} else {
|
||||
Console::warning(zm_internal_errcode('E00058') . "Relative path is not generated: wrong base directory ({$relative})");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,8 +29,32 @@ class DataProviderTest extends TestCase
|
||||
|
||||
public function testScanDirFiles(): void
|
||||
{
|
||||
// 常规测试
|
||||
$files = DataProvider::scanDirFiles(SOURCE_ROOT_DIR . '/src/Module');
|
||||
$this->assertContains(SOURCE_ROOT_DIR . '/src/Module/Example/Hello.php', $files);
|
||||
// 检查文件夹不存在的判断
|
||||
$random_id = uuidgen();
|
||||
$dir = '/tmp/' . $random_id;
|
||||
// 检查目录不存在是否返回false
|
||||
$this->assertFalse(DataProvider::scanDirFiles($dir));
|
||||
mkdir($dir);
|
||||
// 检查目录存在时返回空
|
||||
$this->assertEquals([], DataProvider::scanDirFiles($dir));
|
||||
chmod($dir, 000);
|
||||
// 目录无权限时也返回false
|
||||
$this->assertFalse(DataProvider::scanDirFiles($dir));
|
||||
chmod($dir, 0755);
|
||||
mkdir($dir . '/test');
|
||||
file_put_contents($dir . '/test/a.txt', 'Hello world!');
|
||||
// 检查目录下文件是否正确返回
|
||||
$this->assertEquals([$dir . '/test/a.txt'], DataProvider::scanDirFiles($dir));
|
||||
// 检查不递归时包含目录的模式
|
||||
$this->assertEquals([], DataProvider::scanDirFiles($dir, false));
|
||||
$this->assertEquals([$dir . '/test'], DataProvider::scanDirFiles($dir, false, false, true));
|
||||
// 检查相对目录是否能正常返回
|
||||
$this->assertEquals(['test/a.txt'], DataProvider::scanDirFiles($dir, true, true));
|
||||
// relative传入奇怪的东西就返回false
|
||||
$this->assertFalse(DataProvider::scanDirFiles($dir, true, null, true));
|
||||
}
|
||||
|
||||
public function testGetFrameworkRootDir(): void
|
||||
|
||||
Reference in New Issue
Block a user