...
1 #! /usr/bin/env python3
3 # This file is under GNU General Public License 3.0
7 from os import listdir, getcwd
8 from os.path import isfile, join
12 srcpath = join(getcwd(), "src/engine_tests")
20 parser = argparse.ArgumentParser()
21 parser.add_argument("--exclude", "-x", help="Comma-separated list of tests to exclude from test suite build")
23 args = parser.parse_args()
25 exclude_arg = args.exclude
28 exclude_list = exclude_arg.split(",")
29 for x in exclude_list:
32 if isfile(join(srcpath, f)):
33 if (f.endswith(".cc")):
34 suite = sub('\.cc$', '', f)
35 if not suite in exclude_list:
39 '// This file is under GNU General Public License 3.0\n'
40 '// see LICENSE.txt\n\n')
43 header = license + "//\n// src/SuiteMaker.cc generated by gensuitemaker.py - changes may be overwritten. You've been warned!\n//\n\n"
46 '#include <cpptest.h>\n'
47 '#include <cpptest-suite.h>\n'
50 '#include "SuiteMaker.h"\n')
55 suiteincludes += '#include "' + s + '.h"\n'
57 output = header + "\n// Begin where we generate stuff\n" + suiteincludes + "\n"
60 "const char* SuiteMaker::all_suites[] = {\n")
65 output += indent + '"' + s + '",\n'
70 '// This file is generated, so magic constants are ok.\n'
71 'int SuiteMaker::num_suites = ')
73 output += str(len(suites)) + ";\n\n"
75 output += "void SuiteMaker::suitemaker_build(const char* test_class_name, const char* test_home, Test::Suite** test_suite) {\n"
87 output += ('if (strcmp(test_class_name, "' + s + '") == 0)\n' +
88 indent + indent + '*test_suite = new ' + s + '(test_class_name, test_home);\n')
93 'void SuiteMaker::suitemaker_buildlist(const char** test_class_names, int num_to_run, const char* test_home, std::vector<Test::Suite*>& test_suites) {\n'
94 ' for (int i = 0; i < num_to_run; i++) {\n'
95 ' Test::Suite* suite = NULL;\n'
96 ' SuiteMaker::suitemaker_build(test_class_names[i], test_home, &suite);\n'
98 ' throw std::runtime_error("Could not create a test suite instance."); // FIXME, better error, cleanup, obviously\n'
99 ' test_suites.push_back(suite);\n'
103 'void SuiteMaker::suitemaker_buildall(const char* test_home, std::vector<Test::Suite*>& test_suites) {\n'
104 ' SuiteMaker::suitemaker_buildlist(SuiteMaker::all_suites, SuiteMaker::num_suites, test_home, test_suites);\n'
107 suitemaker = open("src/SuiteMaker.cc", 'w')
108 suitemaker.write(output)
111 generated_at = ("src/SuiteMaker.cc" + " generated at " + datetime.datetime.now().strftime('%c'))