diff --git a/apps/components_tests/files/hash.cpp b/apps/components_tests/files/hash.cpp index 793965112b..f94cb1969d 100644 --- a/apps/components_tests/files/hash.cpp +++ b/apps/components_tests/files/hash.cpp @@ -30,7 +30,7 @@ namespace TEST(FilesGetHash, shouldClearErrors) { - const auto fileName = temporaryFilePath("fileName"); + const auto fileName = outputFilePath("fileName"); std::string content; std::fill_n(std::back_inserter(content), 1, 'a'); std::istringstream stream(content); @@ -41,7 +41,7 @@ namespace TEST_P(FilesGetHash, shouldReturnHashForStringStream) { - const auto fileName = temporaryFilePath("fileName"); + const auto fileName = outputFilePath("fileName"); std::string content; std::fill_n(std::back_inserter(content), GetParam().mSize, 'a'); std::istringstream stream(content); diff --git a/apps/components_tests/main.cpp b/apps/components_tests/main.cpp index dcfb2e9ba9..c1b41d184a 100644 --- a/apps/components_tests/main.cpp +++ b/apps/components_tests/main.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include @@ -24,5 +25,9 @@ int main(int argc, char** argv) Settings::StaticValues::init(); testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + + const int result = RUN_ALL_TESTS(); + if (result == 0) + std::filesystem::remove_all(TestingOpenMW::outputDir()); + return result; } diff --git a/apps/components_tests/shader/shadermanager.cpp b/apps/components_tests/shader/shadermanager.cpp index 5b11d31a44..b80839d0ec 100644 --- a/apps/components_tests/shader/shadermanager.cpp +++ b/apps/components_tests/shader/shadermanager.cpp @@ -16,7 +16,7 @@ namespace ShaderManager mManager; ShaderManager::DefineMap mDefines; - ShaderManagerTest() { mManager.setShaderPath("tests_output"); } + ShaderManagerTest() { mManager.setShaderPath(TestingOpenMW::outputDir()); } template void withShaderFile(const std::string& content, F&& f) diff --git a/apps/opencs_tests/main.cpp b/apps/opencs_tests/main.cpp index fd7d4900c8..fed1cd2bb1 100644 --- a/apps/opencs_tests/main.cpp +++ b/apps/opencs_tests/main.cpp @@ -1,4 +1,5 @@ #include +#include #include @@ -7,5 +8,9 @@ int main(int argc, char* argv[]) Log::sMinDebugLevel = Debug::getDebugLevel(); testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + + const int result = RUN_ALL_TESTS(); + if (result == 0) + std::filesystem::remove_all(TestingOpenMW::outputDir()); + return result; } diff --git a/apps/openmw_tests/main.cpp b/apps/openmw_tests/main.cpp index 6b7298596a..485298c863 100644 --- a/apps/openmw_tests/main.cpp +++ b/apps/openmw_tests/main.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include @@ -24,5 +25,9 @@ int main(int argc, char* argv[]) Settings::StaticValues::init(); testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); + + const int result = RUN_ALL_TESTS(); + if (result == 0) + std::filesystem::remove_all(TestingOpenMW::outputDir()); + return result; } diff --git a/components/testing/util.hpp b/components/testing/util.hpp index 941f495458..53331d6d37 100644 --- a/components/testing/util.hpp +++ b/components/testing/util.hpp @@ -1,6 +1,7 @@ #ifndef OPENMW_COMPONENTS_TESTING_UTIL_H #define OPENMW_COMPONENTS_TESTING_UTIL_H +#include #include #include #include @@ -14,26 +15,37 @@ namespace TestingOpenMW { - inline std::filesystem::path outputFilePath(const std::string name) + inline std::filesystem::path outputDir() { - std::filesystem::path dir("tests_output"); - std::filesystem::create_directory(dir); + static const std::string run + = std::to_string(std::chrono::system_clock::to_time_t(std::chrono::system_clock::now())); + std::filesystem::path dir = std::filesystem::temp_directory_path() / "openmw" / "tests" / run; + std::filesystem::create_directories(dir); + return dir; + } + + inline std::filesystem::path outputFilePath(std::string_view name) + { + std::filesystem::path dir = outputDir(); return dir / Misc::StringUtils::stringToU8String(name); } + inline std::filesystem::path outputDirPath(const std::filesystem::path& subpath) + { + std::filesystem::path path = outputDir(); + path /= subpath; + std::filesystem::create_directories(path); + return path; + } + inline std::filesystem::path outputFilePathWithSubDir(const std::filesystem::path& subpath) { - std::filesystem::path path("tests_output"); + std::filesystem::path path = outputDir(); path /= subpath; std::filesystem::create_directories(path.parent_path()); return path; } - inline std::filesystem::path temporaryFilePath(const std::string name) - { - return std::filesystem::temp_directory_path() / name; - } - class VFSTestFile : public VFS::File { public: