From 138cba1400b0b796f8c288be13f7df66adb7ffbd Mon Sep 17 00:00:00 2001 From: Linus Probert Date: Fri, 18 May 2018 13:49:31 +0200 Subject: [PATCH] Mock test for keyboardinput and fixed the found issues --- CMakeLists.txt | 2 ++ src/keyboardinput.c | 4 ++-- test/test_keyboardinput.c | 50 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 61b889e..7c71691 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -219,6 +219,8 @@ IF (CMOCKA_FOUND) add_executable(test_keyboardinput test/test_keyboardinput src/keyboardinput src/keyboard) target_link_libraries(test_keyboardinput ${CMOCKA_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) + set_target_properties(test_keyboardinput PROPERTIES + LINK_FLAGS "-Wl,--wrap,keyboard_direction_press -Wl,--wrap,keyboard_press") add_test(test_keyboardinput test_keyboardinput) ENDIF (CMOCKA_FOUND ) diff --git a/src/keyboardinput.c b/src/keyboardinput.c index 9eeaeaa..c9e2b5b 100644 --- a/src/keyboardinput.c +++ b/src/keyboardinput.c @@ -43,7 +43,7 @@ keyboardinput_handle_event(KeyboardInput *input, SDL_Event *event) } for (int i = SDLK_0; i <= SDLK_9; ++i) { if (keyboard_press(i, event)) - input->currentState |= (1 << i); + input->currentState |= (KEY_NUM0 << (i - SDLK_0)); } if (keyboard_direction_release(UP, event)) { @@ -59,7 +59,7 @@ keyboardinput_handle_event(KeyboardInput *input, SDL_Event *event) } for (int i = SDLK_0; i <= SDLK_9; ++i) { if (keyboard_release(i, event)) - input->currentState &= ~(1 << i); + input->currentState &= ~(KEY_NUM0 << (i - SDLK_0)); } } diff --git a/test/test_keyboardinput.c b/test/test_keyboardinput.c index 2d8134f..5b75087 100644 --- a/test/test_keyboardinput.c +++ b/test/test_keyboardinput.c @@ -22,13 +22,58 @@ #include #include #include "../src/keyboardinput.h" +#include "../src/keyboard.h" -static KeyboardInput input = { 0, 0 }; + +bool __wrap_keyboard_direction_press(Direction, SDL_Event*); +bool __wrap_keyboard_press(Uint64, SDL_Event*); + +bool +__wrap_keyboard_direction_press(Direction d, SDL_Event *event) +{ + (void) d; + (void) event; + return mock_type(bool); +} + +bool +__wrap_keyboard_press(Uint64 key, SDL_Event *event) +{ + (void) key; + (void) event; + return mock_type(bool); +} + +static void +test_event_parse(void **state) +{ + (void) state; + KeyboardInput input = { 0, 0 }; + + will_return(__wrap_keyboard_direction_press, true); // KEY_UP + will_return(__wrap_keyboard_press, true); // NUM0 + will_return(__wrap_keyboard_press, false); // NUM1 + will_return(__wrap_keyboard_press, false); // NUM2 + will_return(__wrap_keyboard_press, false); // NUM3 + will_return(__wrap_keyboard_press, false); // NUM4 + will_return(__wrap_keyboard_press, false); // NUM5 + will_return(__wrap_keyboard_press, false); // NUM6 + will_return(__wrap_keyboard_press, false); // NUM7 + will_return(__wrap_keyboard_press, false); // NUM8 + will_return(__wrap_keyboard_press, false); // NUM9 + + SDL_Event event; + keyboardinput_handle_event(&input, &event); + + assert_true(key_is_pressed(&input, KEY_UP)); + assert_true(key_is_pressed(&input, KEY_NUM0)); +} static void test_keypress(void **state) { (void) state; + KeyboardInput input = { 0, 0 }; input.lastState = 0; input.currentState = KEY_UP; assert_true(key_is_pressed(&input, KEY_UP)); @@ -38,6 +83,7 @@ static void test_keyrelease(void **state) { (void) state; + KeyboardInput input = { 0, 0 }; input.lastState = KEY_UP; input.currentState = 0; assert_true(key_is_released(&input, KEY_UP)); @@ -47,6 +93,7 @@ static void test_keydown(void **state) { (void) state; + KeyboardInput input = { 0, 0 }; input.currentState = KEY_UP; assert_true(key_is_down(&input, KEY_UP)); } @@ -58,6 +105,7 @@ int main(void) cmocka_unit_test(test_keypress), cmocka_unit_test(test_keyrelease), cmocka_unit_test(test_keydown), + cmocka_unit_test(test_event_parse), }; return cmocka_run_group_tests(tests, NULL, NULL);