in testing/mock.c [597:727]
static int mock_validate_arg (struct mock *mock, int cur_exp, const char *arg_name,
struct mock_arg *expected, struct mock_arg *actual)
{
int fail = 0;
if (!(expected->flags & MOCK_ARG_FLAG_ANY_VALUE)) {
if ((expected->flags & MOCK_ARG_FLAG_PTR_PTR) && !(actual->flags & MOCK_ARG_FLAG_PTR_PTR)) {
platform_printf ("(%s, %d) Unexpected NULL argument: name=%s" NEWLINE, mock->name,
cur_exp, arg_name);
/* No point to check anything else. The argument was null. */
return 1;
}
if (expected->flags & MOCK_ARG_FLAG_NOT_NULL) {
if ((expected->flags & MOCK_ARG_FLAG_PTR_PTR) &&
!(expected->flags & MOCK_ARG_FLAG_PTR_PTR_NOT_NULL)) {
if (expected->value != actual->value) {
platform_printf (
"(%s, %d) Unexpected pointer argument: name=%s, expected=0x%lx, actual=0x%lx"
NEWLINE, mock->name, cur_exp, arg_name, expected->value, actual->value);
fail = 1;
}
}
else {
if (actual->value == 0) {
if (expected->flags & MOCK_ARG_FLAG_PTR_PTR_NOT_NULL) {
platform_printf (
"(%s, %d) Unexpected pointer to NULL pointer: name=%s" NEWLINE,
mock->name, cur_exp, arg_name);
}
else {
platform_printf ("(%s, %d) Unexpected NULL argument: name=%s" NEWLINE,
mock->name, cur_exp, arg_name);
}
fail = 1;
}
else if (expected->ptr_value_len) {
if (actual->ptr_value == NULL) {
platform_printf (
"(%s, %d) No pointer contents to validate: name=%s" NEWLINE, mock->name,
cur_exp, arg_name);
fail = 1;
}
else {
char prefix[100];
snprintf (prefix, sizeof (prefix), "(%s, %d, arg=%s) ", mock->name, cur_exp,
arg_name);
if (expected->validate) {
fail |= expected->validate (prefix,
(void*) ((uintptr_t) expected->value), actual->ptr_value);
}
else {
fail |=
testing_validate_array_prefix (
(void*) ((uintptr_t) expected->value), actual->ptr_value,
expected->ptr_value_len, prefix);
}
}
}
}
}
else if (expected->flags & MOCK_ARG_FLAG_SAVED_VALUE) {
struct mock_save_arg *saved = mock_find_save_arg (mock, expected->save_arg);
if (saved) {
if (saved->saved) {
if (saved->value != actual->value) {
platform_printf (
"(%s, %d) Unexpected saved argument: id=%d, name=%s, expected=0x%lx, actual=0x%lx"
NEWLINE, mock->name, cur_exp, expected->save_arg, arg_name,
saved->value, actual->value);
fail = 1;
}
}
else {
platform_printf ("(%s, %d) Argument ID %d value not saved." NEWLINE, mock->name,
cur_exp, expected->save_arg);
fail = 1;
}
}
else {
platform_printf ("(%s, %d) Unknown saved argument ID: id=%d" NEWLINE, mock->name,
cur_exp, expected->save_arg);
fail = 1;
}
}
else if (expected->flags & MOCK_ARG_FLAG_GREATER_EQUAL) {
if (actual->value < expected->value) {
platform_printf (
"(%s, %d) Unexpected argument: name=%s, expected at least=0x%lx, actual=0x%lx"
NEWLINE, mock->name, cur_exp, arg_name, expected->value, actual->value);
fail = 1;
}
}
else if (expected->flags & MOCK_ARG_FLAG_GREATER) {
if (actual->value <= expected->value) {
platform_printf (
"(%s, %d) Unexpected argument: name=%s, expected more than=0x%lx, actual=0x%lx"
NEWLINE, mock->name, cur_exp, arg_name, expected->value, actual->value);
fail = 1;
}
}
else if (expected->flags & MOCK_ARG_FLAG_LESS_EQUAL) {
if (actual->value > expected->value) {
platform_printf (
"(%s, %d) Unexpected argument: name=%s, expected no more than=0x%lx, actual=0x%lx"
NEWLINE, mock->name, cur_exp, arg_name, expected->value, actual->value);
fail = 1;
}
}
else if (expected->flags & MOCK_ARG_FLAG_LESS) {
if (actual->value >= expected->value) {
platform_printf (
"(%s, %d) Unexpected argument: name=%s, expected less than=0x%lx, actual=0x%lx"
NEWLINE, mock->name, cur_exp, arg_name, expected->value, actual->value);
fail = 1;
}
}
else if (expected->value != actual->value) {
platform_printf (
"(%s, %d) Unexpected argument: name=%s, expected=0x%lx, actual=0x%lx" NEWLINE,
mock->name, cur_exp, arg_name, expected->value, actual->value);
fail = 1;
}
}
return fail;
}