Merge pull request 'Added tests for DeleteEmptyFilesAndDirs(), GetDirFileAndDirCount(), + bugfixes' (#141) from tests_fs_utils into master

Reviewed-on: https://git.madvoxel.net/OpenVulkano/OpenVulkano/pulls/141
Reviewed-by: Georg Hagen <georg.hagen@madvoxel.com>
This commit is contained in:
Georg Hagen
2024-10-10 22:20:35 +02:00
3 changed files with 146 additions and 3 deletions

View File

@@ -22,7 +22,7 @@ namespace OpenVulkano
{
if (recursive)
{
deleted |= (DeleteEmptyDirs(p), recursive);
deleted |= (DeleteEmptyFilesAndDirs(p, recursive));
}
if (fs::is_empty(p))
{
@@ -50,7 +50,7 @@ namespace OpenVulkano
{
if (recursive)
{
deleted |= (DeleteEmptyDirs(p), recursive);
deleted |= (DeleteEmptyDirs(p, recursive));
}
if (fs::is_empty(p))
{

View File

@@ -13,7 +13,7 @@ namespace OpenVulkano
{
struct FsCount
{
size_t fileCount, dirCount;
size_t fileCount = 0, dirCount = 0;
size_t GetTotalEntryCount() const { return fileCount + dirCount; }

View File

@@ -15,6 +15,15 @@
using namespace OpenVulkano;
namespace
{
void touch(const std::filesystem::path& file)
{
std::ofstream foo(file);
foo.close();
}
}
TEST_CASE("DeleteEmptyDirs", "[FsUtils]")
{
Logger::SetupLogger("", "tests.log");
@@ -97,6 +106,7 @@ TEST_CASE("GetDirSize", "[FsUtils]")
TEST_CASE("ToValidFileName", "[FsUtils]")
{
Logger::SetupLogger("", "tests.log");
REQUIRE(FsUtils::ToValidFileName("file<name>") == "filename");
REQUIRE(FsUtils::ToValidFileName("file:name") == "filename");
REQUIRE(FsUtils::ToValidFileName("file\"name\"") == "filename");
@@ -135,3 +145,136 @@ TEST_CASE("ToValidFileName", "[FsUtils]")
REQUIRE(FsUtils::ToValidFileName("file:name<>") == "filename");
REQUIRE(FsUtils::ToValidFileName(" file<name>?") == "filename");
}
TEST_CASE("DeleteEmptyFilesAndDirs", "[FsUtils]")
{
Logger::SetupLogger("", "tests.log");
const auto testDir = AppFolders::GetAppTempDir() / "testDirectory";
{
std::filesystem::create_directories(testDir);
auto emptyFile = testDir / "empty_file.txt";
auto emptyDir = testDir / "empty_dir";
auto nonEmptyFile = testDir / "non_empty_file.txt";
std::filesystem::create_directory(emptyDir);
std::ofstream(nonEmptyFile) << "non-empty content";
touch(emptyFile);
REQUIRE(std::filesystem::exists(emptyFile));
REQUIRE(std::filesystem::exists(emptyDir));
REQUIRE(std::filesystem::exists(nonEmptyFile));
bool result = FsUtils::DeleteEmptyFilesAndDirs(testDir, false);
REQUIRE(result == true);
REQUIRE(!std::filesystem::exists(emptyFile));
REQUIRE(!std::filesystem::exists(emptyDir));
REQUIRE(std::filesystem::exists(nonEmptyFile));
std::filesystem::remove_all(testDir);
}
{
std::filesystem::create_directories(testDir);
auto nestedDir = testDir / "nested";
auto nestedEmptyFile = nestedDir / "empty_file_nested.txt";
auto nonEmptyFile = nestedDir / "non_empty_file_nested.txt";
std::filesystem::create_directories(nestedDir);
touch(nestedEmptyFile);
std::ofstream(nonEmptyFile) << "data";
REQUIRE(std::filesystem::exists(nestedDir));
REQUIRE(std::filesystem::exists(nestedEmptyFile));
REQUIRE(std::filesystem::exists(nonEmptyFile));
bool result = FsUtils::DeleteEmptyFilesAndDirs(testDir, true);
REQUIRE(result == true);
REQUIRE(!std::filesystem::exists(nestedEmptyFile));
REQUIRE(std::filesystem::exists(nonEmptyFile));
REQUIRE(std::filesystem::exists(nestedDir));
std::filesystem::remove_all(testDir);
}
{
std::filesystem::create_directories(testDir);
auto nonEmptyDir = testDir / "non_empty_dir";
auto nonEmptyFile = nonEmptyDir / "non_empty_file.txt";
std::filesystem::create_directory(nonEmptyDir);
std::ofstream(nonEmptyFile) << "data";
bool result = FsUtils::DeleteEmptyFilesAndDirs(testDir, false);
REQUIRE(result == false);
REQUIRE(std::filesystem::exists(nonEmptyFile));
REQUIRE(std::filesystem::exists(nonEmptyDir));
std::filesystem::remove_all(testDir);
}
{
std::filesystem::create_directories(testDir);
auto emptyDir = testDir / "empty_dir";
std::filesystem::create_directory(emptyDir);
REQUIRE(std::filesystem::exists(emptyDir));
bool result = FsUtils::DeleteEmptyFilesAndDirs(emptyDir, false);
REQUIRE(result == false);
REQUIRE(std::filesystem::exists(emptyDir));
std::filesystem::remove_all(testDir);
}
}
TEST_CASE("GetDirFileAndDirCount", "[FsUtils]")
{
Logger::SetupLogger("", "tests.log");
const auto testDir = AppFolders::GetAppTempDir() / "count_test_directory";
{
std::filesystem::create_directories(testDir);
auto file1 = testDir / "file1.txt";
auto file2 = testDir / "file2.txt";
auto dir1 = testDir / "dir1";
auto dir2 = testDir / "dir2";
std::filesystem::create_directories(dir1);
std::filesystem::create_directories(dir2);
touch(file1);
touch(file2);
REQUIRE(std::filesystem::exists(file1));
REQUIRE(std::filesystem::exists(file2));
REQUIRE(std::filesystem::exists(dir1));
REQUIRE(std::filesystem::exists(dir2));
FsCount count = FsUtils::GetDirFileAndDirCount(testDir);
REQUIRE(count.fileCount == 2);
REQUIRE(count.dirCount == 2);
std::filesystem::remove_all(testDir);
}
{
std::filesystem::create_directories(testDir);
auto emptyDir = testDir / "empty_dir";
std::filesystem::create_directory(emptyDir);
REQUIRE(std::filesystem::exists(emptyDir));
FsCount count = FsUtils::GetDirFileAndDirCount(testDir);
REQUIRE(count.fileCount == 0);
REQUIRE(count.dirCount == 1);
std::filesystem::remove_all(testDir);
}
}