2020-01-20 10:45:53 -06:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
|
|
|
|
/*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*/
|
|
|
|
|
2020-04-18 03:39:50 -05:00
|
|
|
#pragma once
|
2020-01-20 10:45:53 -06:00
|
|
|
|
2020-12-20 17:35:31 -06:00
|
|
|
#include "testlog.hpp"
|
|
|
|
|
2020-01-20 10:45:53 -06:00
|
|
|
#include <assert.h>
|
|
|
|
|
|
|
|
#include <cppunit/extensions/HelperMacros.h>
|
|
|
|
|
|
|
|
inline std::ostream& operator<<(std::ostream& os, const std::vector<char>& v)
|
|
|
|
{
|
2020-11-15 11:03:45 -06:00
|
|
|
const std::size_t size = v.size();
|
2020-01-20 10:45:53 -06:00
|
|
|
if (size <= 32)
|
|
|
|
os << std::string(v.data(), size);
|
|
|
|
else
|
|
|
|
os << std::string(v.data(), 32) << "...";
|
|
|
|
|
|
|
|
return os;
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef LOK_ABORT_ON_ASSERTION
|
|
|
|
#define LOK_ASSERT_IMPL(X) assert(X);
|
|
|
|
#else
|
|
|
|
#define LOK_ASSERT_IMPL(X)
|
2020-04-16 06:14:23 -05:00
|
|
|
#endif //LOK_ABORT_ON_ASSERTION
|
2020-01-20 10:45:53 -06:00
|
|
|
|
|
|
|
#define LOK_ASSERT(condition) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
if (!(condition)) \
|
|
|
|
{ \
|
2020-12-22 18:08:45 -06:00
|
|
|
TST_LOG_NAME("unittest", "Assertion failure: " << (#condition)); \
|
2020-01-20 10:45:53 -06:00
|
|
|
LOK_ASSERT_IMPL(condition); \
|
|
|
|
CPPUNIT_ASSERT(condition); \
|
|
|
|
} \
|
|
|
|
} while (false)
|
|
|
|
|
|
|
|
#define LOK_ASSERT_EQUAL(expected, actual) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
if (!((expected) == (actual))) \
|
|
|
|
{ \
|
2020-12-22 18:08:45 -06:00
|
|
|
TST_LOG_NAME("unittest", "Assertion failure: Expected [" \
|
|
|
|
<< (expected) << "] but got [" << (actual) << ']'); \
|
2020-01-20 10:45:53 -06:00
|
|
|
LOK_ASSERT_IMPL((expected) == (actual)); \
|
|
|
|
CPPUNIT_ASSERT_EQUAL((expected), (actual)); \
|
|
|
|
} \
|
|
|
|
} while (false)
|
|
|
|
|
|
|
|
#define LOK_ASSERT_EQUAL_MESSAGE(message, expected, actual) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
if (!((expected) == (actual))) \
|
|
|
|
{ \
|
2020-12-22 18:08:45 -06:00
|
|
|
TST_LOG_NAME("unittest", "Assertion failure: " << (message) << ". Expected [" \
|
|
|
|
<< (expected) << "] but got [" \
|
|
|
|
<< (actual) << "]: "); \
|
2020-01-20 10:45:53 -06:00
|
|
|
LOK_ASSERT_IMPL((expected) == (actual)); \
|
|
|
|
CPPUNIT_ASSERT_EQUAL_MESSAGE((message), (expected), (actual)); \
|
|
|
|
} \
|
|
|
|
} while (false)
|
|
|
|
|
|
|
|
#define LOK_ASSERT_MESSAGE(message, condition) \
|
|
|
|
do \
|
|
|
|
{ \
|
|
|
|
if (!(condition)) \
|
|
|
|
{ \
|
2020-12-22 18:08:45 -06:00
|
|
|
TST_LOG_NAME("unittest", \
|
|
|
|
"Assertion failure: " << (message) << ". Condition: " << (#condition)); \
|
2020-01-20 10:45:53 -06:00
|
|
|
LOK_ASSERT_IMPL(condition); \
|
|
|
|
CPPUNIT_ASSERT_MESSAGE((message), (condition)); \
|
|
|
|
} \
|
|
|
|
} while (false)
|
|
|
|
|
|
|
|
#define LOK_ASSERT_FAIL(message) \
|
|
|
|
do \
|
|
|
|
{ \
|
2020-12-22 18:08:45 -06:00
|
|
|
TST_LOG_NAME("unittest", "Forced failure: " << (message)); \
|
|
|
|
LOK_ASSERT_IMPL(!"Forced failure"); \
|
2020-01-20 10:45:53 -06:00
|
|
|
CPPUNIT_FAIL((message)); \
|
|
|
|
} while (false)
|