mirror of
https://github.com/meekrosoft/fff
synced 2026-01-28 18:54:28 +01:00
Custom return value delegate sequences for variadic functions (#63)
* Custom return value delegate sequences for variadic functions * Added unit tests for variadic functions custom return value delegate sequences * Fixes in code style * Variadic functions custom delegates also tested in C++ * Fixed some compilation warnings * Added test for variadic function custom delegates sequence reset * Updated documentation with variadic functions custom delegate sequences * Update README.md * Minor style changes. Thank you very much @oliviera9!
This commit is contained in:
@@ -354,7 +354,88 @@ TEST_F(FFFTestSuite, when_value_custom_fake_called_THEN_it_returns_custom_return
|
||||
ASSERT_EQ(MEANING_OF_LIFE, retval);
|
||||
}
|
||||
|
||||
#ifndef __cplusplus
|
||||
int valuefunc3var_custom_fake1(const char *str, int a, va_list vl)
|
||||
{
|
||||
int arg;
|
||||
while ((arg = va_arg(vl, int)) != 0)
|
||||
a += arg;
|
||||
return a;
|
||||
}
|
||||
|
||||
int valuefunc3var_custom_fake2(const char *str, int a, va_list vl)
|
||||
{
|
||||
int arg;
|
||||
while ((arg = va_arg(vl, int)) != 0)
|
||||
a -= arg;
|
||||
return a;
|
||||
}
|
||||
|
||||
int valuefunc3var_custom_fake3(const char *str, int a, va_list vl)
|
||||
{
|
||||
int arg;
|
||||
while ((arg = va_arg(vl, int)) != 0)
|
||||
a *= arg;
|
||||
return a;
|
||||
}
|
||||
|
||||
TEST_F(FFFTestSuite, vararg_custom_fake_sequence_not_exhausted)
|
||||
{
|
||||
int (*custom_fakes[])(const char *, int, va_list) = {valuefunc3var_custom_fake1,
|
||||
valuefunc3var_custom_fake2,
|
||||
valuefunc3var_custom_fake3};
|
||||
SET_CUSTOM_FAKE_SEQ(valuefunc3var, custom_fakes, 3);
|
||||
int a = 1;
|
||||
ASSERT_EQ(valuefunc3var("a", a, 2, 3, 4, 0), 10);
|
||||
ASSERT_EQ(valuefunc3var("aa", a, 2, 3, 4, 2, 0), -10);
|
||||
ASSERT_EQ(valuefunc3var("aaa", a, 2, 3, 0), 6);
|
||||
}
|
||||
|
||||
TEST_F(FFFTestSuite, vararg_custom_fake_seq_return_values_saved_in_history)
|
||||
{
|
||||
int (*custom_fakes[])(const char *, int, va_list) = {valuefunc3var_custom_fake1,
|
||||
valuefunc3var_custom_fake2,
|
||||
valuefunc3var_custom_fake3};
|
||||
SET_CUSTOM_FAKE_SEQ(valuefunc3var, custom_fakes, 3);
|
||||
int a = 1;
|
||||
valuefunc3var("a", a, 2, 3, 4, 0);
|
||||
valuefunc3var("aa", a, 2, 3, 4, 2, 0);
|
||||
valuefunc3var("aaa", a, 2, 3, 0);
|
||||
ASSERT_EQ(10, valuefunc3var_fake.return_val_history[0]);
|
||||
ASSERT_EQ(-10, valuefunc3var_fake.return_val_history[1]);
|
||||
ASSERT_EQ(6, valuefunc3var_fake.return_val_history[2]);
|
||||
}
|
||||
|
||||
TEST_F(FFFTestSuite, vararg_custom_fake_sequence_exhausted)
|
||||
{
|
||||
int (*custom_fakes[])(const char *, int, va_list) = {valuefunc3var_custom_fake1,
|
||||
valuefunc3var_custom_fake2,
|
||||
valuefunc3var_custom_fake3};
|
||||
SET_CUSTOM_FAKE_SEQ(valuefunc3var, custom_fakes, 3);
|
||||
int a = 1;
|
||||
ASSERT_EQ(valuefunc3var("a", a, 2, 3, 4, 0), 10);
|
||||
ASSERT_EQ(valuefunc3var("aa", a, 2, 3, 4, 2, 0), -10);
|
||||
ASSERT_EQ(valuefunc3var("aaa", a, 2, 3, 0), 6);
|
||||
ASSERT_EQ(valuefunc3var("aaa", a, 4, 5, 1, 0), 20);
|
||||
ASSERT_EQ(valuefunc3var("aaa", a, 4, 0), 4);
|
||||
}
|
||||
|
||||
TEST_F(FFFTestSuite, vararg_custom_fake_sequence_reset)
|
||||
{
|
||||
int (*custom_fakes[])(const char *, int, va_list) = {valuefunc3var_custom_fake1,
|
||||
valuefunc3var_custom_fake2,
|
||||
valuefunc3var_custom_fake3};
|
||||
SET_CUSTOM_FAKE_SEQ(valuefunc3var, custom_fakes, 3);
|
||||
int a = 1;
|
||||
ASSERT_EQ(valuefunc3var("a", a, 2, 3, 4, 0), 10);
|
||||
ASSERT_EQ(valuefunc3var("aa", a, 2, 3, 4, 2, 0), -10);
|
||||
RESET_FAKE(valuefunc3var);
|
||||
ASSERT_EQ(0, valuefunc3var("b", 7, 4, 5));
|
||||
valuefunc3var_fake.return_val = 1;
|
||||
ASSERT_EQ(1, valuefunc3var("c", 5, 4, 4));
|
||||
valuefunc3var_fake.return_val = 2;
|
||||
ASSERT_EQ(2, valuefunc3var("d", 6, 3, 5));
|
||||
}
|
||||
|
||||
TEST_F(FFFTestSuite, use_void_vararg_fake_with_different_number_of_arguments)
|
||||
{
|
||||
voidfunc3var("0 parameters", 0);
|
||||
@@ -362,7 +443,7 @@ TEST_F(FFFTestSuite, use_void_vararg_fake_with_different_number_of_arguments)
|
||||
voidfunc3var("2 parameters", 2, 10, 20);
|
||||
voidfunc3var("3 parameters", 3, 10, 20, 30);
|
||||
|
||||
ASSERT_EQ(voidfunc3var_fake.call_count, 4);
|
||||
ASSERT_EQ(voidfunc3var_fake.call_count, 4u);
|
||||
char msg[] = "3 parameters";
|
||||
ASSERT_EQ(strcmp(voidfunc3var_fake.arg0_val, msg), 0);
|
||||
ASSERT_EQ(3, voidfunc3var_fake.arg1_val);
|
||||
@@ -375,12 +456,11 @@ TEST_F(FFFTestSuite, use_value_vararg_fake_with_different_number_of_arguments)
|
||||
valuefunc3var("2 parameters", 2, 10, 20);
|
||||
valuefunc3var("3 parameters", 3, 10, 20, 30);
|
||||
|
||||
ASSERT_EQ(valuefunc3var_fake.call_count, 4);
|
||||
ASSERT_EQ(valuefunc3var_fake.call_count, 4u);
|
||||
char msg[] = "3 parameters";
|
||||
ASSERT_EQ(strcmp(valuefunc3var_fake.arg0_val, msg), 0);
|
||||
ASSERT_EQ(3, valuefunc3var_fake.arg1_val);
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
TEST_F(FFFTestSuite, can_capture_upto_20_arguments_correctly)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user