summaryrefslogtreecommitdiff
path: root/lib/utils/mu-test-utils.hh
diff options
context:
space:
mode:
authorDirk-Jan C. Binnema <djcb@djcbsoftware.nl>2022-08-10 08:20:58 +0300
committerDirk-Jan C. Binnema <djcb@djcbsoftware.nl>2022-08-15 23:18:18 +0300
commit11389247c532bf3564ea89ea3264f707d1340dd2 (patch)
treefc686b483a9c75785af2b82fa06b6b5f54b4eeed /lib/utils/mu-test-utils.hh
parent3ba2c4ea08b5f9631556718c1f9b59d5213ea15b (diff)
tests: update test helpers and users
Move test-mu-common to mu-test-utils. Use mu_test_init as a wrapper for g_test_init. Update users.
Diffstat (limited to 'lib/utils/mu-test-utils.hh')
-rw-r--r--lib/utils/mu-test-utils.hh129
1 files changed, 129 insertions, 0 deletions
diff --git a/lib/utils/mu-test-utils.hh b/lib/utils/mu-test-utils.hh
new file mode 100644
index 0000000..c59b9d5
--- /dev/null
+++ b/lib/utils/mu-test-utils.hh
@@ -0,0 +1,129 @@
+/*
+** Copyright (C) 2008-2022 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
+**
+** 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, 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.
+**
+*/
+
+#ifndef MU_TEST_UTILS_HH__
+#define MU_TEST_UTILS_HH__
+
+#include <string>
+
+namespace Mu {
+
+/**
+ * get a dir name for a random temporary directory to do tests
+ *
+ * @return a random dir name, g_free when it's no longer needed
+ */
+char* test_mu_common_get_random_tmpdir();
+
+/**
+ * mu wrapper for g_test_init
+ *
+ * @param argc
+ * @param argv
+ */
+void mu_test_init(int *argc, char ***argv);
+
+/**
+ * set the timezone
+ *
+ * @param tz timezone
+ *
+ * @return the old timezone
+ */
+const char* set_tz(const char* tz);
+
+/**
+ * switch the locale to en_US.utf8, return TRUE if it succeeds
+ *
+ * @return true if the switch succeeds, false otherwise
+ */
+bool set_en_us_utf8_locale();
+
+/**
+ * For unit tests, assert two std::string's are equal.
+ *
+ * @param s1 string1
+ * @param s2 string2
+ */
+#define assert_equal(s1__,s2__) do { \
+ std::string s1s__(s1__), s2s__(s2__); \
+ g_assert_cmpstr(s1s__.c_str(), ==, s2s__.c_str()); \
+ } while(0)
+
+
+#define assert_equal_seq(seq1__, seq2__) do { \
+ g_assert_cmpuint(seq1__.size(), ==, seq2__.size()); \
+ size_t n__{}; \
+ for (auto&& item__: seq1__) { \
+ g_assert_true(item__ == seq2__.at(n__)); \
+ ++n__; \
+ } \
+ } while(0)
+
+#define assert_equal_seq_str(seq1__, seq2__) do { \
+ g_assert_cmpuint(seq1__.size(), ==, seq2__.size()); \
+ size_t n__{}; \
+ for (auto&& item__: seq1__) { \
+ assert_equal(item__, seq2__.at(n__)); \
+ ++n__; \
+ } \
+ } while(0)
+
+/**
+ * For unit-tests, allow warnings in the current function.
+ *
+ */
+void allow_warnings();
+
+
+/**
+ * For unit-tests, a RAII tempdir.
+ *
+ */
+struct TempDir {
+ /**
+ * Construct a temporary directory
+ */
+ TempDir(bool autodelete=true);
+
+ /**
+ * DTOR; removes the temporary directory
+ *
+ *
+ * @return
+ */
+ ~TempDir();
+
+ /**
+ * Path to the temporary directory
+ *
+ * @return the path.
+ *
+ *
+ */
+ const std::string& path() {return path_; }
+private:
+ std::string path_;
+ const bool autodelete_;
+};
+
+} // namepace Mu
+
+
+#endif /* MU_TEST_UTILS_HH__ */