static int mock_validate_arg()

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;
}