Scripting: Testing sugar

This commit is contained in:
Vicki Pfau 2022-05-03 20:28:40 -07:00
parent 4dae4d8f7f
commit 16bad9f141
1 changed files with 19 additions and 74 deletions

View File

@ -7,6 +7,15 @@
#include <mgba/internal/script/lua.h> #include <mgba/internal/script/lua.h>
#define LOAD_PROGRAM(PROG) \
do { \
struct VFile* vf = VFileFromConstMemory(PROG, strlen(PROG)); \
const char* error = NULL; \
assert_true(lua->load(lua, vf, &error)); \
assert_null(error); \
vf->close(vf); \
} while(0)
struct Test { struct Test {
int32_t i; int32_t i;
int32_t (*ifn0)(struct Test*); int32_t (*ifn0)(struct Test*);
@ -134,11 +143,7 @@ M_TEST_DEFINE(runNop) {
mScriptContextInit(&context); mScriptContextInit(&context);
struct mScriptEngineContext* lua = mSCRIPT_ENGINE_LUA->create(mSCRIPT_ENGINE_LUA, &context); struct mScriptEngineContext* lua = mSCRIPT_ENGINE_LUA->create(mSCRIPT_ENGINE_LUA, &context);
const char* program = "return"; LOAD_PROGRAM("return");
struct VFile* vf = VFileFromConstMemory(program, strlen(program));
const char* error = NULL;
assert_true(lua->load(lua, vf, &error));
assert_null(error);
assert_true(lua->run(lua)); assert_true(lua->run(lua));
// Make sure we can run it twice // Make sure we can run it twice
@ -146,7 +151,6 @@ M_TEST_DEFINE(runNop) {
lua->destroy(lua); lua->destroy(lua);
mScriptContextDeinit(&context); mScriptContextDeinit(&context);
vf->close(vf);
} }
M_TEST_DEFINE(getGlobal) { M_TEST_DEFINE(getGlobal) {
@ -156,28 +160,16 @@ M_TEST_DEFINE(getGlobal) {
struct mScriptValue a = mSCRIPT_MAKE_S32(1); struct mScriptValue a = mSCRIPT_MAKE_S32(1);
struct mScriptValue* val; struct mScriptValue* val;
const char* program;
struct VFile* vf;
const char* error;
program = "a = 1"; LOAD_PROGRAM("a = 1");
vf = VFileFromConstMemory(program, strlen(program));
error = NULL;
assert_true(lua->load(lua, vf, &error));
assert_null(error);
assert_true(lua->run(lua)); assert_true(lua->run(lua));
val = lua->getGlobal(lua, "a"); val = lua->getGlobal(lua, "a");
assert_non_null(val); assert_non_null(val);
assert_true(a.type->equal(&a, val)); assert_true(a.type->equal(&a, val));
mScriptValueDeref(val); mScriptValueDeref(val);
vf->close(vf);
program = "b = 1"; LOAD_PROGRAM("b = 1");
vf = VFileFromConstMemory(program, strlen(program));
error = NULL;
assert_true(lua->load(lua, vf, &error));
assert_null(error);
assert_true(lua->run(lua)); assert_true(lua->run(lua));
val = lua->getGlobal(lua, "a"); val = lua->getGlobal(lua, "a");
@ -189,28 +181,18 @@ M_TEST_DEFINE(getGlobal) {
assert_non_null(val); assert_non_null(val);
assert_true(a.type->equal(&a, val)); assert_true(a.type->equal(&a, val));
mScriptValueDeref(val); mScriptValueDeref(val);
vf->close(vf);
a = mSCRIPT_MAKE_S32(2); a = mSCRIPT_MAKE_S32(2);
program = "a = 2"; LOAD_PROGRAM("a = 2");
vf = VFileFromConstMemory(program, strlen(program));
error = NULL;
assert_true(lua->load(lua, vf, &error));
assert_null(error);
assert_true(lua->run(lua)); assert_true(lua->run(lua));
val = lua->getGlobal(lua, "a"); val = lua->getGlobal(lua, "a");
assert_non_null(val); assert_non_null(val);
assert_true(a.type->equal(&a, val)); assert_true(a.type->equal(&a, val));
mScriptValueDeref(val); mScriptValueDeref(val);
vf->close(vf);
a = mSCRIPT_MAKE_S32(3); a = mSCRIPT_MAKE_S32(3);
program = "b = a + b"; LOAD_PROGRAM("b = a + b");
vf = VFileFromConstMemory(program, strlen(program));
error = NULL;
assert_true(lua->load(lua, vf, &error));
assert_null(error);
assert_true(lua->run(lua)); assert_true(lua->run(lua));
val = lua->getGlobal(lua, "b"); val = lua->getGlobal(lua, "b");
@ -220,7 +202,6 @@ M_TEST_DEFINE(getGlobal) {
lua->destroy(lua); lua->destroy(lua);
mScriptContextDeinit(&context); mScriptContextDeinit(&context);
vf->close(vf);
} }
M_TEST_DEFINE(setGlobal) { M_TEST_DEFINE(setGlobal) {
@ -230,15 +211,8 @@ M_TEST_DEFINE(setGlobal) {
struct mScriptValue a = mSCRIPT_MAKE_S32(1); struct mScriptValue a = mSCRIPT_MAKE_S32(1);
struct mScriptValue* val; struct mScriptValue* val;
const char* program;
struct VFile* vf;
const char* error;
program = "a = b"; LOAD_PROGRAM("a = b");
vf = VFileFromConstMemory(program, strlen(program));
error = NULL;
assert_true(lua->load(lua, vf, &error));
assert_null(error);
assert_true(lua->setGlobal(lua, "b", &a)); assert_true(lua->setGlobal(lua, "b", &a));
val = lua->getGlobal(lua, "b"); val = lua->getGlobal(lua, "b");
@ -276,7 +250,6 @@ M_TEST_DEFINE(setGlobal) {
lua->destroy(lua); lua->destroy(lua);
mScriptContextDeinit(&context); mScriptContextDeinit(&context);
vf->close(vf);
} }
M_TEST_DEFINE(callLuaFunc) { M_TEST_DEFINE(callLuaFunc) {
@ -285,15 +258,8 @@ M_TEST_DEFINE(callLuaFunc) {
struct mScriptEngineContext* lua = mSCRIPT_ENGINE_LUA->create(mSCRIPT_ENGINE_LUA, &context); struct mScriptEngineContext* lua = mSCRIPT_ENGINE_LUA->create(mSCRIPT_ENGINE_LUA, &context);
struct mScriptValue* fn; struct mScriptValue* fn;
const char* program;
struct VFile* vf;
const char* error;
program = "function a(b) return b + 1 end; function c(d, e) return d + e end"; LOAD_PROGRAM("function a(b) return b + 1 end; function c(d, e) return d + e end");
vf = VFileFromConstMemory(program, strlen(program));
error = NULL;
assert_true(lua->load(lua, vf, &error));
assert_null(error);
assert_true(lua->run(lua)); assert_true(lua->run(lua));
fn = lua->getGlobal(lua, "a"); fn = lua->getGlobal(lua, "a");
@ -327,7 +293,6 @@ M_TEST_DEFINE(callLuaFunc) {
lua->destroy(lua); lua->destroy(lua);
mScriptContextDeinit(&context); mScriptContextDeinit(&context);
vf->close(vf);
} }
M_TEST_DEFINE(callCFunc) { M_TEST_DEFINE(callCFunc) {
@ -337,15 +302,8 @@ M_TEST_DEFINE(callCFunc) {
struct mScriptValue a = mSCRIPT_MAKE_S32(1); struct mScriptValue a = mSCRIPT_MAKE_S32(1);
struct mScriptValue* val; struct mScriptValue* val;
const char* program;
struct VFile* vf;
const char* error;
program = "a = b(1); c = d(1, 2)"; LOAD_PROGRAM("a = b(1); c = d(1, 2)");
vf = VFileFromConstMemory(program, strlen(program));
error = NULL;
assert_true(lua->load(lua, vf, &error));
assert_null(error);
assert_true(lua->setGlobal(lua, "b", &boundIdentityInt)); assert_true(lua->setGlobal(lua, "b", &boundIdentityInt));
assert_true(lua->setGlobal(lua, "d", &boundAddInts)); assert_true(lua->setGlobal(lua, "d", &boundAddInts));
@ -364,7 +322,6 @@ M_TEST_DEFINE(callCFunc) {
lua->destroy(lua); lua->destroy(lua);
mScriptContextDeinit(&context); mScriptContextDeinit(&context);
vf->close(vf);
} }
M_TEST_DEFINE(setGlobalStruct) { M_TEST_DEFINE(setGlobalStruct) {
@ -379,15 +336,8 @@ M_TEST_DEFINE(setGlobalStruct) {
struct mScriptValue a = mSCRIPT_MAKE_S(Test, &s); struct mScriptValue a = mSCRIPT_MAKE_S(Test, &s);
struct mScriptValue b; struct mScriptValue b;
struct mScriptValue* val; struct mScriptValue* val;
const char* program;
struct VFile* vf;
const char* error;
program = "b = a.i"; LOAD_PROGRAM("b = a.i");
vf = VFileFromConstMemory(program, strlen(program));
error = NULL;
assert_true(lua->load(lua, vf, &error));
assert_null(error);
assert_true(lua->setGlobal(lua, "a", &a)); assert_true(lua->setGlobal(lua, "a", &a));
assert_true(lua->run(lua)); assert_true(lua->run(lua));
@ -406,12 +356,8 @@ M_TEST_DEFINE(setGlobalStruct) {
assert_non_null(val); assert_non_null(val);
assert_true(b.type->equal(&b, val)); assert_true(b.type->equal(&b, val));
mScriptValueDeref(val); mScriptValueDeref(val);
vf->close(vf);
program = "a.i = b"; LOAD_PROGRAM("a.i = b");
vf = VFileFromConstMemory(program, strlen(program));
assert_true(lua->load(lua, vf, &error));
assert_null(error);
b = mSCRIPT_MAKE_S32(3); b = mSCRIPT_MAKE_S32(3);
assert_true(lua->setGlobal(lua, "b", &b)); assert_true(lua->setGlobal(lua, "b", &b));
@ -430,7 +376,6 @@ M_TEST_DEFINE(setGlobalStruct) {
lua->destroy(lua); lua->destroy(lua);
mScriptContextDeinit(&context); mScriptContextDeinit(&context);
vf->close(vf);
} }
M_TEST_SUITE_DEFINE_SETUP_TEARDOWN(mScriptLua, M_TEST_SUITE_DEFINE_SETUP_TEARDOWN(mScriptLua,