diff --git a/.github/workflows/linux_builds.yml b/.github/workflows/linux_builds.yml index be7737593ab..a05bb099313 100644 --- a/.github/workflows/linux_builds.yml +++ b/.github/workflows/linux_builds.yml @@ -60,7 +60,7 @@ jobs: env: SCONS_CACHE: ${{github.workspace}}/.scons_cache/ 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 - name: Unit Tests diff --git a/.github/workflows/macos_builds.yml b/.github/workflows/macos_builds.yml index 4a9fa910d05..56a4343bbe4 100644 --- a/.github/workflows/macos_builds.yml +++ b/.github/workflows/macos_builds.yml @@ -49,7 +49,7 @@ jobs: env: SCONS_CACHE: ${{github.workspace}}/.scons_cache/ 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 - name: Unit Tests diff --git a/.github/workflows/windows_builds.yml b/.github/workflows/windows_builds.yml index c58bae82757..2bc3fcfdaaa 100644 --- a/.github/workflows/windows_builds.yml +++ b/.github/workflows/windows_builds.yml @@ -54,7 +54,7 @@ jobs: env: SCONS_CACHE: /.scons_cache/ 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 - name: Unit Tests diff --git a/SConstruct b/SConstruct index e23aa1cdbc9..debae3c9df1 100644 --- a/SConstruct +++ b/SConstruct @@ -115,6 +115,7 @@ opts.Add(EnumVariable("target", "Compilation target", "debug", ("debug", "releas 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("tests", "Build the unit tests", 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)) @@ -249,6 +250,10 @@ if env_base["target"] == "debug": # http://scons.org/doc/production/HTML/scons-user/ch06s04.html 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"]: env_base.Append(CPPDEFINES=["NO_EDITOR_SPLASH"]) @@ -312,6 +317,8 @@ if selected_platform in platform_list: env["verbose"] = True env["warnings"] = "extra" env["werror"] = True + if env["tools"]: + env["tests"] = True if env["vsproj"]: env.vs_incs = [] @@ -586,6 +593,8 @@ if selected_platform in platform_list: env.Append(CPPDEFINES=["PTRCALL_ENABLED"]) if env["tools"]: env.Append(CPPDEFINES=["TOOLS_ENABLED"]) + if env["tests"]: + env.Append(CPPDEFINES=["TESTS_ENABLED"]) if env["disable_3d"]: if env["tools"]: print( @@ -641,8 +650,9 @@ if selected_platform in platform_list: } ) - # enable test framework globally and inform it of configuration method - env.Append(CPPDEFINES=["DOCTEST_CONFIG_IMPLEMENT"]) + # Enable test framework globally and inform it of configuration method. + if env["tests"]: + env.Append(CPPDEFINES=["DOCTEST_CONFIG_IMPLEMENT"]) scons_cache_path = os.environ.get("SCONS_CACHE") if scons_cache_path != None: diff --git a/main/SCsub b/main/SCsub index bf188d7328f..793e5ed8276 100644 --- a/main/SCsub +++ b/main/SCsub @@ -20,7 +20,7 @@ env.CommandNoCache( 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)) -if env["tools"]: +if env["tests"]: SConscript("tests/SCsub") lib = env.add_library("main", env.main_sources) diff --git a/main/main.cpp b/main/main.cpp index 35aa99c7206..60abed7b0bb 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -55,7 +55,6 @@ #include "main/performance.h" #include "main/splash.gen.h" #include "main/splash_editor.gen.h" -#include "main/tests/test_main.h" #include "modules/modules_enabled.gen.h" #include "modules/register_module_types.h" #include "platform/register_platform_apis.h" @@ -75,6 +74,10 @@ #include "servers/rendering/rendering_server_wrap_mt.h" #include "servers/xr_server.h" +#ifdef TESTS_ENABLED +#include "main/tests/test_main.h" +#endif + #ifdef TOOLS_ENABLED #include "editor/doc_data.h" @@ -383,6 +386,7 @@ void Main::print_help(const char *p_binary) { OS::get_singleton()->print( " --gdnative-generate-json-api Generate JSON dump of the Godot API for GDNative bindings.\n"); #endif +#ifdef TESTS_ENABLED OS::get_singleton()->print(" --test Run a unit test ["); const char **test_names = tests_get_names(); const char *comma = ""; @@ -392,11 +396,13 @@ void Main::print_help(const char *p_binary) { comma = ", "; } OS::get_singleton()->print("].\n"); +#endif + OS::get_singleton()->print("\n"); #endif } 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++) { if (strncmp(argv[x], "--test", 6) == 0) { tests_need_run = true;