SCons: Add `tests` option to enable or disable unit tests

This commit is contained in:
Andrii Doroshenko (Xrayez) 2020-07-25 16:59:30 +03:00
parent 5f75cec59e
commit f6465f46b4
6 changed files with 24 additions and 8 deletions

View File

@ -60,7 +60,7 @@ jobs:
env: env:
SCONS_CACHE: ${{github.workspace}}/.scons_cache/ SCONS_CACHE: ${{github.workspace}}/.scons_cache/
run: | run: |
scons -j2 verbose=yes warnings=all werror=yes platform=linuxbsd tools=yes target=release_debug module_mono_enabled=yes mono_glue=no scons -j2 verbose=yes warnings=all werror=yes platform=linuxbsd tools=yes tests=yes target=release_debug module_mono_enabled=yes mono_glue=no
# Execute unit tests for the editor # Execute unit tests for the editor
- name: Unit Tests - name: Unit Tests

View File

@ -49,7 +49,7 @@ jobs:
env: env:
SCONS_CACHE: ${{github.workspace}}/.scons_cache/ SCONS_CACHE: ${{github.workspace}}/.scons_cache/
run: | run: |
scons -j2 verbose=yes warnings=all werror=yes platform=osx tools=yes target=release_debug scons -j2 verbose=yes warnings=all werror=yes platform=osx tools=yes tests=yes target=release_debug
# Execute unit tests for the editor # Execute unit tests for the editor
- name: Unit Tests - name: Unit Tests

View File

@ -54,7 +54,7 @@ jobs:
env: env:
SCONS_CACHE: /.scons_cache/ SCONS_CACHE: /.scons_cache/
run: | run: |
scons -j2 verbose=yes warnings=all werror=yes platform=windows tools=yes target=release_debug scons -j2 verbose=yes warnings=all werror=yes platform=windows tools=yes tests=yes target=release_debug
# Execute unit tests for the editor # Execute unit tests for the editor
- name: Unit Tests - name: Unit Tests

View File

@ -115,6 +115,7 @@ opts.Add(EnumVariable("target", "Compilation target", "debug", ("debug", "releas
opts.Add(EnumVariable("optimize", "Optimization type", "speed", ("speed", "size"))) opts.Add(EnumVariable("optimize", "Optimization type", "speed", ("speed", "size")))
opts.Add(BoolVariable("tools", "Build the tools (a.k.a. the Godot editor)", True)) opts.Add(BoolVariable("tools", "Build the tools (a.k.a. the Godot editor)", True))
opts.Add(BoolVariable("tests", "Build the unit tests", False))
opts.Add(BoolVariable("use_lto", "Use link-time optimization", False)) opts.Add(BoolVariable("use_lto", "Use link-time optimization", False))
opts.Add(BoolVariable("use_precise_math_checks", "Math checks use very precise epsilon (debug option)", False)) opts.Add(BoolVariable("use_precise_math_checks", "Math checks use very precise epsilon (debug option)", False))
@ -249,6 +250,10 @@ if env_base["target"] == "debug":
# http://scons.org/doc/production/HTML/scons-user/ch06s04.html # http://scons.org/doc/production/HTML/scons-user/ch06s04.html
env_base.SetOption("implicit_cache", 1) env_base.SetOption("implicit_cache", 1)
if not env_base["tools"]:
# Export templates can't run unit test tool.
env_base["tests"] = False
if env_base["no_editor_splash"]: if env_base["no_editor_splash"]:
env_base.Append(CPPDEFINES=["NO_EDITOR_SPLASH"]) env_base.Append(CPPDEFINES=["NO_EDITOR_SPLASH"])
@ -312,6 +317,8 @@ if selected_platform in platform_list:
env["verbose"] = True env["verbose"] = True
env["warnings"] = "extra" env["warnings"] = "extra"
env["werror"] = True env["werror"] = True
if env["tools"]:
env["tests"] = True
if env["vsproj"]: if env["vsproj"]:
env.vs_incs = [] env.vs_incs = []
@ -586,6 +593,8 @@ if selected_platform in platform_list:
env.Append(CPPDEFINES=["PTRCALL_ENABLED"]) env.Append(CPPDEFINES=["PTRCALL_ENABLED"])
if env["tools"]: if env["tools"]:
env.Append(CPPDEFINES=["TOOLS_ENABLED"]) env.Append(CPPDEFINES=["TOOLS_ENABLED"])
if env["tests"]:
env.Append(CPPDEFINES=["TESTS_ENABLED"])
if env["disable_3d"]: if env["disable_3d"]:
if env["tools"]: if env["tools"]:
print( print(
@ -641,8 +650,9 @@ if selected_platform in platform_list:
} }
) )
# enable test framework globally and inform it of configuration method # Enable test framework globally and inform it of configuration method.
env.Append(CPPDEFINES=["DOCTEST_CONFIG_IMPLEMENT"]) if env["tests"]:
env.Append(CPPDEFINES=["DOCTEST_CONFIG_IMPLEMENT"])
scons_cache_path = os.environ.get("SCONS_CACHE") scons_cache_path = os.environ.get("SCONS_CACHE")
if scons_cache_path != None: if scons_cache_path != None:

View File

@ -20,7 +20,7 @@ env.CommandNoCache(
env.Depends("#main/app_icon.gen.h", "#main/app_icon.png") env.Depends("#main/app_icon.gen.h", "#main/app_icon.png")
env.CommandNoCache("#main/app_icon.gen.h", "#main/app_icon.png", run_in_subprocess(main_builders.make_app_icon)) env.CommandNoCache("#main/app_icon.gen.h", "#main/app_icon.png", run_in_subprocess(main_builders.make_app_icon))
if env["tools"]: if env["tests"]:
SConscript("tests/SCsub") SConscript("tests/SCsub")
lib = env.add_library("main", env.main_sources) lib = env.add_library("main", env.main_sources)

View File

@ -55,7 +55,6 @@
#include "main/performance.h" #include "main/performance.h"
#include "main/splash.gen.h" #include "main/splash.gen.h"
#include "main/splash_editor.gen.h" #include "main/splash_editor.gen.h"
#include "main/tests/test_main.h"
#include "modules/modules_enabled.gen.h" #include "modules/modules_enabled.gen.h"
#include "modules/register_module_types.h" #include "modules/register_module_types.h"
#include "platform/register_platform_apis.h" #include "platform/register_platform_apis.h"
@ -75,6 +74,10 @@
#include "servers/rendering/rendering_server_wrap_mt.h" #include "servers/rendering/rendering_server_wrap_mt.h"
#include "servers/xr_server.h" #include "servers/xr_server.h"
#ifdef TESTS_ENABLED
#include "main/tests/test_main.h"
#endif
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
#include "editor/doc_data.h" #include "editor/doc_data.h"
@ -383,6 +386,7 @@ void Main::print_help(const char *p_binary) {
OS::get_singleton()->print( OS::get_singleton()->print(
" --gdnative-generate-json-api Generate JSON dump of the Godot API for GDNative bindings.\n"); " --gdnative-generate-json-api Generate JSON dump of the Godot API for GDNative bindings.\n");
#endif #endif
#ifdef TESTS_ENABLED
OS::get_singleton()->print(" --test <test> Run a unit test ["); OS::get_singleton()->print(" --test <test> Run a unit test [");
const char **test_names = tests_get_names(); const char **test_names = tests_get_names();
const char *comma = ""; const char *comma = "";
@ -392,11 +396,13 @@ void Main::print_help(const char *p_binary) {
comma = ", "; comma = ", ";
} }
OS::get_singleton()->print("].\n"); OS::get_singleton()->print("].\n");
#endif
OS::get_singleton()->print("\n");
#endif #endif
} }
int Main::test_entrypoint(int argc, char *argv[], bool &tests_need_run) { int Main::test_entrypoint(int argc, char *argv[], bool &tests_need_run) {
#ifdef TOOLS_ENABLED // templates can't run unit test tool #ifdef TESTS_ENABLED
for (int x = 0; x < argc; x++) { for (int x = 0; x < argc; x++) {
if (strncmp(argv[x], "--test", 6) == 0) { if (strncmp(argv[x], "--test", 6) == 0) {
tests_need_run = true; tests_need_run = true;