diff options
-rw-r--r-- | src/gl/window.c | 51 | ||||
-rw-r--r-- | src/gl/window.test.c | 142 |
2 files changed, 190 insertions, 3 deletions
diff --git a/src/gl/window.c b/src/gl/window.c index 03afd24..e16b330 100644 --- a/src/gl/window.c +++ b/src/gl/window.c @@ -3,9 +3,10 @@ #include <lua.h> #include <honeysuckle.h> - +/* build a table of all possible window hints */ void create_glfw_window_hints_table(lua_State *L) { + /* hint keys */ hs_create_table(L, /* window hints */ hs_str_int("resizable", GLFW_RESIZABLE), @@ -44,8 +45,39 @@ void create_glfw_window_hints_table(lua_State *L) hs_str_int("contextReleaseBehavior", GLFW_CONTEXT_RELEASE_BEHAVIOR), hs_str_int("noError", GLFW_CONTEXT_NO_ERROR) ); + + /* special hint values */ + hs_create_table(L, + hs_str_int("dontCare", GLFW_DONT_CARE), + + /* client api */ + hs_str_int("glApi", GLFW_OPENGL_API), + hs_str_int("glesApi", GLFW_OPENGL_ES_API), + hs_str_int("noApi", GLFW_NO_API), + + /* context api */ + hs_str_int("nativeApi", GLFW_NATIVE_CONTEXT_API), + hs_str_int("eglApi", GLFW_EGL_CONTEXT_API), + hs_str_int("osMesaApi", GLFW_OSMESA_CONTEXT_API), + + /* robustness */ + hs_str_int("noRobustness", GLFW_NO_ROBUSTNESS), + hs_str_int("noResetNotification", GLFW_NO_RESET_NOTIFICATION), + hs_str_int("loseContextOnReset", GLFW_LOSE_CONTEXT_ON_RESET), + + /* context release */ + hs_str_int("anyBehavior", GLFW_ANY_RELEASE_BEHAVIOR), + hs_str_int("flush", GLFW_RELEASE_BEHAVIOR_FLUSH), + hs_str_int("none", GLFW_RELEASE_BEHAVIOR_NONE), + + /* profile */ + hs_str_int("anyProfile", GLFW_OPENGL_ANY_PROFILE), + hs_str_int("compatabilityProfile", GLFW_OPENGL_COMPAT_PROFILE), + hs_str_int("coreProfile", GLFW_OPENGL_CORE_PROFILE) + ); } + int gl_init(lua_State *L) { if (glfwInit() != GLFW_TRUE) { @@ -53,3 +85,20 @@ int gl_init(lua_State *L) } return 0; } + + +lua_Integer tointeger(lua_State *L, int index) +{ + if (lua_isboolean(L, index)) { + return lua_toboolean(L, index); + } + else if (lua_isnumber(L, index)) { + return lua_tointeger(L, index); + } + else { + hs_throw_error(L, + "expected boolean or number; got %s instead", + lua_typename(L, lua_type(L, index)) + ); + } +} diff --git a/src/gl/window.test.c b/src/gl/window.test.c index 6d5c844..6b8e091 100644 --- a/src/gl/window.test.c +++ b/src/gl/window.test.c @@ -58,14 +58,21 @@ int mock_hs_throw_error(lua_State *L, const char *format_string, ...) void gl_init_succeeds(); void gl_init_fail_glfwInit(); void glfw_window_hints_table(); +void tointeger_parses_bool(); +void tointeger_parses_int(); +void tointeger_fails_other(); void suite_window() { lily_run_test(gl_init_succeeds); lily_run_test(gl_init_fail_glfwInit); lily_run_test(glfw_window_hints_table); + lily_run_test(tointeger_parses_bool); + lily_run_test(tointeger_parses_int); + lily_run_test(tointeger_fails_other); CLEAN_MOCK(mock_glfwInit); + CLEAN_MOCK(mock_hs_throw_error); } @@ -130,8 +137,8 @@ void glfw_window_hints_table() lily_assert_int_equal(lua_gettop(L), 0); create_glfw_window_hints_table(L); - lily_assert_int_equal(lua_gettop(L), 1); - lily_assert_true(lua_istable(L, -1)); + lily_assert_int_equal(lua_gettop(L), 2); + lily_assert_true(lua_istable(L, 1)); /* window hints */ lily_assert_int_equal( @@ -294,5 +301,136 @@ void glfw_window_hints_table() GLFW_CONTEXT_NO_ERROR ); + + /* special hint values */ + + lily_assert_int_equal( + get_int(L, 2, "dontCare"), + GLFW_DONT_CARE + ); + + /* client api */ + lily_assert_int_equal( + get_int(L, 2, "glApi"), + GLFW_OPENGL_API + ); + + lily_assert_int_equal( + get_int(L, 2, "glesApi"), + GLFW_OPENGL_ES_API + ); + + lily_assert_int_equal( + get_int(L, 2, "noApi"), + GLFW_NO_API + ); + + /* context api */ + lily_assert_int_equal( + get_int(L, 2, "nativeApi"), + GLFW_NATIVE_CONTEXT_API + ); + + lily_assert_int_equal( + get_int(L, 2, "eglApi"), + GLFW_EGL_CONTEXT_API + ); + + lily_assert_int_equal( + get_int(L, 2, "osMesaApi"), + GLFW_OSMESA_CONTEXT_API + ); + + /* robustness */ + lily_assert_int_equal( + get_int(L, 2, "noRobustness"), + GLFW_NO_ROBUSTNESS + ); + + lily_assert_int_equal( + get_int(L, 2, "noResetNotification"), + GLFW_NO_RESET_NOTIFICATION + ); + + lily_assert_int_equal( + get_int(L, 2, "loseContextOnReset"), + GLFW_LOSE_CONTEXT_ON_RESET + ); + + /* release */ + lily_assert_int_equal( + get_int(L, 2, "anyBehavior"), + GLFW_ANY_RELEASE_BEHAVIOR + ); + + lily_assert_int_equal( + get_int(L, 2, "flush"), + GLFW_RELEASE_BEHAVIOR_FLUSH + ); + + lily_assert_int_equal( + get_int(L, 2, "none"), + GLFW_RELEASE_BEHAVIOR_NONE + ); + + /* profile */ + lily_assert_int_equal( + get_int(L, 2, "anyProfile"), + GLFW_OPENGL_ANY_PROFILE + ); + + lily_assert_int_equal( + get_int(L, 2, "compatabilityProfile"), + GLFW_OPENGL_COMPAT_PROFILE + ); + + lily_assert_int_equal( + get_int(L, 2, "coreProfile"), + GLFW_OPENGL_CORE_PROFILE + ); + lua_close(L); } + + +void tointeger_parses_bool() +{ + USE_MOCK(mock_hs_throw_error); + lua_State *L = luaL_newstate(); + + lua_pushboolean(L, 0); + lily_assert_false(lua_toboolean(L, -1)); + lily_assert_int_equal(tointeger(L, -1), 0); + + lua_pushboolean(L, 1); + lily_assert_true(lua_toboolean(L, -1)); + lily_assert_int_equal(tointeger(L, -1), 1); + + lua_close(L); +} + + +void tointeger_parses_int() +{ + USE_MOCK(mock_hs_throw_error); + lua_State *L = luaL_newstate(); + + lua_pushinteger(L, 234); + lua_pushinteger(L, 55555); + + lily_assert_int_equal(tointeger(L, -2), 234); + lily_assert_int_equal(tointeger(L, -1), 55555); + + lua_close(L); +} + + +void tointeger_fails_other() +{ + USE_MOCK(mock_hs_throw_error); + lua_State *L = luaL_newstate(); + + lua_pushstring(L, "hey there babe"); + tointeger(L, -1); + lily_assert_int_equal(mock_hs_throw_error_data->n_calls, 1); +} |