mirror of
https://github.com/wren-lang/wren.git
synced 2026-01-11 22:28:45 +01:00
107
test/api/api_tests.c
Normal file
107
test/api/api_tests.c
Normal file
@ -0,0 +1,107 @@
|
||||
#include "./api_tests.h"
|
||||
|
||||
static const char* testName = NULL;
|
||||
|
||||
WrenForeignMethodFn APITest_bindForeignMethod(
|
||||
WrenVM* vm, const char* module, const char* className,
|
||||
bool isStatic, const char* signature)
|
||||
{
|
||||
if (strncmp(module, "./test/", 7) != 0) return NULL;
|
||||
|
||||
// For convenience, concatenate all of the method qualifiers into a single
|
||||
// signature string.
|
||||
char fullName[256];
|
||||
fullName[0] = '\0';
|
||||
if (isStatic) strcat(fullName, "static ");
|
||||
strcat(fullName, className);
|
||||
strcat(fullName, ".");
|
||||
strcat(fullName, signature);
|
||||
|
||||
WrenForeignMethodFn method = NULL;
|
||||
|
||||
method = benchmarkBindMethod(fullName);
|
||||
if (method != NULL) return method;
|
||||
|
||||
method = callCallsForeignBindMethod(fullName);
|
||||
if (method != NULL) return method;
|
||||
|
||||
method = errorBindMethod(fullName);
|
||||
if (method != NULL) return method;
|
||||
|
||||
method = getVariableBindMethod(fullName);
|
||||
if (method != NULL) return method;
|
||||
|
||||
method = foreignClassBindMethod(fullName);
|
||||
if (method != NULL) return method;
|
||||
|
||||
method = handleBindMethod(fullName);
|
||||
if (method != NULL) return method;
|
||||
|
||||
method = listsBindMethod(fullName);
|
||||
if (method != NULL) return method;
|
||||
|
||||
method = newVMBindMethod(fullName);
|
||||
if (method != NULL) return method;
|
||||
|
||||
method = resolutionBindMethod(fullName);
|
||||
if (method != NULL) return method;
|
||||
|
||||
method = slotsBindMethod(fullName);
|
||||
if (method != NULL) return method;
|
||||
|
||||
method = userDataBindMethod(fullName);
|
||||
if (method != NULL) return method;
|
||||
|
||||
fprintf(stderr,
|
||||
"Unknown foreign method '%s' for test '%s'\n", fullName, testName);
|
||||
exit(1);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
WrenForeignClassMethods APITest_bindForeignClass(
|
||||
WrenVM* vm, const char* module, const char* className)
|
||||
{
|
||||
WrenForeignClassMethods methods = { NULL, NULL };
|
||||
if (strncmp(module, "./test/api", 7) != 0) return methods;
|
||||
|
||||
foreignClassBindClass(className, &methods);
|
||||
if (methods.allocate != NULL) return methods;
|
||||
|
||||
resetStackAfterForeignConstructBindClass(className, &methods);
|
||||
if (methods.allocate != NULL) return methods;
|
||||
|
||||
slotsBindClass(className, &methods);
|
||||
if (methods.allocate != NULL) return methods;
|
||||
|
||||
fprintf(stderr,
|
||||
"Unknown foreign class '%s' for test '%s'\n", className, testName);
|
||||
exit(1);
|
||||
return methods;
|
||||
}
|
||||
|
||||
int APITest_Run(WrenVM* vm, const char* inTestName)
|
||||
{
|
||||
testName = inTestName;
|
||||
if (strstr(inTestName, "/call.wren") != NULL)
|
||||
{
|
||||
return callRunTests(vm);
|
||||
}
|
||||
else if (strstr(inTestName, "/call_calls_foreign.wren") != NULL)
|
||||
{
|
||||
return callCallsForeignRunTests(vm);
|
||||
}
|
||||
else if (strstr(inTestName, "/call_wren_call_root.wren") != NULL)
|
||||
{
|
||||
return callWrenCallRootRunTests(vm);
|
||||
}
|
||||
else if (strstr(inTestName, "/reset_stack_after_call_abort.wren") != NULL)
|
||||
{
|
||||
return resetStackAfterCallAbortRunTests(vm);
|
||||
}
|
||||
else if (strstr(inTestName, "/reset_stack_after_foreign_construct.wren") != NULL)
|
||||
{
|
||||
return resetStackAfterForeignConstructRunTests(vm);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user