1bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* 2bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * Copyright 2008 Google Inc. 3bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * 4bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 5bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * you may not use this file except in compliance with the License. 6bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * You may obtain a copy of the License at 7bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * 8bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * http://www.apache.org/licenses/LICENSE-2.0 9bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * 10bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * Unless required by applicable law or agreed to in writing, software 11bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * distributed under the License is distributed on an "AS IS" BASIS, 12bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * See the License for the specific language governing permissions and 14bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * limitations under the License. 15bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 16bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#ifndef CMOCKERY_H_ 17bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define CMOCKERY_H_ 18bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* 19bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * These headers or their equivalents should be included prior to including 20bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * this header file. 21bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * 22bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * #include <stdarg.h> 23bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * #include <stddef.h> 24bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * #include <setjmp.h> 25bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * 26bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * This allows test applications to use custom definitions of C standard 27bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * library functions and types. 28bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 29bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 30bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// For those who are used to __func__ from gcc. 31bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#ifndef __func__ 32bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define __func__ __FUNCTION__ 33bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#endif 34bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 35bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Retrieves a return value for the current function. 36bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define mock() _mock(__func__, __FILE__, __LINE__) 37bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 38bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* Stores a value to be returned by the specified function later. 39bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * The count parameter returns the number of times the value should be returned 40bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * by mock(). If count is set to -1 the value will always be returned. 41bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 42bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define will_return(function, value) \ 43bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _will_return(#function, __FILE__, __LINE__, (void*)value, 1) 44bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define will_return_count(function, value, count) \ 45bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _will_return(#function, __FILE__, __LINE__, (void*)value, count) 46bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 47bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* Add a custom parameter checking function. If the event parameter is NULL 48bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * the event structure is allocated internally by this function. If event 49bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * parameter is provided it must be allocated on the heap and doesn't need to 50bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * be deallocated by the caller. 51bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 52bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_check(function, parameter, check_function, check_data) \ 53bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _expect_check(#function, #parameter, __FILE__, __LINE__, check_function, \ 54bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson check_data) 55bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 56bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* Add an event to check a parameter, using check_expected(), against a set of 57bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * values. See will_return() for a description of the count parameter. 58bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 59bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_in_set(function, parameter, value_array) \ 60bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson expect_in_set_count(function, parameter, value_array, 1) 61bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_in_set_count(function, parameter, value_array, count) \ 62bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _expect_in_set(#function, #parameter, __FILE__, __LINE__, value_array, \ 63bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson sizeof(value_array) / sizeof(value_array[0]), count) 64bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_not_in_set(function, parameter, value_array) \ 65bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson expect_not_in_set_count(function, parameter, value_array, 1) 66bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_not_in_set_count(function, parameter, value_array, count) \ 67bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _expect_not_in_set( \ 68bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson #function, #parameter, __FILE__, __LINE__, value_array, \ 69bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson sizeof(value_array) / sizeof(value_array[0]), count) 70bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 71bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 72bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* Add an event to check a parameter, using check_expected(), against a 73bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * signed range. Where range is minimum <= value <= maximum. 74bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * See will_return() for a description of the count parameter. 75bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 76bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_in_range(function, parameter, minimum, maximum) \ 77bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson expect_in_range_count(function, parameter, minimum, maximum, 1) 78bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_in_range_count(function, parameter, minimum, maximum, count) \ 79bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _expect_in_range(#function, #parameter, __FILE__, __LINE__, minimum, \ 80bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson maximum, count) 81bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 82bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* Add an event to check a parameter, using check_expected(), against a 83bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * signed range. Where range is value < minimum or value > maximum. 84bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * See will_return() for a description of the count parameter. 85bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 86bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_not_in_range(function, parameter, minimum, maximum) \ 87bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson expect_not_in_range_count(function, parameter, minimum, maximum, 1) 88bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_not_in_range_count(function, parameter, minimum, maximum, \ 89bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson count) \ 90bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _expect_not_in_range(#function, #parameter, __FILE__, __LINE__, \ 91bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson minimum, maximum, count) 92bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 93bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* Add an event to check whether a parameter, using check_expected(), is or 94bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * isn't a value. See will_return() for a description of the count parameter. 95bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 96bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_value(function, parameter, value) \ 97bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson expect_value_count(function, parameter, value, 1) 98bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_value_count(function, parameter, value, count) \ 99bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _expect_value(#function, #parameter, __FILE__, __LINE__, (void*)value, \ 100bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson count) 101bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_not_value(function, parameter, value) \ 102bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson expect_not_value_count(function, parameter, value, 1) 103bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_not_value_count(function, parameter, value, count) \ 104bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _expect_not_value(#function, #parameter, __FILE__, __LINE__, \ 105bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson (void*)value, count) 106bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 107bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* Add an event to check whether a parameter, using check_expected(), 108bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * is or isn't a string. See will_return() for a description of the count 109bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * parameter. 110bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 111bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_string(function, parameter, string) \ 112bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson expect_string_count(function, parameter, string, 1) 113bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_string_count(function, parameter, string, count) \ 114bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _expect_string(#function, #parameter, __FILE__, __LINE__, (void*)string, \ 115bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson count) 116bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_not_string(function, parameter, string) \ 117bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson expect_not_string_count(function, parameter, string, 1) 118bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_not_string_count(function, parameter, string, count) \ 119bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _expect_not_string(#function, #parameter, __FILE__, __LINE__, \ 120bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson (void*)string, count) 121bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 122bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* Add an event to check whether a parameter, using check_expected() does or 123bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * doesn't match an area of memory. See will_return() for a description of 124bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * the count parameter. 125bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 126bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_memory(function, parameter, memory, size) \ 127bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson expect_memory_count(function, parameter, memory, size, 1) 128bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_memory_count(function, parameter, memory, size, count) \ 129bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _expect_memory(#function, #parameter, __FILE__, __LINE__, (void*)memory, \ 130bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson size, count) 131bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_not_memory(function, parameter, memory, size) \ 132bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson expect_not_memory_count(function, parameter, memory, size, 1) 133bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_not_memory_count(function, parameter, memory, size, count) \ 134bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _expect_not_memory(#function, #parameter, __FILE__, __LINE__, \ 135bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson (void*)memory, size, count) 136bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 137bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 138bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* Add an event to allow any value for a parameter checked using 139bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * check_expected(). See will_return() for a description of the count 140bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * parameter. 141bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 142bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_any(function, parameter) \ 143bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson expect_any_count(function, parameter, 1) 144bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_any_count(function, parameter, count) \ 145bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _expect_any(#function, #parameter, __FILE__, __LINE__, count) 146bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 147bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* Determine whether a function parameter is correct. This ensures the next 148bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * value queued by one of the expect_*() macros matches the specified variable. 149bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 150bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define check_expected(parameter) \ 151bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _check_expected(__func__, #parameter, __FILE__, __LINE__, (void*)parameter) 152bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 153bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Assert that the given expression is true. 154bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define assert_true(c) _assert_true((int)(c), #c, __FILE__, __LINE__) 155bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Assert that the given expression is false. 156bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define assert_false(c) _assert_true(!((int)(c)), #c, __FILE__, __LINE__) 157bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 158bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Assert that the two given integers are equal, otherwise fail. 159bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define assert_int_equal(a, b) _assert_int_equal(a, b, __FILE__, __LINE__) 160bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Assert that the two given integers are not equal, otherwise fail. 161bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define assert_int_not_equal(a, b) \ 162bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _assert_int_not_equal(a, b, __FILE__, __LINE__) 163bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 164bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Assert that the two given strings are equal, otherwise fail. 165bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define assert_string_equal(a, b) \ 166bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _assert_string_equal((const char*)a, (const char*)b, __FILE__, __LINE__) 167bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Assert that the two given strings are not equal, otherwise fail. 168bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define assert_string_not_equal(a, b) \ 169bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _assert_string_not_equal((const char*)a, (const char*)b, __FILE__, \ 170bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson __LINE__) 171bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 172bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Assert that the two given areas of memory are equal, otherwise fail. 173bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define assert_memory_equal(a, b, size) \ 174bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _assert_memory_equal((const char*)a, (const char*)b, size, __FILE__, \ 175bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson __LINE__) 176bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Assert that the two given areas of memory are not equal, otherwise fail. 177bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define assert_memory_not_equal(a, b, size) \ 178bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _assert_memory_not_equal((const char*)a, (const char*)b, size, __FILE__, \ 179bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson __LINE__) 180bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 181bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Assert that the specified value is >= minimum and <= maximum. 182bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define assert_in_range(value, minimum, maximum) \ 183bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _assert_in_range((int)value, (int)minimum, (int)maximum, __FILE__, \ 184bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson __LINE__) 185bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Assert that the specified value is < minumum or > maximum 186bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define assert_not_in_range(value, minimum, maximum) \ 187bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _assert_not_in_range((int)value, (int)minimum, (int)maximum, __FILE__, \ 188bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson __LINE__) 189bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 190bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Assert that the specified value is within a set. 191bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define assert_in_set(value, values, number_of_values) \ 192bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _assert_in_set(value, values, number_of_values, __FILE__, __LINE__) 193bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Assert that the specified value is not within a set. 194bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define assert_not_in_set(value, values, number_of_values) \ 195bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _assert_not_in_set(value, values, number_of_values, __FILE__, __LINE__) 196bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 197bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 198bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Forces the test to fail immediately and quit. 199bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define fail() _fail(__FILE__, __LINE__) 200bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 201bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Generic method to kick off testing 202bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define run_test(f) _run_test(#f, f, NULL, UNIT_TEST_FUNCTION_TYPE_TEST, NULL) 203bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 204bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Initializes a UnitTest structure. 205bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define unit_test(f) { #f, f, UNIT_TEST_FUNCTION_TYPE_TEST } 206bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define unit_test_setup(test, setup) \ 207bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson { #test "_" #setup, setup, UNIT_TEST_FUNCTION_TYPE_SETUP } 208bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define unit_test_teardown(test, teardown) \ 209bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson { #test "_" #teardown, teardown, UNIT_TEST_FUNCTION_TYPE_TEARDOWN } 210bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 211bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* Initialize an array of UnitTest structures with a setup function for a test 212bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * and a teardown function. Either setup or teardown can be NULL. 213bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 214bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define unit_test_setup_teardown(test, setup, teardown) \ 215bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson unit_test_setup(test, setup), \ 216bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson unit_test(test), \ 217bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson unit_test_teardown(test, teardown) 218bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 219bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* 220bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * Run tests specified by an array of UnitTest structures. The following 221bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * example illustrates this macro's use with the unit_test macro. 222bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * 223bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * void Test0(); 224bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * void Test1(); 225bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * 226bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * int main(int argc, char* argv[]) { 227bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * const UnitTest tests[] = { 228bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * unit_test(Test0); 229bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * unit_test(Test1); 230bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * }; 231bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * return run_tests(tests); 232bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * } 233bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 234bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define run_tests(tests) _run_tests(tests, sizeof(tests) / sizeof(tests)[0]) 235bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 236bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Dynamic allocators 237bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define test_malloc(size) _test_malloc(size, __FILE__, __LINE__) 238bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define test_calloc(num, size) _test_calloc(num, size, __FILE__, __LINE__) 239bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define test_free(ptr) _test_free(ptr, __FILE__, __LINE__) 240bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 241bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Redirect malloc, calloc and free to the unit test allocators. 242bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#if UNIT_TESTING 243bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define malloc test_malloc 244bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define calloc test_calloc 245bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define free test_free 246bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#endif // UNIT_TESTING 247bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 248bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* 249bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * Ensure mock_assert() is called. If mock_assert() is called the assert 250bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * expression string is returned. 251bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * For example: 252bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * 253bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * #define assert mock_assert 254bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * 255bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * void showmessage(const char *message) { 256bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * assert(message); 257bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * } 258bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * 259bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * int main(int argc, const char* argv[]) { 260bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * expect_assert_failure(show_message(NULL)); 261bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * printf("succeeded\n"); 262bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * return 0; 263bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * } 264bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 265bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#define expect_assert_failure(function_call) \ 266bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson { \ 267bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* expression = (const char*)setjmp(global_expect_assert_env); \ 268bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson global_expecting_assert = 1; \ 269bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson if (expression) { \ 270bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson print_message("Expected assertion %s occurred\n", expression); \ 271bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson global_expecting_assert = 0; \ 272bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson } else { \ 273bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson function_call ; \ 274bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson global_expecting_assert = 0; \ 275bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson print_error("Expected assert in %s\n", #function_call); \ 276bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson _fail(__FILE__, __LINE__); \ 277bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson } \ 278bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson } 279bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 280bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Function prototype for setup, test and teardown functions. 281bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsontypedef void (*UnitTestFunction)(void **state); 282bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 283bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Function that determines whether a function parameter value is correct. 284bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsontypedef int (*CheckParameterValue)(const void *value, void *check_value_data); 285bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 286bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Type of the unit test function. 287bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsontypedef enum UnitTestFunctionType { 288bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson UNIT_TEST_FUNCTION_TYPE_TEST = 0, 289bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson UNIT_TEST_FUNCTION_TYPE_SETUP, 290bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson UNIT_TEST_FUNCTION_TYPE_TEARDOWN, 291bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson} UnitTestFunctionType; 292bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 293bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson/* Stores a unit test function with its name and type. 294bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * NOTE: Every setup function must be paired with a teardown function. It's 295bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson * possible to specify NULL function pointers. 296bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson */ 297bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsontypedef struct UnitTest { 298bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* name; 299bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson UnitTestFunction function; 300bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson UnitTestFunctionType function_type; 301bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson} UnitTest; 302bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 303bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 304bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Location within some source code. 305bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsontypedef struct SourceLocation { 306bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* file; 307bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson int line; 308bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson} SourceLocation; 309bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 310bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Event that's called to check a parameter value. 311bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsontypedef struct CheckParameterEvent { 312bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson SourceLocation location; 313bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char *parameter_name; 314bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson CheckParameterValue check_value; 315bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void *check_value_data; 316bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson} CheckParameterEvent; 317bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 318bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Used by expect_assert_failure() and mock_assert(). 319bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonextern int global_expecting_assert; 320bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonextern jmp_buf global_expect_assert_env; 321bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 322bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Retrieves a value for the given function, as set by "will_return". 323bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid* _mock(const char * const function, const char* const file, 324bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int line); 325bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 326bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _expect_check( 327bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const function, const char* const parameter, 328bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line, 329bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const CheckParameterValue check_function, void * const check_data, 330bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson CheckParameterEvent * const event, const int count); 331bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 332bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _expect_in_set( 333bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const function, const char* const parameter, 334bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line, const void *values[], 335bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const size_t number_of_values, const int count); 336bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _expect_not_in_set( 337bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const function, const char* const parameter, 338bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line, const void *values[], 339bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const size_t number_of_values, const int count); 340bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 341bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _expect_in_range( 342bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const function, const char* const parameter, 343bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line, 344bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int minimum, const int maximum, const int count); 345bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _expect_not_in_range( 346bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const function, const char* const parameter, 347bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line, 348bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int minimum, const int maximum, const int count); 349bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _expect_value( 350bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const function, const char* const parameter, 351bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line, const void* const value, 352bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int count); 353bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _expect_not_value( 354bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const function, const char* const parameter, 355bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line, const void* const value, 356bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int count); 357bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _expect_string( 358bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const function, const char* const parameter, 359bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line, const char* string, 360bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int count); 361bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _expect_not_string( 362bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const function, const char* const parameter, 363bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line, const char* string, 364bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int count); 365bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _expect_memory( 366bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const function, const char* const parameter, 367bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line, const void* const memory, 368bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const size_t size, const int count); 369bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _expect_not_memory( 370bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const function, const char* const parameter, 371bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line, const void* const memory, 372bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const size_t size, const int count); 373bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _expect_any( 374bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const function, const char* const parameter, 375bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line, const int count); 376bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 377bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _check_expected( 378bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char * const function_name, const char * const parameter_name, 379bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* file, const int line, const void* value); 380bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 381bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Can be used to replace assert in tested code so that in conjuction with 382bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// check_assert() it's possible to determine whether an assert condition has 383bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// failed without stopping a test. 384bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid mock_assert(const int result, const char* const expression, 385bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char * const file, const int line); 386bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 387bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _will_return(const char * const function_name, const char * const file, 388bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int line, const void* const value, const int count); 389bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _assert_true(const int result, const char* const expression, 390bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char * const file, const int line); 391bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _assert_int_equal(const int a, const int b, const char * const file, 392bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int line); 393bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _assert_int_not_equal(const int a, const int b, const char * const file, 394bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int line); 395bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _assert_string_equal(const char * const a, const char * const b, 396bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char * const file, const int line); 397bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _assert_string_not_equal(const char * const a, const char * const b, 398bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char *file, const int line); 399bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _assert_memory_equal(const void * const a, const void * const b, 400bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const size_t size, const char* const file, 401bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int line); 402bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _assert_memory_not_equal(const void * const a, const void * const b, 403bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const size_t size, const char* const file, 404bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int line); 405bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _assert_in_range(const int value, const int minimum, const int maximum, 406bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* const file, const int line); 407bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _assert_not_in_range(const int value, const int minimum, 408bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int maximum, const char* const file, 409bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int line); 410bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _assert_in_set(const void * const value, const void *values[], 411bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const size_t number_of_values, const char* const file, 412bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int line); 413bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _assert_not_in_set(const void * const value, const void *values[], 414bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const size_t number_of_values, const char* const file, 415bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const int line); 416bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 417bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid* _test_malloc(const size_t size, const char* file, const int line); 418bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid* _test_calloc(const size_t number_of_elements, const size_t size, 419bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char* file, const int line); 420bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _test_free(void* const ptr, const char* file, const int line); 421bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 422bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid _fail(const char * const file, const int line); 423bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonint _run_test( 424bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const char * const function_name, const UnitTestFunction Function, 425bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson void ** const state, const UnitTestFunctionType function_type, 426bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson const void* const heap_check_point); 427bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonint _run_tests(const UnitTest * const tests, const size_t number_of_tests); 428bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 429bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson// Standard output and error print methods. 430bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid print_message(const char* const format, ...); 431bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid print_error(const char* const format, ...); 432bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid vprint_message(const char* const format, va_list args); 433bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilsonvoid vprint_error(const char* const format, va_list args); 434bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson 435bdd62c531bbdea115a3a7e71bba91c19dd319cc4Heather Lee Wilson#endif // CMOCKERY_H_ 436