gtest: Add a testcase wrapper for handling tmpdirs
This makes it trivial to have a pristine temp directory on every test
case execution. Just derive from the provided class.
Change-Id: I5355914cdedc482eddd0749a9ccc10fc93de6571
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/src/gtest/tmp.cpp b/src/gtest/tmp.cpp
new file mode 100644
index 0000000..07dfb6d
--- /dev/null
+++ b/src/gtest/tmp.cpp
@@ -0,0 +1,48 @@
+#include <fmt/format.h>
+
+#include <filesystem>
+#include <stdplus/gtest/tmp.hpp>
+
+namespace stdplus
+{
+namespace gtest
+{
+
+TestWithTmp::TestWithTmp() :
+ casedir(fmt::format(
+ "{}/{}", SuiteTmpDir(),
+ ::testing::UnitTest::GetInstance()->current_test_info()->name()))
+{
+ std::filesystem::create_directory(CaseTmpDir());
+}
+
+TestWithTmp::~TestWithTmp()
+{
+ std::filesystem::remove_all(CaseTmpDir());
+}
+
+void TestWithTmp::SetUpTestSuite()
+{
+ std::filesystem::create_directory(SuiteTmpDir());
+}
+
+void TestWithTmp::TearDownTestSuite()
+{
+ std::filesystem::remove_all(SuiteTmpDir());
+}
+
+std::string TestWithTmp::SuiteTmpDir()
+{
+ const char* dir = getenv("TMPDIR");
+ if (dir == nullptr)
+ {
+ dir = "/tmp";
+ }
+ return fmt::format(
+ "{}/{}-{}", dir,
+ ::testing::UnitTest::GetInstance()->current_test_suite()->name(),
+ getpid());
+}
+
+} // namespace gtest
+} // namespace stdplus