Test: Change expect macros to support optional parameters
This commit is contained in:
+51
-10
@@ -4,35 +4,76 @@
|
|||||||
#include <cstdio> // fprintf
|
#include <cstdio> // fprintf
|
||||||
#include <iostream> // cerr
|
#include <iostream> // cerr
|
||||||
|
|
||||||
#define VERIFY(x, result) \
|
#define GET_2TH_ARG(arg1, arg2, ...) arg2
|
||||||
|
#define GET_3TH_ARG(arg1, arg2, arg3, ...) arg3
|
||||||
|
#define GET_4TH_ARG(arg1, arg2, arg3, arg4, ...) arg4
|
||||||
|
#define MACRO_CHOOSER_1(macro, ...) \
|
||||||
|
GET_2TH_ARG(__VA_ARGS__, macro##_1, )
|
||||||
|
#define MACRO_CHOOSER_2(macro, ...) \
|
||||||
|
GET_3TH_ARG(__VA_ARGS__, macro##_2, macro##_1, )
|
||||||
|
#define MACRO_CHOOSER_3(macro, ...) \
|
||||||
|
GET_4TH_ARG(__VA_ARGS__, macro##_3, macro##_2, macro##_1, )
|
||||||
|
|
||||||
|
// -----------------------------------------
|
||||||
|
|
||||||
|
#define EXPECT_IMPL(x, result) \
|
||||||
if (!(x)) { \
|
if (!(x)) { \
|
||||||
fprintf(stderr, " \033[31;1mFAIL:\033[0m %s:%d: VERIFY(%s) failed\n", \
|
fprintf(stderr, " \033[31;1mFAIL:\033[0m %s:%d: EXPECT(%s) failed\n", \
|
||||||
__FILE__, __LINE__, #x); \
|
__FILE__, __LINE__, #x); \
|
||||||
Test::TestSuite::the().currentTestCaseFailed(); \
|
Test::TestSuite::the().currentTestCaseFailed(); \
|
||||||
result; \
|
result; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define EXPECT(x) \
|
#define EXPECT_1(x) \
|
||||||
if (!(x)) { \
|
EXPECT_IMPL(x, (void)0)
|
||||||
fprintf(stderr, " \033[31;1mFAIL:\033[0m %s:%d: EXPECT(%s) failed\n", \
|
|
||||||
__FILE__, __LINE__, #x); \
|
|
||||||
Test::TestSuite::the().currentTestCaseFailed(); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define EXPECT_EQ(a, b) \
|
#define EXPECT_2(x, result) \
|
||||||
|
EXPECT_IMPL(x, result)
|
||||||
|
|
||||||
|
#define EXPECT(...) \
|
||||||
|
MACRO_CHOOSER_2(EXPECT, __VA_ARGS__) \
|
||||||
|
(__VA_ARGS__)
|
||||||
|
|
||||||
|
// -----------------------------------------
|
||||||
|
|
||||||
|
#define EXPECT_EQ_IMPL(a, b, result) \
|
||||||
if (a != b) { \
|
if (a != b) { \
|
||||||
std::cerr << " \033[31;1mFAIL:\033[0m " << __FILE__ << ":" << __LINE__ \
|
std::cerr << " \033[31;1mFAIL:\033[0m " << __FILE__ << ":" << __LINE__ \
|
||||||
<< ": EXPECT_EQ(" << #a << ", " << #b ") failed with" \
|
<< ": EXPECT_EQ(" << #a << ", " << #b ") failed with" \
|
||||||
<< " lhs='" << a << "' and rhs='" << b << "'" << std::endl; \
|
<< " lhs='" << a << "' and rhs='" << b << "'" << std::endl; \
|
||||||
Test::TestSuite::the().currentTestCaseFailed(); \
|
Test::TestSuite::the().currentTestCaseFailed(); \
|
||||||
|
result; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define EXPECT_NE(a, b) \
|
#define EXPECT_EQ_2(a, b) \
|
||||||
|
EXPECT_EQ_IMPL(a, b, (void)0)
|
||||||
|
|
||||||
|
#define EXPECT_EQ_3(a, b, result) \
|
||||||
|
EXPECT_EQ_IMPL(a, b, result)
|
||||||
|
|
||||||
|
#define EXPECT_EQ(...) \
|
||||||
|
MACRO_CHOOSER_3(EXPECT_EQ, __VA_ARGS__) \
|
||||||
|
(__VA_ARGS__)
|
||||||
|
|
||||||
|
// -----------------------------------------
|
||||||
|
|
||||||
|
#define EXPECT_NE_IMPL(a, b, result) \
|
||||||
if (a == b) { \
|
if (a == b) { \
|
||||||
std::cerr << " \033[31;1mFAIL:\033[0m " << __FILE__ << ":" << __LINE__ \
|
std::cerr << " \033[31;1mFAIL:\033[0m " << __FILE__ << ":" << __LINE__ \
|
||||||
<< ": EXPECT_NE(" << #a << ", " << #b ") failed with" \
|
<< ": EXPECT_NE(" << #a << ", " << #b ") failed with" \
|
||||||
<< " lhs='" << a << "' and rhs='" << b << "'" << std::endl; \
|
<< " lhs='" << a << "' and rhs='" << b << "'" << std::endl; \
|
||||||
Test::TestSuite::the().currentTestCaseFailed(); \
|
Test::TestSuite::the().currentTestCaseFailed(); \
|
||||||
|
result; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define EXPECT_NE_2(a, b) \
|
||||||
|
EXPECT_NE_IMPL(a, b, (void)0)
|
||||||
|
|
||||||
|
#define EXPECT_NE_3(a, b, result) \
|
||||||
|
EXPECT_NE_IMPL(a, b, result)
|
||||||
|
|
||||||
|
#define EXPECT_NE(...) \
|
||||||
|
MACRO_CHOOSER_3(EXPECT_NE, __VA_ARGS__) \
|
||||||
|
(__VA_ARGS__)
|
||||||
|
|
||||||
#endif // TEST_H
|
#endif // TEST_H
|
||||||
|
|||||||
+11
-11
@@ -27,7 +27,7 @@ const size_t homeDirectorySize = homeDirectory.string().size();
|
|||||||
|
|
||||||
void createTestDotfiles(const std::vector<std::string>& fileNames, const std::vector<std::string>& fileContents, bool asRoot = false)
|
void createTestDotfiles(const std::vector<std::string>& fileNames, const std::vector<std::string>& fileContents, bool asRoot = false)
|
||||||
{
|
{
|
||||||
VERIFY(fileNames.size() == fileContents.size(), return);
|
EXPECT(fileNames.size() == fileContents.size(), return );
|
||||||
|
|
||||||
if (root && !asRoot) {
|
if (root && !asRoot) {
|
||||||
setegid(Machine::the().gid());
|
setegid(Machine::the().gid());
|
||||||
@@ -100,8 +100,8 @@ TEST_CASE(AddDotfiles)
|
|||||||
Dotfile::the().add(fileNames);
|
Dotfile::the().add(fileNames);
|
||||||
|
|
||||||
for (const auto& file : fileNames) {
|
for (const auto& file : fileNames) {
|
||||||
VERIFY(std::filesystem::exists(file), continue);
|
EXPECT(std::filesystem::exists(file), continue);
|
||||||
VERIFY(std::filesystem::exists(file.substr(homeDirectorySize + 1)), continue);
|
EXPECT(std::filesystem::exists(file.substr(homeDirectorySize + 1)), continue);
|
||||||
|
|
||||||
Util::File lhs(file);
|
Util::File lhs(file);
|
||||||
Util::File rhs(file.substr(homeDirectorySize + 1));
|
Util::File rhs(file.substr(homeDirectorySize + 1));
|
||||||
@@ -156,8 +156,8 @@ TEST_CASE(PullDotfiles)
|
|||||||
Dotfile::the().pull(fileNames);
|
Dotfile::the().pull(fileNames);
|
||||||
|
|
||||||
for (size_t i = 0; i < fileNames.size(); ++i) {
|
for (size_t i = 0; i < fileNames.size(); ++i) {
|
||||||
VERIFY(std::filesystem::exists(homeFileNames.at(i)), continue);
|
EXPECT(std::filesystem::exists(homeFileNames.at(i)), continue);
|
||||||
VERIFY(std::filesystem::exists(fileNames.at(i)), continue);
|
EXPECT(std::filesystem::exists(fileNames.at(i)), continue);
|
||||||
|
|
||||||
Util::File lhs(homeFileNames.at(i));
|
Util::File lhs(homeFileNames.at(i));
|
||||||
Util::File rhs(fileNames.at(i));
|
Util::File rhs(fileNames.at(i));
|
||||||
@@ -189,8 +189,8 @@ TEST_CASE(PushDotfiles)
|
|||||||
Dotfile::the().push(fileNames);
|
Dotfile::the().push(fileNames);
|
||||||
|
|
||||||
for (const auto& file : fileNames) {
|
for (const auto& file : fileNames) {
|
||||||
VERIFY(std::filesystem::exists(file), continue);
|
EXPECT(std::filesystem::exists(file), continue);
|
||||||
VERIFY(std::filesystem::exists(homeDirectory / file), continue);
|
EXPECT(std::filesystem::exists(homeDirectory / file), continue);
|
||||||
|
|
||||||
Util::File lhs(file);
|
Util::File lhs(file);
|
||||||
Util::File rhs(homeDirectory / file);
|
Util::File rhs(homeDirectory / file);
|
||||||
@@ -580,8 +580,8 @@ test data /**/ uncomment
|
|||||||
|
|
||||||
for (size_t i = 0; i < fileNames.size(); ++i) {
|
for (size_t i = 0; i < fileNames.size(); ++i) {
|
||||||
const auto& file = fileNames.at(i);
|
const auto& file = fileNames.at(i);
|
||||||
VERIFY(std::filesystem::exists(file), continue);
|
EXPECT(std::filesystem::exists(file), continue);
|
||||||
VERIFY(std::filesystem::exists(homeDirectory / file), continue);
|
EXPECT(std::filesystem::exists(homeDirectory / file), continue);
|
||||||
|
|
||||||
Util::File lhs(homeDirectory / file);
|
Util::File lhs(homeDirectory / file);
|
||||||
EXPECT_EQ(lhs.data(), pushedFileContents.at(i));
|
EXPECT_EQ(lhs.data(), pushedFileContents.at(i));
|
||||||
@@ -592,7 +592,7 @@ test data /**/ uncomment
|
|||||||
|
|
||||||
TEST_CASE(AddSystemDotfiles)
|
TEST_CASE(AddSystemDotfiles)
|
||||||
{
|
{
|
||||||
VERIFY(geteuid() == 0, return);
|
EXPECT(geteuid() == 0, return);
|
||||||
|
|
||||||
Config::the().setSystemDirectories({ "/etc", "/usr/lib" });
|
Config::the().setSystemDirectories({ "/etc", "/usr/lib" });
|
||||||
Dotfile::the().add({ "/etc/group", "/usr/lib/os-release" });
|
Dotfile::the().add({ "/etc/group", "/usr/lib/os-release" });
|
||||||
@@ -607,7 +607,7 @@ TEST_CASE(AddSystemDotfiles)
|
|||||||
|
|
||||||
TEST_CASE(PullSystemDotfiles)
|
TEST_CASE(PullSystemDotfiles)
|
||||||
{
|
{
|
||||||
VERIFY(geteuid() == 0, return);
|
EXPECT(geteuid() == 0, return);
|
||||||
|
|
||||||
createTestDotfiles({ "etc/group" }, { "" }, true);
|
createTestDotfiles({ "etc/group" }, { "" }, true);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user