import subprocess Import("env platform party_classes common_sources") arch_short = '64' if (env['bits'] == '64') else '86' # Add path to scons env.Append(CPPPATH=['../deps/Catch2/single_include/catch2']) test_sources = Glob("""*.cpp""") + Split(""" #build/obj/scenedit/scen.fileio.cpp ../deps/fmtlib/src/format.cc ../deps/fmtlib/src/os.cc """) debug_symbols = None if str(platform) == "win32" and 'msvc' in env["TOOLS"]: link_flags = f'/nologo /SUBSYSTEM:CONSOLE /MACHINE:X{arch_short}' if not env['release']: link_flags += ' /DEBUG' test = env.Program("#build/bin/boe_test", party_classes + common_sources + test_sources, LINKFLAGS=link_flags) if not env['release']: debug_symbols = test[0].abspath.replace(".exe", ".pdb") else: test = env.Program("#build/bin/boe_test", test_sources + party_classes + common_sources) def run_tests(env,target,source): app = str(source[0].abspath) exit_code = subprocess.call(app) if exit_code == 0: open(target[0].abspath,'w').write("PASSED\n") else: print(f'Unit test failure! Exit code: {exit_code}') # TODO: When issue #449 is fixed, Windows should also exit on test failure: if str(platform) != "win32": exit(exit_code) env.Install("#build/test/", test) if debug_symbols is not None: env.Install("#build/test/", debug_symbols) env.AlwaysBuild(env.Install("#build/test/", Dir("#test/files"))) env.AlwaysBuild(env.Install("#build/rsrc/", Dir("#rsrc/strings"))) # The dialog construction test case requires these: env.AlwaysBuild(env.Install("#build/rsrc/", Dir("#rsrc/dialogs"))) env.AlwaysBuild(env.Install("#build/rsrc/", Dir("#rsrc/fonts"))) env.AlwaysBuild(env.Install("#build/rsrc/", Dir("#rsrc/graphics"))) # The town boundaries conversion test requires this: env.AlwaysBuild(env.Install("#build/rsrc/", Dir("#rsrc/sounds"))) env.Command("#build/test/junk/", '', 'mkdir "' + Dir("#build/test/junk").path + '"') env.Command("#build/test/passed", test, run_tests, chdir=True)