From 7db6169a6f0aa5a18598cfc4ebf4ae949995d1fd Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Thu, 10 Oct 2024 21:15:30 +0300 Subject: [PATCH 1/2] Added tests for DeleteEmptyFilesAndDirs(), GetDirFileAndDirCount(), + bugfixes --- openVulkanoCpp/IO/FsUtils.cpp | 4 +- openVulkanoCpp/IO/FsUtils.hpp | 2 +- tests/IO/FsUtils.cpp | 140 ++++++++++++++++++++++++++++++++++ 3 files changed, 143 insertions(+), 3 deletions(-) diff --git a/openVulkanoCpp/IO/FsUtils.cpp b/openVulkanoCpp/IO/FsUtils.cpp index 3e3edb1..55f6f92 100644 --- a/openVulkanoCpp/IO/FsUtils.cpp +++ b/openVulkanoCpp/IO/FsUtils.cpp @@ -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)) { diff --git a/openVulkanoCpp/IO/FsUtils.hpp b/openVulkanoCpp/IO/FsUtils.hpp index 121c72e..f9a2bf5 100644 --- a/openVulkanoCpp/IO/FsUtils.hpp +++ b/openVulkanoCpp/IO/FsUtils.hpp @@ -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; } diff --git a/tests/IO/FsUtils.cpp b/tests/IO/FsUtils.cpp index c332706..f0652ab 100644 --- a/tests/IO/FsUtils.cpp +++ b/tests/IO/FsUtils.cpp @@ -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"); @@ -135,3 +144,134 @@ TEST_CASE("ToValidFileName", "[FsUtils]") REQUIRE(FsUtils::ToValidFileName("file:name<>") == "file꞉name<>"); REQUIRE(FsUtils::ToValidFileName(" file?") == "file<name>?"); } + +TEST_CASE("DeleteEmptyFilesAndDirs", "[FsUtils]") +{ + 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]") +{ + 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); + } +} \ No newline at end of file From 9aea7ef4467075c415fcade9d1ee143435a009e2 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Thu, 10 Oct 2024 21:25:13 +0200 Subject: [PATCH 2/2] Init logger --- tests/IO/FsUtils.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/IO/FsUtils.cpp b/tests/IO/FsUtils.cpp index f0652ab..2bfb9b8 100644 --- a/tests/IO/FsUtils.cpp +++ b/tests/IO/FsUtils.cpp @@ -106,6 +106,7 @@ TEST_CASE("GetDirSize", "[FsUtils]") TEST_CASE("ToValidFileName", "[FsUtils]") { + Logger::SetupLogger("", "tests.log"); REQUIRE(FsUtils::ToValidFileName("file") == "file<name>"); REQUIRE(FsUtils::ToValidFileName("file:name") == "file꞉name"); REQUIRE(FsUtils::ToValidFileName("file\"name\"") == "file"name""); @@ -147,6 +148,7 @@ TEST_CASE("ToValidFileName", "[FsUtils]") TEST_CASE("DeleteEmptyFilesAndDirs", "[FsUtils]") { + Logger::SetupLogger("", "tests.log"); const auto testDir = AppFolders::GetAppTempDir() / "testDirectory"; { @@ -232,6 +234,7 @@ TEST_CASE("DeleteEmptyFilesAndDirs", "[FsUtils]") TEST_CASE("GetDirFileAndDirCount", "[FsUtils]") { + Logger::SetupLogger("", "tests.log"); const auto testDir = AppFolders::GetAppTempDir() / "count_test_directory"; {