Add support for const parameters in fakes (C only)
diff --git a/fakegen.rb b/fakegen.rb
index 4a04bc9..339742c 100644
--- a/fakegen.rb
+++ b/fakegen.rb
@@ -77,7 +77,7 @@
def define_save_arg_helper
putd ""
putd "#define SAVE_ARG(FUNCNAME, n) \\"
- putd " FUNCNAME##_fake.arg##n##_val = arg##n"
+ putd " memcpy((void*)&FUNCNAME##_fake.arg##n##_val, (void*)&arg##n, sizeof(arg##n));"
end
def define_room_for_more_history
@@ -89,7 +89,7 @@
def define_save_arg_history_helper
putd ""
putd "#define SAVE_ARG_HISTORY(FUNCNAME, ARGN) \\"
- putd " FUNCNAME##_fake.arg##ARGN##_history[FUNCNAME##_fake.call_count] = arg##ARGN"
+ putd " memcpy((void*)&FUNCNAME##_fake.arg##ARGN##_history[FUNCNAME##_fake.call_count], (void*)&arg##ARGN, sizeof(arg##ARGN));"
end
def define_history_dropped_helper
diff --git a/fff.h b/fff.h
index e62e403..a116073 100644
--- a/fff.h
+++ b/fff.h
@@ -29,13 +29,13 @@
unsigned int arg_histories_dropped; \
#define SAVE_ARG(FUNCNAME, n) \
- FUNCNAME##_fake.arg##n##_val = arg##n
+ memcpy((void*)&FUNCNAME##_fake.arg##n##_val, (void*)&arg##n, sizeof(arg##n));
#define ROOM_FOR_MORE_HISTORY(FUNCNAME) \
FUNCNAME##_fake.call_count < FFF_ARG_HISTORY_LEN
#define SAVE_ARG_HISTORY(FUNCNAME, ARGN) \
- FUNCNAME##_fake.arg##ARGN##_history[FUNCNAME##_fake.call_count] = arg##ARGN
+ memcpy((void*)&FUNCNAME##_fake.arg##ARGN##_history[FUNCNAME##_fake.call_count], (void*)&arg##ARGN, sizeof(arg##ARGN));
#define HISTORY_DROPPED(FUNCNAME) \
FUNCNAME##_fake.arg_histories_dropped++
diff --git a/test/fff_test_cpp.cpp b/test/fff_test_cpp.cpp
index 9599e31..77103e9 100644
--- a/test/fff_test_cpp.cpp
+++ b/test/fff_test_cpp.cpp
@@ -20,7 +20,6 @@
FAKE_VOID_FUNC(voidfunc1, int);
FAKE_VOID_FUNC(voidfunc2, char, char);
FAKE_VALUE_FUNC(long, longfunc0);
-FAKE_VALUE_FUNC(int, strlcpy3, char* const, const char* const, const size_t);
class FFFTestSuite: public testing::Test
{
@@ -30,7 +29,6 @@
RESET_FAKE(voidfunc1);
RESET_FAKE(voidfunc2);
RESET_FAKE(longfunc0);
- RESET_FAKE(strlcpy3);
FFF_RESET_HISTORY();
}
};
diff --git a/test/global_fakes.c b/test/global_fakes.c
index 008aa10..eb0d59c 100644
--- a/test/global_fakes.c
+++ b/test/global_fakes.c
@@ -6,4 +6,6 @@
DEFINE_FAKE_VALUE_FUNC0(long, longfunc0);
DEFINE_FAKE_VALUE_FUNC0(enum MYBOOL, enumfunc0);
DEFINE_FAKE_VALUE_FUNC0(struct MyStruct, structfunc0);
-DECLARE_FAKE_VALUE_FUNC3(int, strlcpy3, char* const, const char* const, const size_t);
+#ifndef __cplusplus
+DEFINE_FAKE_VALUE_FUNC3(int, strlcpy3, char* const, const char* const, const size_t);
+#endif /* __cplusplus */
diff --git a/test/global_fakes.h b/test/global_fakes.h
index 3bb6d20..37b933e 100644
--- a/test/global_fakes.h
+++ b/test/global_fakes.h
@@ -3,6 +3,7 @@
#define GLOBAL_FAKES_H_
#include "../fff.h"
+#include "string.h"
//// Imaginary production code header file ///
@@ -24,6 +25,8 @@
DECLARE_FAKE_VALUE_FUNC0(long, longfunc0);
DECLARE_FAKE_VALUE_FUNC0(enum MYBOOL, enumfunc0);
DECLARE_FAKE_VALUE_FUNC0(struct MyStruct, structfunc0);
+#ifndef __cplusplus
DECLARE_FAKE_VALUE_FUNC3(int, strlcpy3, char* const, const char* const, const size_t);
+#endif /* __cplusplus */
#endif /* GLOBAL_FAKES_H_ */
diff --git a/test/test_cases.include b/test/test_cases.include
index 9689731..52ae902 100644
--- a/test/test_cases.include
+++ b/test/test_cases.include
@@ -63,11 +63,13 @@
ASSERT_EQ(voidfunc2_fake.arg1_val, 0);
}
+#ifndef __cplusplus
TEST_F(FFFTestSuite, when_fake_func_called_then_const_arguments_captured)
{
char dst[80];
strlcpy3(dst, __FUNCTION__, sizeof(__FUNCTION__));
}
+#endif /* __cplusplus */
// Argument history
TEST_F(FFFTestSuite, when_fake_func_created_default_history_is_fifty_calls)