Add third-party mocks, specify mock files. /? Do we need first-party mocks in their own files, or can we provide a mock flag in the implementation files already?feature/data-structs
@@ -0,0 +1,10 @@ | |||||
root = true | |||||
[*] | |||||
charset = utf-8 | |||||
end_of_line = lf | |||||
indent_size = tab | |||||
indent_style = tab | |||||
insert_final_newline = true | |||||
max_line_length = 120 | |||||
tab_width = 2 |
@@ -6,54 +6,81 @@ project(izanagi C) | |||||
set(CMAKE_C_STANDARD 11) | set(CMAKE_C_STANDARD 11) | ||||
include_directories( | include_directories( | ||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2/include" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/minIni/dev" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/bdd-for-c" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/portmidi/pm_common" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2/include" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/minIni/dev" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/bdd-for-c" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/portmidi/pm_common" | |||||
) | ) | ||||
if (WIN32) | if (WIN32) | ||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8) | |||||
set(PROJECT_ARCH x64) | |||||
else () | |||||
set(PROJECT_ARCH x86) | |||||
endif () | |||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8) | |||||
set(PROJECT_ARCH x64) | |||||
else () | |||||
set(PROJECT_ARCH x86) | |||||
endif () | |||||
endif () | endif () | ||||
link_directories( | link_directories( | ||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${PROJECT_ARCH}" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/portmidi/Release" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${PROJECT_ARCH}" | |||||
"${PROJECT_SOURCE_DIR}/dependencies/portmidi/Release" | |||||
) | ) | ||||
add_executable( | add_executable( | ||||
game | |||||
dependencies/minIni/dev/minIni.h | |||||
dependencies/minIni/dev/minIni.c | |||||
src/packages/game/output/IZ_video.h | |||||
src/packages/game/output/IZ_video.c | |||||
src/packages/game/IZ_common.h | |||||
src/packages/game/IZ_action.h | |||||
src/packages/game/IZ_app.h | |||||
src/packages/game/IZ_app.c | |||||
src/packages/game/main.c | |||||
src/packages/game/input/IZ_joystick.c src/packages/game/input/IZ_joystick.h src/packages/game/input/IZ_keyboard.c src/packages/game/input/IZ_keyboard.h src/packages/game/IZ_config.c src/packages/game/IZ_config.h) | |||||
game | |||||
dependencies/minIni/dev/minIni.h | |||||
dependencies/minIni/dev/minIni.c | |||||
src/packages/game/output/IZ_video.h | |||||
src/packages/game/output/IZ_video.c | |||||
src/packages/game/IZ_common.h | |||||
src/packages/game/IZ_action.h | |||||
src/packages/game/IZ_app.h | |||||
src/packages/game/IZ_app.c | |||||
src/packages/game/main.c | |||||
src/packages/game/input/IZ_joystick.c | |||||
src/packages/game/input/IZ_joystick.h | |||||
src/packages/game/input/IZ_keyboard.c | |||||
src/packages/game/input/IZ_keyboard.h | |||||
src/packages/game/IZ_config.c | |||||
src/packages/game/IZ_config.h | |||||
) | |||||
target_link_libraries( | target_link_libraries( | ||||
game | |||||
SDL2main | |||||
SDL2 | |||||
game | |||||
SDL2main | |||||
SDL2 | |||||
) | ) | ||||
add_executable( | add_executable( | ||||
game-test | |||||
dependencies/bdd-for-c/bdd-for-c.h | |||||
src/packages/game/output/IZ_video.h | |||||
src/packages/game/output/IZ_video.c | |||||
src/packages/game/output/IZ_config.test.c | |||||
src/packages/test/IZ_mock.h) | |||||
game-test-output | |||||
dependencies/bdd-for-c/bdd-for-c.h | |||||
src/packages/test/IZ_mock.h src/packages/test/IZ_test.h | |||||
__mocks__/minIni.mock.h | |||||
src/packages/game/IZ_config.h | |||||
src/packages/game/output/IZ_video.h | |||||
src/packages/game/output/IZ_video.c | |||||
src/packages/game/output/IZ_video.test.c | |||||
__mocks__/SDL_keyboard.mock.h src/packages/game/__mocks__/IZ_config.mock.h) | |||||
add_executable( | |||||
game-test-input | |||||
dependencies/bdd-for-c/bdd-for-c.h | |||||
src/packages/test/IZ_mock.h src/packages/test/IZ_test.h | |||||
__mocks__/minIni.mock.h | |||||
src/packages/game/IZ_config.h | |||||
src/packages/game/input/IZ_keyboard.h | |||||
src/packages/game/input/IZ_keyboard.c | |||||
src/packages/game/input/IZ_keyboard.test.c | |||||
# src/packages/game/input/IZ_joystick.h | |||||
# src/packages/game/input/IZ_joystick.c | |||||
__mocks__/SDL_keyboard.mock.h src/packages/game/__mocks__/IZ_config.mock.h) | |||||
if (WIN32) | if (WIN32) | ||||
add_custom_command(TARGET game POST_BUILD | |||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..." | |||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${PROJECT_ARCH}/SDL2.dll" # <--this is in-file | |||||
$<TARGET_FILE_DIR:game>) # <--this is out-file path | |||||
add_custom_command(TARGET game POST_BUILD | |||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different # which executes "cmake - E copy_if_different..." | |||||
"${PROJECT_SOURCE_DIR}/dependencies/SDL2/lib/${PROJECT_ARCH}/SDL2.dll" # <--this is in-file | |||||
$<TARGET_FILE_DIR:game>) # <--this is out-file path | |||||
endif () | endif () |
@@ -0,0 +1,14 @@ | |||||
#ifndef SDL_KEYBOARD_MOCK_H | |||||
#define SDL_KEYBOARD_MOCK_H | |||||
#include "../src/packages/test/IZ_test.h" | |||||
mock(SDL_GetKeyName) const char* SDL_GetKeyName(int key) { | |||||
mock_return(SDL_GetKeyName) ""; | |||||
} | |||||
mock(SDL_GetKeyFromName) int SDL_GetKeyFromName(const char *name) { | |||||
mock_return(SDL_GetKeyFromName) 0; | |||||
} | |||||
#endif |
@@ -0,0 +1,29 @@ | |||||
#ifndef MININI_MOCK_H | |||||
#define MININI_MOCK_H | |||||
#include "../src/packages/test/IZ_test.h" | |||||
mock(ini_getl) long ini_getl(const TCHAR *Section, const TCHAR *Key, long DefValue, const TCHAR *Filename) { | |||||
mock_return(ini_getl) DefValue; | |||||
} | |||||
mock(ini_putl) int ini_putl(const TCHAR *Section, const TCHAR *Key, long Value, const TCHAR *Filename) { | |||||
mock_return(ini_putl) 1; | |||||
} | |||||
mock(ini_gets) int ini_gets( | |||||
const TCHAR *Section, | |||||
const TCHAR *Key, | |||||
const TCHAR *DefValue, | |||||
TCHAR *Buffer, | |||||
int BufferSize, | |||||
const TCHAR *Filename | |||||
) { | |||||
mock_return(ini_gets) 0; | |||||
} | |||||
mock(ini_puts) int ini_puts(const TCHAR *Section, const TCHAR *Key, const TCHAR *Value, const TCHAR *Filename) { | |||||
mock_return(ini_puts) 1; | |||||
} | |||||
#endif |
@@ -1,8 +1,8 @@ | |||||
#include "IZ_config.h" | #include "IZ_config.h" | ||||
void IZ_GetConfigPath(char* config_path) { | |||||
void IZ_GetConfigPath(char* config_path, size_t string_size) { | |||||
//const char* config_path_dir = SDL_GetPrefPath("Modal Studios", APP_NAME); | //const char* config_path_dir = SDL_GetPrefPath("Modal Studios", APP_NAME); | ||||
const char* config_path_dir = SDL_GetBasePath(); | const char* config_path_dir = SDL_GetBasePath(); | ||||
memcpy_s(config_path, 128, config_path_dir, 128); | |||||
strcat_s(config_path, 128, "config.ini"); | |||||
memcpy_s(config_path, string_size, config_path_dir, 128); | |||||
strcat_s(config_path, string_size, "config.ini"); | |||||
} | } |
@@ -4,6 +4,6 @@ | |||||
#include <SDL_filesystem.h> | #include <SDL_filesystem.h> | ||||
#include <string.h> | #include <string.h> | ||||
void IZ_GetConfigPath(char* config_path); | |||||
void IZ_GetConfigPath(char*, size_t); | |||||
#endif | #endif |
@@ -0,0 +1,12 @@ | |||||
#ifndef IZ_CONFIG_MOCK_H | |||||
#define IZ_CONFIG_MOCK_H | |||||
#include "../../test/IZ_test.h" | |||||
mock(IZ_GetConfigPath) void IZ_GetConfigPath(char* config_path, size_t string_size) { | |||||
const char dummy_path[] = "test-config.ini"; | |||||
memcpy_s(config_path, string_size, dummy_path, 128); | |||||
mock_return(IZ_GetConfigPath); | |||||
} | |||||
#endif |
@@ -74,7 +74,7 @@ void IZ_HandleJoystickEvents(SDL_Event e, IZ_JoystickState* state, IZ_Action* ac | |||||
void IZ_LoadJoystickConfig(IZ_JoystickConfig* config, uint8_t p) { | void IZ_LoadJoystickConfig(IZ_JoystickConfig* config, uint8_t p) { | ||||
char config_path[128]; | char config_path[128]; | ||||
IZ_GetConfigPath(config_path); | |||||
IZ_GetConfigPath(config_path, 128); | |||||
char joystick_control_mapping_section_name[] = "Joystick.0.ControlMapping"; | char joystick_control_mapping_section_name[] = "Joystick.0.ControlMapping"; | ||||
joystick_control_mapping_section_name[9] = (char) (48 + p); | joystick_control_mapping_section_name[9] = (char) (48 + p); | ||||
@@ -89,7 +89,7 @@ void IZ_LoadJoystickConfig(IZ_JoystickConfig* config, uint8_t p) { | |||||
void IZ_SaveJoystickConfig(IZ_JoystickConfig* config, uint8_t p) { | void IZ_SaveJoystickConfig(IZ_JoystickConfig* config, uint8_t p) { | ||||
char config_path[128]; | char config_path[128]; | ||||
IZ_GetConfigPath(config_path); | |||||
IZ_GetConfigPath(config_path, 128); | |||||
char joystick_control_mapping_section_name[] = "Joystick.0.ControlMapping"; | char joystick_control_mapping_section_name[] = "Joystick.0.ControlMapping"; | ||||
joystick_control_mapping_section_name[9] = (char) (48 + p); | joystick_control_mapping_section_name[9] = (char) (48 + p); | ||||
@@ -15,11 +15,10 @@ void IZ_HandleKeyboardEvents(SDL_Event e, IZ_KeyboardState* state, IZ_Action* ac | |||||
void IZ_SaveKeyboardConfig(IZ_KeyboardConfig* config, uint8_t p) { | void IZ_SaveKeyboardConfig(IZ_KeyboardConfig* config, uint8_t p) { | ||||
char config_path[128]; | char config_path[128]; | ||||
IZ_GetConfigPath(config_path); | |||||
IZ_GetConfigPath(config_path, 128); | |||||
char keyboard_section_name[] = "Keyboard.0.ControlMapping"; | char keyboard_section_name[] = "Keyboard.0.ControlMapping"; | ||||
keyboard_section_name[9] = (char) (48 + p); | keyboard_section_name[9] = (char) (48 + p); | ||||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | for (uint8_t i = 0; i < CONTROLS; i += 1) { | ||||
ini_puts(keyboard_section_name, ACTION_NAMES[i], SDL_GetKeyName(config->control_mapping[i]), config_path); | ini_puts(keyboard_section_name, ACTION_NAMES[i], SDL_GetKeyName(config->control_mapping[i]), config_path); | ||||
} | } | ||||
@@ -27,7 +26,7 @@ void IZ_SaveKeyboardConfig(IZ_KeyboardConfig* config, uint8_t p) { | |||||
void IZ_LoadKeyboardConfig(IZ_KeyboardConfig* config, uint8_t p) { | void IZ_LoadKeyboardConfig(IZ_KeyboardConfig* config, uint8_t p) { | ||||
char config_path[128]; | char config_path[128]; | ||||
IZ_GetConfigPath(config_path); | |||||
IZ_GetConfigPath(config_path, 128); | |||||
char buffer[128]; | char buffer[128]; | ||||
char keyboard_section_name[] = "Keyboard.0.ControlMapping"; | char keyboard_section_name[] = "Keyboard.0.ControlMapping"; | ||||
@@ -0,0 +1,101 @@ | |||||
#include "../../../__mocks__/SDL_keyboard.mock.h" | |||||
#include "../../../__mocks__/minIni.mock.h" | |||||
#include "../__mocks__/IZ_config.mock.h" | |||||
#include "IZ_keyboard.h" | |||||
spec("input/keyboard") { | |||||
describe("HandleKeyboardEvents") { | |||||
static SDL_Event e; | |||||
static IZ_KeyboardState state; | |||||
static IZ_Action action; | |||||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | |||||
it("handles %s action activation", ACTION_NAMES[i]) { | |||||
e.type = SDL_KEYDOWN; | |||||
e.key.keysym.sym = IZ_DEFAULT_KEYBOARD_CONTROLS[0][i]; | |||||
state.config.control_mapping[i] = IZ_DEFAULT_KEYBOARD_CONTROLS[0][i]; | |||||
action = 0; | |||||
IZ_HandleKeyboardEvents(e, &state, &action); | |||||
check( | |||||
action == (0x1 << i), | |||||
"Action not set." | |||||
); | |||||
} | |||||
it("handles %s action deactivation", ACTION_NAMES[i]) { | |||||
e.type = SDL_KEYUP; | |||||
e.key.keysym.sym = IZ_DEFAULT_KEYBOARD_CONTROLS[0][i]; | |||||
state.config.control_mapping[i] = IZ_DEFAULT_KEYBOARD_CONTROLS[0][i]; | |||||
action = ~0; | |||||
IZ_HandleKeyboardEvents(e, &state, &action); | |||||
check( | |||||
!(action & (0x1 << i)), | |||||
"Action not unset." | |||||
); | |||||
} | |||||
} | |||||
} | |||||
describe("LoadKeyboardConfig") { | |||||
static IZ_KeyboardConfig config; | |||||
after_each() { | |||||
mock_reset(IZ_GetConfigPath); | |||||
} | |||||
after_each() { | |||||
mock_reset(ini_gets); | |||||
} | |||||
it("calls load method") { | |||||
mock_set_expected_calls(ini_gets, CONTROLS); | |||||
IZ_LoadKeyboardConfig(&config, 0); | |||||
check( | |||||
mock_is_called(IZ_GetConfigPath), | |||||
"SDL_GetBasePath() not called." | |||||
); | |||||
check( | |||||
mock_get_expected_calls(ini_gets) == mock_get_actual_calls(ini_gets), | |||||
"Call count mismatch for ini_gets() (expected %u, received %u).", | |||||
mock_get_expected_calls(ini_gets), | |||||
mock_get_actual_calls(ini_gets) | |||||
); | |||||
} | |||||
} | |||||
describe("SaveKeyboardConfig") { | |||||
static IZ_KeyboardConfig config; | |||||
after_each() { | |||||
mock_reset(IZ_GetConfigPath); | |||||
} | |||||
after_each() { | |||||
mock_reset(ini_puts); | |||||
} | |||||
before_each() { | |||||
for (uint8_t i = 0; i < CONTROLS; i += 1) { | |||||
config.control_mapping[i] = IZ_DEFAULT_KEYBOARD_CONTROLS[0][i]; | |||||
} | |||||
} | |||||
it("calls save method") { | |||||
mock_set_expected_calls(ini_puts, CONTROLS); | |||||
IZ_SaveKeyboardConfig(&config, 0); | |||||
check( | |||||
mock_get_expected_calls(ini_puts) == mock_get_actual_calls(ini_puts), | |||||
"Call count mismatch for ini_puts() (expected %u, received %u).", | |||||
mock_get_expected_calls(ini_puts), | |||||
mock_get_actual_calls(ini_puts) | |||||
); | |||||
} | |||||
} | |||||
} |
@@ -1,126 +0,0 @@ | |||||
#include <bdd-for-c.h> | |||||
#include "../../test/IZ_mock.h" | |||||
#include "IZ_video.h" | |||||
mock(SDL_GetBasePath) char* SDL_GetBasePath() { | |||||
mock_return(SDL_GetBasePath) ""; | |||||
} | |||||
mock(SDL_GetKeyName) const char* SDL_GetKeyName (SDL_KeyCode code) { | |||||
mock_return(SDL_GetKeyName) ""; | |||||
} | |||||
mock(SDL_GetKeyFromName) SDL_KeyCode SDL_GetKeyFromName(const char* name) { | |||||
mock_return(SDL_GetKeyFromName) 0; | |||||
} | |||||
mock(ini_gets) int ini_gets( | |||||
const TCHAR *Section, | |||||
const TCHAR *Key, | |||||
const TCHAR *DefValue, | |||||
char *Buffer, | |||||
int BufferSize, | |||||
const TCHAR *Filename | |||||
) { | |||||
mock_return(ini_gets) 0; | |||||
} | |||||
mock(ini_getl) long ini_getl( | |||||
const TCHAR *Section, | |||||
const TCHAR *Key, | |||||
long DefValue, | |||||
const TCHAR *Filename | |||||
) { | |||||
mock_return(ini_getl) DefValue; | |||||
} | |||||
spec("config") { | |||||
describe("LoadConfig") { | |||||
static IZ_Config config; | |||||
after_each() { | |||||
mock_reset(ini_getl); | |||||
} | |||||
after_each() { | |||||
mock_reset(ini_gets); | |||||
} | |||||
after_each() { | |||||
mock_reset(SDL_GetKeyFromName); | |||||
} | |||||
after_each() { | |||||
mock_reset(SDL_GetKeyName); | |||||
} | |||||
after_each() { | |||||
mock_reset(SDL_GetBasePath); | |||||
} | |||||
it("should load default config values") { | |||||
IZ_LoadVideoConfig(&config); | |||||
check( | |||||
mock_calls(SDL_GetBasePath) > 0, | |||||
"SDL_GetBasePath() not called." | |||||
); | |||||
static const mock_call_count_t expected_calls_ini_getl = | |||||
3 // video params | |||||
+ 1 // input params | |||||
+ (12 * PLAYERS); // joystick controls | |||||
check( | |||||
mock_calls(ini_getl) == expected_calls_ini_getl, | |||||
"Call count mismatch for ini_getl() (expected %u, received %u).", | |||||
expected_calls_ini_getl, | |||||
mock_calls(ini_getl) | |||||
); | |||||
check( | |||||
config.video.width == 640, | |||||
"Default value for Video.Width is not loaded." | |||||
); | |||||
check( | |||||
config.video.height == 480, | |||||
"Default value for Video.Height is not loaded." | |||||
); | |||||
check( | |||||
config.video.max_fps == 30, | |||||
"Default value for Video.MaxFps is not loaded." | |||||
); | |||||
check( | |||||
config.input.axis_threshold == 8000, | |||||
"Default value for Input.GamepadAxisThreshold is not loaded." | |||||
); | |||||
static const mock_call_count_t expected_calls_ini_gets = | |||||
(16 * PLAYERS); // keyboard controls | |||||
check( | |||||
mock_calls(ini_gets) == expected_calls_ini_gets, | |||||
"Call count mismatch for ini_gets() (expected %u, received %u).", | |||||
expected_calls_ini_gets, | |||||
mock_calls(ini_gets) | |||||
); | |||||
static const mock_call_count_t expected_calls_SDL_GetKeyFromName = | |||||
(16 * PLAYERS); // keyboard controls | |||||
check( | |||||
mock_calls(SDL_GetKeyFromName) == expected_calls_SDL_GetKeyFromName, | |||||
"Call count mismatch for SDL_GetKeyFromName() (expected %u, received %u).", | |||||
expected_calls_SDL_GetKeyFromName, | |||||
mock_calls(SDL_GetKeyFromName) | |||||
); | |||||
static const mock_call_count_t expected_calls_SDL_GetKeyName = | |||||
(16 * PLAYERS); // keyboard controls | |||||
check( | |||||
mock_calls(SDL_GetKeyName) == expected_calls_SDL_GetKeyName, | |||||
"Call count mismatch for SDL_GetKeyName() (expected %u, received %u).", | |||||
expected_calls_SDL_GetKeyName, | |||||
mock_calls(SDL_GetKeyName) | |||||
); | |||||
} | |||||
} | |||||
} |
@@ -1,17 +1,25 @@ | |||||
#include "IZ_video.h" | #include "IZ_video.h" | ||||
void IZ_SaveVideoConfig(IZ_VideoConfig* config) { | |||||
IZ_ProcedureResult IZ_SaveVideoConfig(IZ_VideoConfig* config) { | |||||
char config_path[128]; | char config_path[128]; | ||||
IZ_GetConfigPath(config_path); | |||||
IZ_GetConfigPath(config_path, 128); | |||||
ini_putl("Video", "Width", config->width, config_path); | |||||
ini_putl("Video", "Height", config->height, config_path); | |||||
ini_putl("Video", "MaxFps", config->max_fps, config_path); | |||||
if (!ini_putl("Video", "Width", config->width, config_path)) { | |||||
return 1; | |||||
} | |||||
if (!ini_putl("Video", "Height", config->height, config_path)) { | |||||
return 1; | |||||
} | |||||
if (!ini_putl("Video", "MaxFps", config->max_fps, config_path)) { | |||||
return 1; | |||||
} | |||||
return 0; | |||||
} | } | ||||
void IZ_LoadVideoConfig(IZ_VideoConfig* config) { | void IZ_LoadVideoConfig(IZ_VideoConfig* config) { | ||||
char config_path[128]; | char config_path[128]; | ||||
IZ_GetConfigPath(config_path); | |||||
IZ_GetConfigPath(config_path, 128); | |||||
config->width = ini_getl("Video", "Width", 640l, config_path); | config->width = ini_getl("Video", "Width", 640l, config_path); | ||||
config->height = ini_getl("Video", "Height", 480l, config_path); | config->height = ini_getl("Video", "Height", 480l, config_path); | ||||
@@ -3,6 +3,7 @@ | |||||
#include <stdio.h> | #include <stdio.h> | ||||
#include <minIni.h> | #include <minIni.h> | ||||
#include "../IZ_common.h" | |||||
#include "../IZ_config.h" | #include "../IZ_config.h" | ||||
typedef struct { | typedef struct { | ||||
@@ -11,7 +12,7 @@ typedef struct { | |||||
uint8_t max_fps; | uint8_t max_fps; | ||||
} IZ_VideoConfig; | } IZ_VideoConfig; | ||||
void IZ_SaveVideoConfig(IZ_VideoConfig* config); | |||||
IZ_ProcedureResult IZ_SaveVideoConfig(IZ_VideoConfig* config); | |||||
void IZ_LoadVideoConfig(IZ_VideoConfig* config); | void IZ_LoadVideoConfig(IZ_VideoConfig* config); | ||||
@@ -0,0 +1,66 @@ | |||||
#include "../../../__mocks__/minIni.mock.h" | |||||
#include "../__mocks__/IZ_config.mock.h" | |||||
#include "IZ_video.h" | |||||
spec("output/video") { | |||||
describe("LoadVideoConfig") { | |||||
static IZ_VideoConfig config; | |||||
after_each() { | |||||
mock_reset(IZ_GetConfigPath); | |||||
} | |||||
after_each() { | |||||
mock_reset(ini_getl); | |||||
} | |||||
it("calls load method") { | |||||
mock_set_expected_calls(ini_getl, 3); | |||||
IZ_LoadVideoConfig(&config); | |||||
check( | |||||
mock_is_called(IZ_GetConfigPath), | |||||
"SDL_GetBasePath() not called." | |||||
); | |||||
check( | |||||
mock_get_expected_calls(ini_getl) == mock_get_actual_calls(ini_getl), | |||||
"Call count mismatch for ini_getl() (expected %u, received %u).", | |||||
mock_get_expected_calls(ini_getl), | |||||
mock_get_actual_calls(ini_getl) | |||||
); | |||||
} | |||||
} | |||||
describe("SaveVideoConfig") { | |||||
static IZ_VideoConfig config; | |||||
after_each() { | |||||
mock_reset(IZ_GetConfigPath); | |||||
} | |||||
after_each() { | |||||
mock_reset(ini_putl); | |||||
} | |||||
before_each() { | |||||
config.width = 1337; | |||||
config.height = 420; | |||||
config.max_fps = 69; | |||||
} | |||||
it("calls save method") { | |||||
mock_set_expected_calls(ini_putl, 3); | |||||
IZ_SaveVideoConfig(&config); | |||||
check( | |||||
mock_get_expected_calls(ini_putl) == mock_get_actual_calls(ini_putl), | |||||
"Call count mismatch for ini_putl() (expected %u, received %u).", | |||||
mock_get_expected_calls(ini_putl), | |||||
mock_get_actual_calls(ini_putl) | |||||
); | |||||
} | |||||
} | |||||
} |
@@ -1,14 +1,20 @@ | |||||
#ifndef IZ_MOCK_H | #ifndef IZ_MOCK_H | ||||
#define IZ_MOCK_H | #define IZ_MOCK_H | ||||
#define mock_call_count_t uint8_t | |||||
#define mock_call_count_t unsigned char | |||||
#define mock(X) static mock_call_count_t calls_##X = 0; | |||||
#define mock(X) static mock_call_count_t actual_##X = 0; | |||||
#define mock_return(X) calls_##X += 1; return | |||||
#define mock_return(X) actual_##X += 1; return | |||||
#define mock_reset(X) calls_##X = 0 | |||||
#define mock_reset(X) actual_##X = 0 | |||||
#define mock_calls(X) ((mock_call_count_t) (calls_##X)) | |||||
#define mock_get_actual_calls(X) (mock_call_count_t) actual_##X | |||||
#define mock_set_expected_calls(X, Y) static const mock_call_count_t expected_##X = Y | |||||
#define mock_get_expected_calls(X) (mock_call_count_t) expected_##X | |||||
#define mock_is_called(X) mock_get_actual_calls(X) > 0 | |||||
#endif | #endif |
@@ -0,0 +1,8 @@ | |||||
#ifndef IZ_TEST_H | |||||
#define IZ_TEST_H | |||||
#include <bdd-for-c.h> | |||||
#include "IZ_mock.h" | |||||
#endif |