Browse Source

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

Andrii Doroshenko (Xrayez) 5 years ago
parent
commit
f6465f46b4

+ 1 - 1
.github/workflows/linux_builds.yml

@@ -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

+ 1 - 1
.github/workflows/macos_builds.yml

@@ -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

+ 1 - 1
.github/workflows/windows_builds.yml

@@ -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

+ 12 - 2
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(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
-    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")
     scons_cache_path = os.environ.get("SCONS_CACHE")
     if scons_cache_path != None:
     if scons_cache_path != None:

+ 1 - 1
main/SCsub

@@ -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)

+ 8 - 2
main/main.cpp

@@ -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;