From: Joel Rosdahl Date: Sun, 10 May 2020 07:13:41 +0000 (+0200) Subject: Implement TestUtil::TestContext X-Git-Tag: v4.0~458 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=59417d61966defc7555676def243760bf08dc32c;p=thirdparty%2Fccache.git Implement TestUtil::TestContext --- diff --git a/Makefile.in b/Makefile.in index 84b7f86ef..df5324cc4 100644 --- a/Makefile.in +++ b/Makefile.in @@ -98,6 +98,7 @@ test_suites += unittest/test_hash.cpp test_suites += unittest/test_hashutil.cpp test_suites += unittest/test_legacy_util.cpp +test_sources += unittest/TestUtil.cpp test_sources += unittest/catch2_tests.cpp test_sources += unittest/framework.cpp test_sources += unittest/main.cpp diff --git a/unittest/TestUtil.cpp b/unittest/TestUtil.cpp new file mode 100644 index 000000000..cd7f8444c --- /dev/null +++ b/unittest/TestUtil.cpp @@ -0,0 +1,48 @@ +// Copyright (C) 2020 Joel Rosdahl and other contributors +// +// See doc/AUTHORS.adoc for a complete list of contributors. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 3 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., 51 +// Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +#include "TestUtil.hpp" + +#include "../src/exceptions.hpp" + +namespace TestUtil { + +size_t TestContext::m_subdir_counter = 0; + +TestContext::TestContext() : m_test_dir(Util::get_actual_cwd()) +{ + if (!Util::base_name(m_test_dir).starts_with("testdir.")) { + throw Error("TestContext instantiated outside test directory"); + } + ++m_subdir_counter; + std::string subtest_dir = + fmt::format("{}/test_{}", m_test_dir, m_subdir_counter); + Util::create_dir(subtest_dir); + if (chdir(subtest_dir.c_str()) != 0) { + abort(); + } +} + +TestContext::~TestContext() +{ + if (chdir(m_test_dir.c_str()) != 0) { + abort(); + } +} + +} // namespace TestUtil diff --git a/unittest/TestUtil.hpp b/unittest/TestUtil.hpp new file mode 100644 index 000000000..479341792 --- /dev/null +++ b/unittest/TestUtil.hpp @@ -0,0 +1,38 @@ +// Copyright (C) 2020 Joel Rosdahl and other contributors +// +// See doc/AUTHORS.adoc for a complete list of contributors. +// +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 3 of the License, or (at your option) +// any later version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +// more details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the Free Software Foundation, Inc., 51 +// Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +#pragma once + +#include "../src/Util.hpp" + +namespace TestUtil { + +// This class is intended to be instantiated in all test cases that create local +// files. +class TestContext +{ +public: + TestContext(); + ~TestContext(); + +private: + std::string m_test_dir; + static size_t m_subdir_counter; +}; + +} // namespace TestUtil