mirror of https://github.com/mgba-emu/mgba.git
Scripting: Testing sugar
This commit is contained in:
parent
4dae4d8f7f
commit
16bad9f141
|
@ -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,
|
||||||
|
|
Loading…
Reference in New Issue