diff options
Diffstat (limited to 'src/gl')
-rw-r--r-- | src/gl/window.c | 4 | ||||
-rw-r--r-- | src/gl/window.test.c | 68 |
2 files changed, 67 insertions, 5 deletions
diff --git a/src/gl/window.c b/src/gl/window.c index 80d636d..834d6ce 100644 --- a/src/gl/window.c +++ b/src/gl/window.c @@ -5,6 +5,8 @@ int gl_init(lua_State *L) { - glfwInit(); + if (glfwInit() != GLFW_TRUE) { + hs_throw_error(L, "failed to initialize GLFW"); + } return 0; } diff --git a/src/gl/window.test.c b/src/gl/window.test.c index 33b52a4..1403221 100644 --- a/src/gl/window.test.c +++ b/src/gl/window.test.c @@ -1,11 +1,16 @@ +#include <string.h> #include <lua.h> #include <lauxlib.h> +#include <honeysuckle.h> #include "test/honey-test.h" int mock_glfwInit(); +int mock_hs_throw_error(lua_State *L, const char *format_string, ...); #define glfwInit mock_glfwInit +#define hs_throw_error mock_hs_throw_error #include "gl/window.c" #undef glfwInit +#undef hs_throw_error lily_mock_t *mock_glfwInit_data = NULL; @@ -18,12 +23,45 @@ int mock_glfwInit() return result; } +lily_mock_t *mock_hs_throw_error_data = NULL; +int mock_hs_throw_error(lua_State *L, const char *format_string, ...) +{ + /* to avoid basically just re-implementing printf parsing here, + i am limiting this function to be able to receive strings only */ + + /* count format specifiers */ + char *ptr = strchr(format_string, '%'); + int n_args = 0; + while (ptr != NULL) { + n_args += 1; + ptr = strchr(ptr+1, '%'); + } + + /* store arguments */ + struct lily_mock_arg_t args[] = { + { sizeof(const char*), &format_string }, + { sizeof(int), &n_args }, + }; + lily_mock_call(mock_hs_throw_error_data, args); + + /* store format arguments */ + va_list vl; + va_start(vl, format_string); + for (int i=0; i<n_args; i++) { + char *str = va_arg(vl, char*); + mock_enqueue(mock_hs_throw_error, char*, str); + } +} + +/* ~~~~~~~~ TESTS ~~~~~~~~ */ void gl_init_succeeds(); +void gl_init_fail_glfwInit(); void suite_window() { lily_run_test(gl_init_succeeds); + lily_run_test(gl_init_fail_glfwInit); CLEAN_MOCK(mock_glfwInit); } @@ -35,13 +73,35 @@ void suite_window() void gl_init_succeeds() { USE_MOCK(mock_glfwInit); - lua_State *L = luaL_newstate(); + USE_MOCK(mock_hs_throw_error); /* queue success */ mock_enqueue(mock_glfwInit, int, GLFW_TRUE); - lua_pushcfunction(L, gl_init); - int error = lua_pcall(L, 0, 0, 0); + gl_init(NULL); + + lily_assert_int_equal(mock_glfwInit_data->n_calls, 1); + lily_assert_int_equal(mock_hs_throw_error_data->n_calls, 0); +} + + +void gl_init_fail_glfwInit() +{ + USE_MOCK(mock_glfwInit); + USE_MOCK(mock_hs_throw_error); + + /* queue failure */ + mock_enqueue(mock_glfwInit, int, GLFW_FALSE); + gl_init(NULL); - lily_assert_int_equal(error, 0); lily_assert_int_equal(mock_glfwInit_data->n_calls, 1); + lily_assert_int_equal(mock_hs_throw_error_data->n_calls, 1); + + const char *fmt; int argc; + struct lily_mock_arg_t args[] = { + { sizeof(const char*), &fmt }, + { sizeof(int), &argc }, + }; + lily_get_call(mock_hs_throw_error_data, args, 0); + + lily_assert_string_equal((char*) fmt, "failed to initialize GLFW"); } |