Kaynağa Gözat

Enable support for C++ modules tests

Modules-specific tests can be written under respective module folders.
Each module should have "tests" folder created with the tests implemented
as `doctest` headers, so they can be collected by the buildsystem and
included directly in `tests/test_main.cpp` to be compiled.
Andrii Doroshenko (Xrayez) 5 yıl önce
ebeveyn
işleme
60f53140b8
3 değiştirilmiş dosya ile 24 ekleme ve 2 silme
  1. 11 2
      modules/SCsub
  2. 11 0
      modules/modules_builders.py
  3. 2 0
      tests/test_main.cpp

+ 11 - 2
modules/SCsub

@@ -1,10 +1,10 @@
 #!/usr/bin/env python
 
-Import("env")
-
 import modules_builders
 import os
 
+Import("env")
+
 env_modules = env.Clone()
 
 Export("env_modules")
@@ -12,6 +12,15 @@ Export("env_modules")
 # Header with MODULE_*_ENABLED defines.
 env.CommandNoCache("modules_enabled.gen.h", Value(env.module_list), modules_builders.generate_modules_enabled)
 
+# Header to be included in `tests/test_main.cpp` to run module-specific tests.
+if env["tests"]:
+    env.CommandNoCache(
+        "modules_tests.gen.h",
+        Value(env.module_list),
+        Action(modules_builders.generate_modules_tests, "Generating modules tests header."),
+    )
+    env.AlwaysBuild("modules_tests.gen.h")
+
 vs_sources = []
 # libmodule_<name>.a for each active module.
 for name, path in env.module_list.items():

+ 11 - 0
modules/modules_builders.py

@@ -12,5 +12,16 @@ def generate_modules_enabled(target, source, env):
             f.write("#define %s\n" % ("MODULE_" + module.upper() + "_ENABLED"))
 
 
+def generate_modules_tests(target, source, env):
+    import os
+    import glob
+
+    with open(target[0].path, "w") as f:
+        for name, path in env.module_list.items():
+            headers = glob.glob(os.path.join(path, "tests", "*.h"))
+            for h in headers:
+                f.write('#include "%s"\n' % (os.path.normpath(h)))
+
+
 if __name__ == "__main__":
     subprocess_main(globals())

+ 2 - 0
tests/test_main.cpp

@@ -49,6 +49,8 @@
 #include "test_string.h"
 #include "test_validate_testing.h"
 
+#include "modules/modules_tests.gen.h"
+
 #include "thirdparty/doctest/doctest.h"
 
 const char **tests_get_names() {