1
0
mirror of https://github.com/meekrosoft/fff synced 2026-01-23 16:35:59 +01:00

6 Commits

Author SHA1 Message Date
Mike Long
5bcc26d15e Try github actions on windows, mac and ubuntu 2022-08-03 18:58:24 +01:00
Mike Long
7e09f07e5b Merge pull request #77 from henningrehn/return_value_history_for_custom_fakes
Handle return value history for custom fakes
2019-08-21 14:57:51 +02:00
Henning Rehn
b9f11dcd8a Handle return value history for custom fakes 2019-08-21 12:37:58 +02:00
James Fraser
ab47e7fc5b Update README.md 2019-03-02 16:01:24 +11:00
James Fraser
f9c08aec81 Update README.md 2019-03-02 16:00:41 +11:00
James Fraser
cf2c4780ef Update README.md 2019-03-02 15:59:49 +11:00
5 changed files with 270 additions and 80 deletions

28
.github/workflows/build.yaml vendored Normal file
View File

@@ -0,0 +1,28 @@
name: Checks
on:
pull_request:
branches:
- master
jobs:
windows:
name: run on windows
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: ilammy/msvc-dev-cmd@v1.4.1
- name: compile
run: |
dir /s /b /o:gn
mac-and-ubuntu:
runs-on: ${{matrix.os}}
strategy:
matrix:
os: [macos-latest, ubuntu-latest]
name: ${{matrix.os}}
steps:
- uses: actions/checkout@v2
- name: compile
run: |
./buildandtest

View File

@@ -6,34 +6,29 @@
[![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://gitter.im/wulfgarpro/fff?utm_source=share-link&utm_medium=link&utm_campaign=share-link) [![Gitter chat](https://badges.gitter.im/gitterHQ/gitter.png)](https://gitter.im/wulfgarpro/fff?utm_source=share-link&utm_medium=link&utm_campaign=share-link)
- [A Fake Function Framework for C](#a-fake-function-framework-for-c) - [A Fake Function Framework for C](#a-fake-function-framework-for-c)
- [Hello fake world!](#hello-fake-world) - [Hello Fake World!](#hello-fake-world)
- [Capturing arguments](#capturing-arguments) - [Capturing Arguments](#capturing-arguments)
- [Return values](#return-values) - [Return Values](#return-values)
- [Resetting a fake](#resetting-a-fake) - [Resetting a Fake](#resetting-a-fake)
- [Call history](#call-history) - [Call History](#call-history)
- [Default Argument History](#default-argument-history) - [Default Argument History](#default-argument-history)
- [User Defined Argument History](#user-defined-argument-history) - [User Defined Argument History](#user-defined-argument-history)
- [Function Return Value Sequences](#function-return-value-sequences) - [Function Return Value Sequences](#function-return-value-sequences)
- [Custom Return Value Delegate](#custom-return-value-delegate) - [Custom Return Value Delegate](#custom-return-value-delegate)
- [Custom Return Value Delegate Sequences](#custom-return-value-delegate-sequences) - [Return Value History](#return-value-history)
- [Return value history](#return-value-history)
- [Variadic Functions](#variadic-functions) - [Variadic Functions](#variadic-functions)
- [How do I specify calling conventions for my fake functions?](#how-do-i-specify-calling-conventions-for-my-fake-functions) - [Common Questions](#common-questions)
- [How do I fake a function that returns a value by reference?](#how-do-i-fake-a-function-that-returns-a-value-by-reference)
- [How do I fake a function with a function pointer parameter?](#how-do-i-fake-a-function-with-a-function-pointer-parameter)
- [How do I reuse a fake across multiple test-suites?](#how-do-i-reuse-a-fake-across-multiple-test-suites)
- [Specifying GCC Function Attributes](#specifying-gcc-function-attributes) - [Specifying GCC Function Attributes](#specifying-gcc-function-attributes)
- [Find out more...](#find-out-more) - [Find Out More](#find-out-more)
- [Benefits](#benefits) - [Benefits](#benefits)
- [Under the hood](#under-the-hood) - [Under the Hood](#under-the-hood)
- [Cheat Sheet](#cheat-sheet) - [Cheat Sheet](#cheat-sheet)
## A Fake Function Framework for C ## A Fake Function Framework for C
fff is a micro-framework for creating fake C functions for tests. Because life fff is a micro-framework for creating fake C functions for tests. Because life
is too short to spend time hand-writing fake functions for testing. is too short to spend time hand-writing fake functions for testing.
## Hello Fake World!
## Hello fake world!
Say you are testing an embedded user interface and you have a function that Say you are testing an embedded user interface and you have a function that
you want to create a fake for: you want to create a fake for:
@@ -87,11 +82,7 @@ typedef struct DISPLAY_init_Fake {
DISPLAY_init_Fake DISPLAY_init_fake; DISPLAY_init_Fake DISPLAY_init_fake;
``` ```
## Capturing Arguments
## Capturing arguments
Ok, enough with the toy examples. What about faking functions with arguments? Ok, enough with the toy examples. What about faking functions with arguments?
@@ -129,9 +120,7 @@ type (a char pointer in this example).
A variable is created for every argument in the form A variable is created for every argument in the form
`"function_name"fake.argN_val` `"function_name"fake.argN_val`
## Return Values
## Return values
When you want to define a fake function that returns a value, you should use the When you want to define a fake function that returns a value, you should use the
`FAKE_VALUE_FUNC` macro. For instance: `FAKE_VALUE_FUNC` macro. For instance:
@@ -178,10 +167,7 @@ you would use a syntax like this:
```c ```c
FAKE_VALUE_FUNC(double, pow, double, double); FAKE_VALUE_FUNC(double, pow, double, double);
``` ```
## Resetting a Fake
## Resetting a fake
Good tests are isolated tests, so it is important to reset the fakes for each Good tests are isolated tests, so it is important to reset the fakes for each
unit test. All the fakes have a reset function to reset their arguments and unit test. All the fakes have a reset function to reset their arguments and
@@ -221,7 +207,7 @@ void setup()
} }
``` ```
## Call history ## Call History
Say you want to test that a function calls functionA, then functionB, then Say you want to test that a function calls functionA, then functionB, then
functionA again, how would you do that? Well fff maintains a call functionA again, how would you do that? Well fff maintains a call
history so that it is easy to assert these expectations. history so that it is easy to assert these expectations.
@@ -302,7 +288,6 @@ override the default by defining it before include the `fff.h` like this:
#include "../fff.h" #include "../fff.h"
``` ```
## Function Return Value Sequences ## Function Return Value Sequences
Often in testing we would like to test the behaviour of sequence of function call Often in testing we would like to test the behaviour of sequence of function call
@@ -349,7 +334,7 @@ TEST_F(FFFTestSuite, when_value_custom_fake_called_THEN_it_returns_custom_return
} }
``` ```
## Custom Return Value Delegate Sequences ### Custom Return Value Delegate Sequences
Say you have a function with an out parameter, and you want it to have a different behaviour Say you have a function with an out parameter, and you want it to have a different behaviour
on the first three calls, for example: set the value 'x' to the out parameter on the first call, on the first three calls, for example: set the value 'x' to the out parameter on the first call,
@@ -395,7 +380,7 @@ The fake will call your custom functions in the order specified by the `SET_CUST
macro. When the last custom fake is reached the fake will keep calling the last custom macro. When the last custom fake is reached the fake will keep calling the last custom
fake in the sequence. This macro works much like the `SET_RETURN_SEQ` macro. fake in the sequence. This macro works much like the `SET_RETURN_SEQ` macro.
## Return value history ## Return Value History
Say you have two functions f1 and f2. f2 must be called to release some resource Say you have two functions f1 and f2. f2 must be called to release some resource
allocated by f1, but only in the cases where f1 returns zero. f1 could be allocated by f1, but only in the cases where f1 returns zero. f1 could be
@@ -437,7 +422,9 @@ could call the real `fprintf()` like this:
Just like [return value delegates](#custom-return-value-delegate-sequences), you can also specify sequences for variadic functions using `SET_CUSTOM_FAKE_SEQ`. Just like [return value delegates](#custom-return-value-delegate-sequences), you can also specify sequences for variadic functions using `SET_CUSTOM_FAKE_SEQ`.
See the test files for examples. See the test files for examples.
## How do I specify calling conventions for my fake functions? ## Common Questions
### How do I specify calling conventions for my fake functions?
fff has a limited capability for enabling specification of Microsoft's Visual C/C++ calling conventions, but this support must be enabled when generating fff's header file `fff.h`. fff has a limited capability for enabling specification of Microsoft's Visual C/C++ calling conventions, but this support must be enabled when generating fff's header file `fff.h`.
@@ -454,7 +441,7 @@ FAKE_VOID_FUNC(__cdecl, voidfunc1, int);
FAKE_VALUE_FUNC(long, __cdecl, longfunc0); FAKE_VALUE_FUNC(long, __cdecl, longfunc0);
``` ```
## How do I fake a function that returns a value by reference? ### How do I fake a function that returns a value by reference?
The basic mechanism that fff provides you in this case is the custom_fake field described in the *Custom Return Value Delegate* example above. The basic mechanism that fff provides you in this case is the custom_fake field described in the *Custom Return Value Delegate* example above.
@@ -494,7 +481,7 @@ TEST_F(FFFTestSuite, when_value_custom_fake_called_THEN_it_returns_custom_output
} }
``` ```
## How do I fake a function with a function pointer parameter? ### How do I fake a function with a function pointer parameter?
Using fff to stub functions that have function pointer parameter can cause problems when trying to stub them. Presented here is an example how to deal with this situation. Using fff to stub functions that have function pointer parameter can cause problems when trying to stub them. Presented here is an example how to deal with this situation.
@@ -578,7 +565,8 @@ TEST_F(FFFTestSuite, test_fake_with_function_pointer)
ASSERT_EQ(cb_timeout_called, 1); ASSERT_EQ(cb_timeout_called, 1);
} }
``` ```
## How do I reuse a fake across multiple test-suites?
### How do I reuse a fake across multiple test-suites?
fff functions like `FAKE_VALUE_FUNC` will perform both the declaration AND the definition of the fake function and the corresponding data structs. This cannot be placed in a header, since it will lead to multiple definitions of the fake functions. fff functions like `FAKE_VALUE_FUNC` will perform both the declaration AND the definition of the fake function and the corresponding data structs. This cannot be placed in a header, since it will lead to multiple definitions of the fake functions.
@@ -605,13 +593,14 @@ DEFINE_FAKE_VALUE_FUNC_VARARG(int, value_function_vargs, const char *, int, ...)
DEFINE_FAKE_VOID_FUNC_VARARG(void_function_vargs, const char *, int, ...); DEFINE_FAKE_VOID_FUNC_VARARG(void_function_vargs, const char *, int, ...);
``` ```
## Specifying GCC Function Attributes ## Specifying GCC Function Attributes
You can specify GCC function attributes for your fakes using the `FFF_GCC_FUNCTION_ATTRIBUTES` directive. You can specify GCC function attributes for your fakes using the `FFF_GCC_FUNCTION_ATTRIBUTES` directive.
### Weak Functions ### Weak Functions
One usful attribute is the _weak_ attribute that marks a function such that it can be overridden by a non-weak variant at link time. Using weak functions in combination with FFF can help simplify your testing approach. One usful attribute is the _weak_ attribute that marks a function such that it can be overridden by a non-weak variant at link time. Using weak functions in combination with fff can help simplify your testing approach.
For example: For example:
* Define a library of fake functions, e.g. libfake.a. * Define a library of fake functions, e.g. libfake.a.
@@ -626,7 +615,7 @@ You can mark all fakes with the weak attribute like so:
See the example project that demonstrates the above approach: _./examples/weak_linking_. See the example project that demonstrates the above approach: _./examples/weak_linking_.
## Find out more... ## Find Out More
Look under the examples directory for full length examples in both C and C++. Look under the examples directory for full length examples in both C and C++.
There is also a test suite for the framework under the test directory. There is also a test suite for the framework under the test directory.

View File

@@ -479,7 +479,14 @@ def output_function_body(arg_count, has_varargs, is_value_function)
putd_backslash "}" putd_backslash "}"
} }
putd_backslash "}" putd_backslash "}"
putd_backslash "if (FUNCNAME##_fake.custom_fake) #{return_type}FUNCNAME##_fake.custom_fake(#{arg_list(arg_count)});" putd_backslash "if (FUNCNAME##_fake.custom_fake){ "
indent {
putd_backslash "RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(#{arg_list(arg_count)});" unless not is_value_function
putd_backslash "SAVE_RET_HISTORY(FUNCNAME, ret);" unless not is_value_function
putd_backslash "return ret;" unless not is_value_function
putd_backslash "#{return_type}FUNCNAME##_fake.custom_fake(#{arg_list(arg_count)});"
}
putd_backslash "}"
end end
putd_backslash "RETURN_FAKE_RESULT(FUNCNAME)" if is_value_function putd_backslash "RETURN_FAKE_RESULT(FUNCNAME)" if is_value_function

231
fff.h
View File

@@ -173,7 +173,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -214,7 +216,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -258,7 +262,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -305,7 +311,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -355,7 +363,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -408,7 +418,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -464,7 +476,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -523,7 +537,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -585,7 +601,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -650,7 +668,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -718,7 +738,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -789,7 +811,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -863,7 +887,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -940,7 +966,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1020,7 +1048,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1103,7 +1133,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1189,7 +1221,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1278,7 +1312,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1370,7 +1406,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1465,7 +1503,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1563,7 +1603,9 @@ FFF_END_EXTERN_C
FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \ FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \ if (FUNCNAME##_fake.custom_fake){ \
FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
} \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1608,7 +1650,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1657,7 +1704,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1709,7 +1761,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1764,7 +1821,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1822,7 +1884,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1883,7 +1950,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -1947,7 +2019,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -2014,7 +2091,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -2084,7 +2166,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -2157,7 +2244,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -2233,7 +2325,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -2312,7 +2409,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -2394,7 +2496,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -2479,7 +2586,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -2567,7 +2679,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -2658,7 +2775,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -2752,7 +2874,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -2849,7 +2976,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -2949,7 +3081,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -3052,7 +3189,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \
@@ -3158,7 +3300,12 @@ FFF_END_EXTERN_C
return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \ return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
} \ } \
} \ } \
if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \ if (FUNCNAME##_fake.custom_fake){ \
RETURN_TYPE ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
SAVE_RET_HISTORY(FUNCNAME, ret); \
return ret; \
return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
} \
RETURN_FAKE_RESULT(FUNCNAME) \ RETURN_FAKE_RESULT(FUNCNAME) \
} \ } \
DEFINE_RESET_FUNCTION(FUNCNAME) \ DEFINE_RESET_FUNCTION(FUNCNAME) \

View File

@@ -347,6 +347,13 @@ long my_custom_value_fake(void)
{ {
return MEANING_OF_LIFE; return MEANING_OF_LIFE;
} }
long my_custom_value_fake2(void)
{
static long val = 0;
return val++;
}
TEST_F(FFFTestSuite, when_value_custom_fake_called_THEN_it_returns_custom_return_value) TEST_F(FFFTestSuite, when_value_custom_fake_called_THEN_it_returns_custom_return_value)
{ {
longfunc0_fake.custom_fake = my_custom_value_fake; longfunc0_fake.custom_fake = my_custom_value_fake;
@@ -354,6 +361,18 @@ TEST_F(FFFTestSuite, when_value_custom_fake_called_THEN_it_returns_custom_return
ASSERT_EQ(MEANING_OF_LIFE, retval); ASSERT_EQ(MEANING_OF_LIFE, retval);
} }
TEST_F(FFFTestSuite, return_values_from_custom_fake_saved_in_history)
{
longfunc0_fake.custom_fake = my_custom_value_fake2;
longfunc0();
longfunc0();
longfunc0();
ASSERT_EQ(0, longfunc0_fake.return_val_history[0]);
ASSERT_EQ(1, longfunc0_fake.return_val_history[1]);
ASSERT_EQ(2, longfunc0_fake.return_val_history[2]);
}
int valuefunc3var_custom_fake1(const char *str, int a, va_list vl) int valuefunc3var_custom_fake1(const char *str, int a, va_list vl)
{ {
int arg; int arg;