From 7a79b8fac625ebd7da4113a3329b8fd72bc781da Mon Sep 17 00:00:00 2001 From: Bob Nystrom Date: Thu, 13 Aug 2015 09:09:27 -0700 Subject: [PATCH] Simplify the API tests. Use fewer test suites with more tests in each one since there's so much boilerplate for defining an API test. --- script/wren.mk | 5 ++- test/api/get_value/get_value.h | 3 -- test/api/main.c | 16 +++----- test/api/return_bool/return_bool.c | 21 ---------- test/api/return_bool/return_bool.h | 3 -- test/api/return_bool/return_bool.wren | 7 ---- test/api/return_double/return_double.c | 21 ---------- test/api/return_double/return_double.h | 3 -- test/api/return_double/return_double.wren | 7 ---- test/api/return_null/return_null.c | 15 ------- test/api/return_null/return_null.h | 3 -- test/api/return_null/return_null.wren | 5 --- test/api/returns.c | 39 +++++++++++++++++++ test/api/returns.h | 3 ++ test/api/returns.wren | 17 ++++++++ test/api/{get_value/get_value.c => value.c} | 4 +- test/api/value.h | 3 ++ .../{get_value/get_value.wren => value.wren} | 0 18 files changed, 72 insertions(+), 103 deletions(-) delete mode 100644 test/api/get_value/get_value.h delete mode 100644 test/api/return_bool/return_bool.c delete mode 100644 test/api/return_bool/return_bool.h delete mode 100644 test/api/return_bool/return_bool.wren delete mode 100644 test/api/return_double/return_double.c delete mode 100644 test/api/return_double/return_double.h delete mode 100644 test/api/return_double/return_double.wren delete mode 100644 test/api/return_null/return_null.c delete mode 100644 test/api/return_null/return_null.h delete mode 100644 test/api/return_null/return_null.wren create mode 100644 test/api/returns.c create mode 100644 test/api/returns.h create mode 100644 test/api/returns.wren rename test/api/{get_value/get_value.c => value.c} (81%) create mode 100644 test/api/value.h rename test/api/{get_value/get_value.wren => value.wren} (100%) diff --git a/script/wren.mk b/script/wren.mk index 0b3e0fb3..3c78780f 100644 --- a/script/wren.mk +++ b/script/wren.mk @@ -21,9 +21,10 @@ # Files. CLI_HEADERS := $(wildcard src/cli/*.h) VM_HEADERS := $(wildcard src/vm/*.h) +TEST_HEADERS := $(wildcard test/api/*.h) CLI_SOURCES := $(wildcard src/cli/*.c) VM_SOURCES := $(wildcard src/vm/*.c) -TEST_SOURCES := $(shell find test/api -name '*.c') +TEST_SOURCES := $(wildcard test/api/*.c) BUILD_DIR := build C_WARNINGS := -Wall -Wextra -Werror -Wno-unused-parameter @@ -143,7 +144,7 @@ $(BUILD_DIR)/vm/%.o: src/vm/%.c $(VM_HEADERS) @$(CC) -c $(CFLAGS) -Isrc/include -o $@ $(FILE_FLAG) $< # Test object files. -$(BUILD_DIR)/test/%.o: test/api/%.c $(VM_HEADERS) +$(BUILD_DIR)/test/%.o: test/api/%.c $(CLI_HEADERS) $(TEST_HEADERS) $(VM_HEADERS) @printf "%10s %-30s %s\n" $(CC) $< "$(C_OPTIONS)" @mkdir -p $(dir $@) @$(CC) -c $(CFLAGS) -Isrc/include -Isrc/cli -o $@ $(FILE_FLAG) $< diff --git a/test/api/get_value/get_value.h b/test/api/get_value/get_value.h deleted file mode 100644 index 8f333fac..00000000 --- a/test/api/get_value/get_value.h +++ /dev/null @@ -1,3 +0,0 @@ -#include "wren.h" - -WrenForeignMethodFn getValueBindForeign(const char* signature); diff --git a/test/api/main.c b/test/api/main.c index 97eb121e..5d8d732b 100644 --- a/test/api/main.c +++ b/test/api/main.c @@ -5,10 +5,8 @@ #include "vm.h" #include "wren.h" -#include "get_value/get_value.h" -#include "return_bool/return_bool.h" -#include "return_double/return_double.h" -#include "return_null/return_null.h" +#include "value.h" +#include "returns.h" #define REGISTER_TEST(name, camelCase) \ if (strcmp(testName, #name) == 0) return camelCase##BindForeign(fullName) @@ -31,10 +29,8 @@ static WrenForeignMethodFn bindForeign( strcat(fullName, "."); strcat(fullName, signature); - REGISTER_TEST(get_value, getValue); - REGISTER_TEST(return_bool, returnBool); - REGISTER_TEST(return_double, returnDouble); - REGISTER_TEST(return_null, returnNull); + REGISTER_TEST(returns, returns); + REGISTER_TEST(value, value); fprintf(stderr, "Unknown foreign method '%s' for test '%s'\n", fullName, testName); @@ -52,12 +48,10 @@ int main(int argc, const char* argv[]) testName = argv[1]; - // The test script is at "test/api//.wren". + // The test script is at "test/api/.wren". char testPath[256]; strcpy(testPath, "test/api/"); strcat(testPath, testName); - strcat(testPath, "/"); - strcat(testPath, testName); strcat(testPath, ".wren"); runFile(bindForeign, testPath); diff --git a/test/api/return_bool/return_bool.c b/test/api/return_bool/return_bool.c deleted file mode 100644 index c52dae4c..00000000 --- a/test/api/return_bool/return_bool.c +++ /dev/null @@ -1,21 +0,0 @@ -#include - -#include "return_bool.h" - -static void returnTrue(WrenVM* vm) -{ - wrenReturnBool(vm, true); -} - -static void returnFalse(WrenVM* vm) -{ - wrenReturnBool(vm, false); -} - -WrenForeignMethodFn returnBoolBindForeign(const char* signature) -{ - if (strcmp(signature, "static Api.returnTrue") == 0) return returnTrue; - if (strcmp(signature, "static Api.returnFalse") == 0) return returnFalse; - - return NULL; -} diff --git a/test/api/return_bool/return_bool.h b/test/api/return_bool/return_bool.h deleted file mode 100644 index f20d4986..00000000 --- a/test/api/return_bool/return_bool.h +++ /dev/null @@ -1,3 +0,0 @@ -#include "wren.h" - -WrenForeignMethodFn returnBoolBindForeign(const char* signature); diff --git a/test/api/return_bool/return_bool.wren b/test/api/return_bool/return_bool.wren deleted file mode 100644 index 6e33ac8d..00000000 --- a/test/api/return_bool/return_bool.wren +++ /dev/null @@ -1,7 +0,0 @@ -class Api { - foreign static returnTrue - foreign static returnFalse -} - -IO.print(Api.returnTrue) // expect: true -IO.print(Api.returnFalse) // expect: false diff --git a/test/api/return_double/return_double.c b/test/api/return_double/return_double.c deleted file mode 100644 index 83d47153..00000000 --- a/test/api/return_double/return_double.c +++ /dev/null @@ -1,21 +0,0 @@ -#include - -#include "return_double.h" - -static void returnInt(WrenVM* vm) -{ - wrenReturnDouble(vm, 123456); -} - -static void returnFloat(WrenVM* vm) -{ - wrenReturnDouble(vm, 123.456); -} - -WrenForeignMethodFn returnDoubleBindForeign(const char* signature) -{ - if (strcmp(signature, "static Api.returnInt") == 0) return returnInt; - if (strcmp(signature, "static Api.returnFloat") == 0) return returnFloat; - - return NULL; -} diff --git a/test/api/return_double/return_double.h b/test/api/return_double/return_double.h deleted file mode 100644 index 50f49232..00000000 --- a/test/api/return_double/return_double.h +++ /dev/null @@ -1,3 +0,0 @@ -#include "wren.h" - -WrenForeignMethodFn returnDoubleBindForeign(const char* signature); diff --git a/test/api/return_double/return_double.wren b/test/api/return_double/return_double.wren deleted file mode 100644 index ed59e0e9..00000000 --- a/test/api/return_double/return_double.wren +++ /dev/null @@ -1,7 +0,0 @@ -class Api { - foreign static returnInt - foreign static returnFloat -} - -IO.print(Api.returnInt) // expect: 123456 -IO.print(Api.returnFloat) // expect: 123.456 diff --git a/test/api/return_null/return_null.c b/test/api/return_null/return_null.c deleted file mode 100644 index 41a94d82..00000000 --- a/test/api/return_null/return_null.c +++ /dev/null @@ -1,15 +0,0 @@ -#include - -#include "return_null.h" - -static void implicitNull(WrenVM* vm) -{ - // Do nothing. -} - -WrenForeignMethodFn returnNullBindForeign(const char* signature) -{ - if (strcmp(signature, "static Api.implicitNull") == 0) return implicitNull; - - return NULL; -} diff --git a/test/api/return_null/return_null.h b/test/api/return_null/return_null.h deleted file mode 100644 index d2afb9c8..00000000 --- a/test/api/return_null/return_null.h +++ /dev/null @@ -1,3 +0,0 @@ -#include "wren.h" - -WrenForeignMethodFn returnNullBindForeign(const char* signature); diff --git a/test/api/return_null/return_null.wren b/test/api/return_null/return_null.wren deleted file mode 100644 index a1164ce3..00000000 --- a/test/api/return_null/return_null.wren +++ /dev/null @@ -1,5 +0,0 @@ -class Api { - foreign static implicitNull -} - -IO.print(Api.implicitNull == null) // expect: true diff --git a/test/api/returns.c b/test/api/returns.c new file mode 100644 index 00000000..83ca0bcf --- /dev/null +++ b/test/api/returns.c @@ -0,0 +1,39 @@ +#include + +#include "returns.h" + +static void implicitNull(WrenVM* vm) +{ + // Do nothing. +} + +static void returnInt(WrenVM* vm) +{ + wrenReturnDouble(vm, 123456); +} + +static void returnFloat(WrenVM* vm) +{ + wrenReturnDouble(vm, 123.456); +} + +static void returnTrue(WrenVM* vm) +{ + wrenReturnBool(vm, true); +} + +static void returnFalse(WrenVM* vm) +{ + wrenReturnBool(vm, false); +} + +WrenForeignMethodFn returnsBindForeign(const char* signature) +{ + if (strcmp(signature, "static Api.implicitNull") == 0) return implicitNull; + if (strcmp(signature, "static Api.returnInt") == 0) return returnInt; + if (strcmp(signature, "static Api.returnFloat") == 0) return returnFloat; + if (strcmp(signature, "static Api.returnTrue") == 0) return returnTrue; + if (strcmp(signature, "static Api.returnFalse") == 0) return returnFalse; + + return NULL; +} diff --git a/test/api/returns.h b/test/api/returns.h new file mode 100644 index 00000000..7b1c2a1b --- /dev/null +++ b/test/api/returns.h @@ -0,0 +1,3 @@ +#include "wren.h" + +WrenForeignMethodFn returnsBindForeign(const char* signature); diff --git a/test/api/returns.wren b/test/api/returns.wren new file mode 100644 index 00000000..f607eef6 --- /dev/null +++ b/test/api/returns.wren @@ -0,0 +1,17 @@ +class Api { + foreign static implicitNull + + foreign static returnInt + foreign static returnFloat + + foreign static returnTrue + foreign static returnFalse +} + +IO.print(Api.implicitNull == null) // expect: true + +IO.print(Api.returnInt) // expect: 123456 +IO.print(Api.returnFloat) // expect: 123.456 + +IO.print(Api.returnTrue) // expect: true +IO.print(Api.returnFalse) // expect: false diff --git a/test/api/get_value/get_value.c b/test/api/value.c similarity index 81% rename from test/api/get_value/get_value.c rename to test/api/value.c index fd02c23a..d8fd3c3b 100644 --- a/test/api/get_value/get_value.c +++ b/test/api/value.c @@ -1,6 +1,6 @@ #include -#include "get_value.h" +#include "value.h" static WrenValue* value; @@ -15,7 +15,7 @@ static void getValue(WrenVM* vm) wrenReleaseValue(vm, value); } -WrenForeignMethodFn getValueBindForeign(const char* signature) +WrenForeignMethodFn valueBindForeign(const char* signature) { if (strcmp(signature, "static Api.value=(_)") == 0) return setValue; if (strcmp(signature, "static Api.value") == 0) return getValue; diff --git a/test/api/value.h b/test/api/value.h new file mode 100644 index 00000000..11229246 --- /dev/null +++ b/test/api/value.h @@ -0,0 +1,3 @@ +#include "wren.h" + +WrenForeignMethodFn valueBindForeign(const char* signature); diff --git a/test/api/get_value/get_value.wren b/test/api/value.wren similarity index 100% rename from test/api/get_value/get_value.wren rename to test/api/value.wren