mirror of
https://github.com/zhamao-robot/zhamao-framework.git
synced 2026-07-24 00:55:35 +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 string $dir 目录
|
||||||
* @param bool $recursive 是否递归扫描子目录
|
* @param bool $recursive 是否递归扫描子目录
|
||||||
* @param bool|string $relative 是否返回相对目录,如果为true则返回相对目录,如果为false则返回绝对目录
|
* @param bool|mixed|string $relative 是否返回相对目录,如果为true则返回相对目录,如果为false则返回绝对目录
|
||||||
* @param bool $include_dir 非递归模式下,是否包含目录
|
* @param bool $include_dir 非递归模式下,是否包含目录
|
||||||
* @return array|false
|
* @return array|false
|
||||||
* @since 2.5
|
* @since 2.5
|
||||||
*/
|
*/
|
||||||
@@ -147,6 +147,9 @@ class DataProvider
|
|||||||
$list = [];
|
$list = [];
|
||||||
if ($relative === true) {
|
if ($relative === true) {
|
||||||
$relative = $dir;
|
$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) {
|
foreach ($r as $v) {
|
||||||
if ($v == '.' || $v == '..') {
|
if ($v == '.' || $v == '..') {
|
||||||
@@ -162,9 +165,6 @@ class DataProvider
|
|||||||
$list[] = ltrim(mb_substr($sub_file, mb_strlen($relative)), '/');
|
$list[] = ltrim(mb_substr($sub_file, mb_strlen($relative)), '/');
|
||||||
} elseif ($relative === false) {
|
} elseif ($relative === false) {
|
||||||
$list[] = $sub_file;
|
$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
|
public function testScanDirFiles(): void
|
||||||
{
|
{
|
||||||
|
// 常规测试
|
||||||
$files = DataProvider::scanDirFiles(SOURCE_ROOT_DIR . '/src/Module');
|
$files = DataProvider::scanDirFiles(SOURCE_ROOT_DIR . '/src/Module');
|
||||||
$this->assertContains(SOURCE_ROOT_DIR . '/src/Module/Example/Hello.php', $files);
|
$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
|
public function testGetFrameworkRootDir(): void
|
||||||
|
|||||||
Reference in New Issue
Block a user