mirror of
https://github.com/meekrosoft/fff
synced 2026-01-23 00:15:59 +01:00
Replace makefiles with CMakeLists.txt. This will allow for IDE and platform agnostic builds of FFF. Update the CI for FFF to use github workflows which don't depend on MS VC. The workflow added will verify the pull requests sent to master buy running 'buildandtest' which mirrors the developer workflow. Signed-off-by: Yuval Peress <peress@google.com>
102 lines
3.1 KiB
C++
102 lines
3.1 KiB
C++
/*
|
|
* fff_test.cpp
|
|
*
|
|
* Created on: Dec 20, 2010
|
|
* Author: mlong
|
|
*/
|
|
|
|
// Want to keep the argument history for 13 calls
|
|
#define OVERRIDE_ARG_HIST_LEN 13u
|
|
#define FFF_ARG_HISTORY_LEN OVERRIDE_ARG_HIST_LEN
|
|
// Want to keep the call sequence history for 17 function calls
|
|
#define OVERRIDE_CALL_HIST_LEN 17u
|
|
#define FFF_CALL_HISTORY_LEN OVERRIDE_CALL_HIST_LEN
|
|
|
|
#include "fff.h"
|
|
#include <gtest/gtest.h>
|
|
|
|
DEFINE_FFF_GLOBALS
|
|
|
|
#ifndef TEST_WITH_CALLING_CONVENTIONS
|
|
FAKE_VOID_FUNC(voidfunc1, int);
|
|
FAKE_VOID_FUNC(voidfunc2, char, char);
|
|
FAKE_VOID_FUNC(voidfunc1outparam, char *);
|
|
FAKE_VALUE_FUNC(long, longfunc0);
|
|
FAKE_VOID_FUNC_VARARG(voidfunc3var, const char *, int, ...);
|
|
FAKE_VALUE_FUNC_VARARG(int, valuefunc3var, const char *, int, ...);
|
|
FAKE_VOID_FUNC(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
|
|
FAKE_VALUE_FUNC(int, valuefunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
|
|
#else
|
|
FAKE_VOID_FUNC(__cdecl, voidfunc1, int);
|
|
FAKE_VOID_FUNC(__cdecl, voidfunc2, char, char);
|
|
FAKE_VOID_FUNC(__cdecl, voidfunc1outparam, char *);
|
|
FAKE_VALUE_FUNC(long, __cdecl, longfunc0);
|
|
FAKE_VOID_FUNC_VARARG(__cdecl, voidfunc3var, const char *, int, ...);
|
|
FAKE_VALUE_FUNC_VARARG(int, __cdecl, valuefunc3var, const char *, int, ...);
|
|
FAKE_VOID_FUNC(__cdecl, voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
|
|
FAKE_VALUE_FUNC(int, __cdecl, valuefunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
|
|
#endif
|
|
|
|
class FFFTestSuite: public testing::Test
|
|
{
|
|
public:
|
|
void SetUp()
|
|
{
|
|
RESET_FAKE(voidfunc1);
|
|
RESET_FAKE(voidfunc2);
|
|
RESET_FAKE(longfunc0);
|
|
RESET_FAKE(voidfunc1outparam);
|
|
RESET_FAKE(voidfunc3var);
|
|
RESET_FAKE(valuefunc3var);
|
|
FFF_RESET_HISTORY();
|
|
}
|
|
};
|
|
|
|
TEST_F(FFFTestSuite, default_constants_can_be_overridden)
|
|
{
|
|
unsigned sizeCallHistory = (sizeof fff.call_history) / (sizeof fff.call_history[0]);
|
|
ASSERT_EQ(OVERRIDE_CALL_HIST_LEN, sizeCallHistory);
|
|
ASSERT_EQ(OVERRIDE_ARG_HIST_LEN, voidfunc2_fake.arg_history_len);
|
|
}
|
|
|
|
// Fake declared in C++ context (not extern "C", using namespace)
|
|
// before the fake is declared
|
|
namespace cxx
|
|
{
|
|
typedef int int_t;
|
|
void voidfunc1(cxx::int_t);
|
|
}
|
|
|
|
// Now declare the fake. Must be in the same namespace as the
|
|
// original declaration.
|
|
namespace cxx
|
|
{
|
|
#ifndef TEST_WITH_CALLING_CONVENTIONS
|
|
FAKE_VOID_FUNC(voidfunc1, cxx::int_t);
|
|
#else
|
|
FAKE_VOID_FUNC(_cdecl, voidfunc1, cxx::int_t);
|
|
#endif
|
|
}
|
|
|
|
TEST_F(FFFTestSuite, cxx_fake_is_called)
|
|
{
|
|
cxx::voidfunc1(66);
|
|
ASSERT_EQ(cxx::voidfunc1_fake.call_count, 1u);
|
|
ASSERT_EQ(cxx::voidfunc1_fake.arg0_val, 66);
|
|
}
|
|
|
|
static int cxx_my_custom_fake_called = 0;
|
|
void cxx_my_custom_fake(cxx::int_t i)
|
|
{
|
|
cxx_my_custom_fake_called++;
|
|
}
|
|
|
|
TEST_F(FFFTestSuite, cxx_can_register_custom_fake)
|
|
{
|
|
cxx::voidfunc1_fake.custom_fake = cxx_my_custom_fake;
|
|
cxx::voidfunc1(66);
|
|
ASSERT_EQ(1, cxx_my_custom_fake_called);
|
|
}
|
|
|
|
#include "test_cases.include"
|