forked from 3rd-party/fff
New feature: no longer need to specify argument count in the declaration
This commit is contained in:
54
fakegen.rb
54
fakegen.rb
@@ -223,9 +223,60 @@ def include_guard
|
|||||||
puts "#endif // FAKE_FUNCTIONS"
|
puts "#endif // FAKE_FUNCTIONS"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def output_macro_counting_shortcuts
|
||||||
|
puts <<-MACRO_COUNTING
|
||||||
|
|
||||||
|
#define PP_NARG_MINUS2(...) \
|
||||||
|
PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2())
|
||||||
|
|
||||||
|
#define PP_NARG_MINUS2_(...) \
|
||||||
|
PP_ARG_MINUS2_N(__VA_ARGS__)
|
||||||
|
|
||||||
|
#define PP_ARG_MINUS2_N(returnVal, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, N, ...) N
|
||||||
|
|
||||||
|
#define PP_RSEQ_N_MINUS2() \
|
||||||
|
9,8,7,6,5,4,3,2,1,0
|
||||||
|
|
||||||
|
|
||||||
|
#define FAKE_VALUE_FUNC(...) \
|
||||||
|
FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
|
||||||
|
|
||||||
|
#define FUNC_VALUE_(N,...) \
|
||||||
|
FUNC_VALUE_N(N,__VA_ARGS__)
|
||||||
|
|
||||||
|
#define FUNC_VALUE_N(N,...) \
|
||||||
|
FAKE_VALUE_FUNC ## N(__VA_ARGS__)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define PP_NARG_MINUS1(...) \
|
||||||
|
PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1())
|
||||||
|
|
||||||
|
#define PP_NARG_MINUS1_(...) \
|
||||||
|
PP_ARG_MINUS1_N(__VA_ARGS__)
|
||||||
|
|
||||||
|
#define PP_ARG_MINUS1_N(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, N, ...) N
|
||||||
|
|
||||||
|
#define PP_RSEQ_N_MINUS1() \
|
||||||
|
9,8,7,6,5,4,3,2,1,0
|
||||||
|
|
||||||
|
#define FAKE_VOID_FUNC(...) \
|
||||||
|
FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
|
||||||
|
|
||||||
|
#define FUNC_VOID_(N,...) \
|
||||||
|
FUNC_VOID_N(N,__VA_ARGS__)
|
||||||
|
|
||||||
|
#define FUNC_VOID_N(N,...) \
|
||||||
|
FAKE_VOID_FUNC ## N(__VA_ARGS__)
|
||||||
|
|
||||||
|
MACRO_COUNTING
|
||||||
|
end
|
||||||
|
|
||||||
def output_c_and_cpp
|
def output_c_and_cpp
|
||||||
|
|
||||||
include_guard {
|
include_guard {
|
||||||
|
output_constants
|
||||||
|
|
||||||
puts "#ifdef __cplusplus"
|
puts "#ifdef __cplusplus"
|
||||||
$cpp_output = true
|
$cpp_output = true
|
||||||
yield
|
yield
|
||||||
@@ -235,12 +286,13 @@ def output_c_and_cpp
|
|||||||
$cpp_output = false
|
$cpp_output = false
|
||||||
yield
|
yield
|
||||||
puts "#endif /* cpp/ansi c */"
|
puts "#endif /* cpp/ansi c */"
|
||||||
|
|
||||||
|
output_macro_counting_shortcuts
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
# lets generate!!
|
# lets generate!!
|
||||||
output_c_and_cpp{
|
output_c_and_cpp{
|
||||||
output_constants
|
|
||||||
define_reset_fake
|
define_reset_fake
|
||||||
define_call_history
|
define_call_history
|
||||||
define_return_sequence
|
define_return_sequence
|
||||||
|
|||||||
41
fff.h
41
fff.h
@@ -1,7 +1,6 @@
|
|||||||
#ifndef FAKE_FUNCTIONS
|
#ifndef FAKE_FUNCTIONS
|
||||||
#define FAKE_FUNCTIONS
|
#define FAKE_FUNCTIONS
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
#define FFF_MAX_ARGS (10u)
|
#define FFF_MAX_ARGS (10u)
|
||||||
#ifndef FFF_ARG_HISTORY_LEN
|
#ifndef FFF_ARG_HISTORY_LEN
|
||||||
#define FFF_ARG_HISTORY_LEN (50u)
|
#define FFF_ARG_HISTORY_LEN (50u)
|
||||||
@@ -9,6 +8,7 @@
|
|||||||
#ifndef FFF_CALL_HISTORY_LEN
|
#ifndef FFF_CALL_HISTORY_LEN
|
||||||
#define FFF_CALL_HISTORY_LEN (50u)
|
#define FFF_CALL_HISTORY_LEN (50u)
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
/* Defining a function to reset a fake function */
|
/* Defining a function to reset a fake function */
|
||||||
#define RESET_FAKE(FUNCNAME) { \
|
#define RESET_FAKE(FUNCNAME) { \
|
||||||
@@ -1320,13 +1320,6 @@ extern "C"{ \
|
|||||||
STATIC_INIT(FUNCNAME) \
|
STATIC_INIT(FUNCNAME) \
|
||||||
|
|
||||||
#else /* ansi c */
|
#else /* ansi c */
|
||||||
#define FFF_MAX_ARGS (10u)
|
|
||||||
#ifndef FFF_ARG_HISTORY_LEN
|
|
||||||
#define FFF_ARG_HISTORY_LEN (50u)
|
|
||||||
#endif
|
|
||||||
#ifndef FFF_CALL_HISTORY_LEN
|
|
||||||
#define FFF_CALL_HISTORY_LEN (50u)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Defining a function to reset a fake function */
|
/* Defining a function to reset a fake function */
|
||||||
#define RESET_FAKE(FUNCNAME) { \
|
#define RESET_FAKE(FUNCNAME) { \
|
||||||
@@ -2555,4 +2548,36 @@ static void RESET_HISTORY() {
|
|||||||
|
|
||||||
#endif /* cpp/ansi c */
|
#endif /* cpp/ansi c */
|
||||||
|
|
||||||
|
#define PP_NARG_MINUS2(...) PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2())
|
||||||
|
|
||||||
|
#define PP_NARG_MINUS2_(...) PP_ARG_MINUS2_N(__VA_ARGS__)
|
||||||
|
|
||||||
|
#define PP_ARG_MINUS2_N(returnVal, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, N, ...) N
|
||||||
|
|
||||||
|
#define PP_RSEQ_N_MINUS2() 9,8,7,6,5,4,3,2,1,0
|
||||||
|
|
||||||
|
|
||||||
|
#define FAKE_VALUE_FUNC(...) FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
|
||||||
|
|
||||||
|
#define FUNC_VALUE_(N,...) FUNC_VALUE_N(N,__VA_ARGS__)
|
||||||
|
|
||||||
|
#define FUNC_VALUE_N(N,...) FAKE_VALUE_FUNC ## N(__VA_ARGS__)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define PP_NARG_MINUS1(...) PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1())
|
||||||
|
|
||||||
|
#define PP_NARG_MINUS1_(...) PP_ARG_MINUS1_N(__VA_ARGS__)
|
||||||
|
|
||||||
|
#define PP_ARG_MINUS1_N(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, N, ...) N
|
||||||
|
|
||||||
|
#define PP_RSEQ_N_MINUS1() 9,8,7,6,5,4,3,2,1,0
|
||||||
|
|
||||||
|
#define FAKE_VOID_FUNC(...) FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
|
||||||
|
|
||||||
|
#define FUNC_VOID_(N,...) FUNC_VOID_N(N,__VA_ARGS__)
|
||||||
|
|
||||||
|
#define FUNC_VOID_N(N,...) FAKE_VOID_FUNC ## N(__VA_ARGS__)
|
||||||
|
|
||||||
|
|
||||||
#endif // FAKE_FUNCTIONS
|
#endif // FAKE_FUNCTIONS
|
||||||
|
|||||||
@@ -25,11 +25,11 @@ struct MyStruct {
|
|||||||
int y;
|
int y;
|
||||||
};
|
};
|
||||||
|
|
||||||
FAKE_VOID_FUNC1(voidfunc1, int);
|
FAKE_VOID_FUNC(voidfunc1, int);
|
||||||
FAKE_VOID_FUNC2(voidfunc2, char, char);
|
FAKE_VOID_FUNC(voidfunc2, char, char);
|
||||||
FAKE_VALUE_FUNC0(long, longfunc0);
|
FAKE_VALUE_FUNC(long, longfunc0);
|
||||||
FAKE_VALUE_FUNC0(enum MYBOOL, enumfunc0);
|
FAKE_VALUE_FUNC(enum MYBOOL, enumfunc0);
|
||||||
FAKE_VALUE_FUNC0(struct MyStruct, structfunc0);
|
FAKE_VALUE_FUNC(struct MyStruct, structfunc0);
|
||||||
|
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
@@ -254,6 +254,7 @@ TEST_F(FFFTestSuite, default_constants_can_be_overridden)
|
|||||||
ASSERT_EQ(OVERRIDE_ARG_HIST_LEN, voidfunc2_arg_history_len);
|
ASSERT_EQ(OVERRIDE_ARG_HIST_LEN, voidfunc2_arg_history_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
setbuf(stdout, NULL);
|
setbuf(stdout, NULL);
|
||||||
|
|||||||
@@ -15,9 +15,9 @@
|
|||||||
#include "../fff.h"
|
#include "../fff.h"
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
FAKE_VOID_FUNC1(voidfunc1, int);
|
FAKE_VOID_FUNC(voidfunc1, int);
|
||||||
FAKE_VOID_FUNC2(voidfunc2, char, char);
|
FAKE_VOID_FUNC(voidfunc2, char, char);
|
||||||
FAKE_VALUE_FUNC0(long, longfunc0);
|
FAKE_VALUE_FUNC(long, longfunc0);
|
||||||
|
|
||||||
class FFFTestSuite: public testing::Test
|
class FFFTestSuite: public testing::Test
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user