Makes test harnesses frendlier.

Adds Menus and Random modules to Makefile.
Adds -DDebug flag to debug builds.
This commit is contained in:
2023-04-24 01:00:54 -07:00
parent bb95df74f4
commit 0f493366ca

View File

@@ -6,7 +6,7 @@ SRC_DIR = sbf-cpp
RELATIVE_SRC_DIR = ../$(SRC_DIR) RELATIVE_SRC_DIR = ../$(SRC_DIR)
ifdef DEBUG ifdef DEBUG
DBG_OPT_FLAGS=-g DBG_OPT_FLAGS=-g -DDEBUG
else else
DBG_OPT_FLAGS=-O2 DBG_OPT_FLAGS=-O2
endif endif
@@ -41,7 +41,7 @@ BUNDLEIDENTIFIER = com.majinnaibu.test.$(APPNAME)
BUNDLESIGNATURE = SBF_ BUNDLESIGNATURE = SBF_
RESOURCES_DIR = Resources RESOURCES_DIR = Resources
#APP_OBJECTS = Character.o Colors.o Menus.o #APP_OBJECTS = Character.o Colors.o Menus.o
MODULES = Abilities Archetypes Attributes Backgrounds Character Clans Colors Derangements Disciplines Freebies Genders Ranks Utils Virtues MODULES = Abilities Archetypes Attributes Backgrounds Character Clans Colors Derangements Disciplines Freebies Genders Menus Random Ranks Utils Virtues
APP_OBJECTS = $(patsubst %, $(BUILD_DIR)/%.o, $(MODULES)) APP_OBJECTS = $(patsubst %, $(BUILD_DIR)/%.o, $(MODULES))
FAT_LIBS = ncurses FAT_LIBS = ncurses
FAT_LIB_OBJECTS = $(patsubst %, $(LIB_DIR)/lib%.a, $(FAT_LIBS)) FAT_LIB_OBJECTS = $(patsubst %, $(LIB_DIR)/lib%.a, $(FAT_LIBS))
@@ -135,30 +135,34 @@ $(TEST_MAIN_CPP): $(TEST_OBJECTS)
@echo "#include <clocale>" >> $(TEST_MAIN_CPP) @echo "#include <clocale>" >> $(TEST_MAIN_CPP)
@echo "#include <string>" >> $(TEST_MAIN_CPP) @echo "#include <string>" >> $(TEST_MAIN_CPP)
@echo "#include <iostream>" >> $(TEST_MAIN_CPP) @echo "#include <iostream>" >> $(TEST_MAIN_CPP)
@echo "#include <tuple>" >> $(TEST_MAIN_CPP)
@echo "#include <algorithm>" >> $(TEST_MAIN_CPP) @echo "#include <algorithm>" >> $(TEST_MAIN_CPP)
@echo "#include <vector>" >> $(TEST_MAIN_CPP) @echo "#include <vector>" >> $(TEST_MAIN_CPP)
@echo "using namespace Test;" >> $(TEST_MAIN_CPP) @echo "using namespace Test;" >> $(TEST_MAIN_CPP)
@echo "using std::cout;\nusing std::endl;\nusing std::tuple;\nusing std::get;\nusing std::for_each;\nusing std::vector;" >> $(TEST_MAIN_CPP) @echo "using std::cout;\nusing std::endl;\nusing std::for_each;" >> $(TEST_MAIN_CPP)
@echo "$(patsubst %, extern TestResults main_test_%(int argc, char** argv);\n, $(MODULES))" >> $(TEST_MAIN_CPP) @echo "$(patsubst %, extern TestResults main_test_%(int argc, char* argv[]);\n, $(MODULES))" >> $(TEST_MAIN_CPP)
@echo "int main(int argc, char** argv) {\n setlocale(LC_ALL, \"\");\n TestResults results;\n" >> $(TEST_MAIN_CPP) @echo "int main(int argc, char* argv[]) {\n setlocale(LC_ALL, \"\");\n TestResults results;\n" >> $(TEST_MAIN_CPP)
@echo "$(patsubst %, results += main_test_%(argc, argv);\n, $(MODULES))" >> $(TEST_MAIN_CPP) @echo "$(patsubst %, results += main_test_%(argc, argv);\n, $(MODULES))" >> $(TEST_MAIN_CPP)
@echo " auto skip_messages = results.skip_messages();" >> $(TEST_MAIN_CPP)
@echo " if (skip_messages.size() > 0) {" >> $(TEST_MAIN_CPP)
@echo " cout << \"Skipped:\" << endl;" >> $(TEST_MAIN_CPP)
@echo " for_each(skip_messages.begin(), skip_messages.end(), [](const string& message){cout << \"🚧Skipped: \" << message << endl;});" >> $(TEST_MAIN_CPP)
@echo " }" >> $(TEST_MAIN_CPP)
@echo " auto failure_messages = results.failure_messages();" >> $(TEST_MAIN_CPP) @echo " auto failure_messages = results.failure_messages();" >> $(TEST_MAIN_CPP)
@echo " if (failure_messages.size() > 0) {" >> $(TEST_MAIN_CPP) @echo " if (failure_messages.size() > 0) {" >> $(TEST_MAIN_CPP)
@echo " cout << \"Failures:\" << endl;" >> $(TEST_MAIN_CPP) @echo " cout << \"Failures:\" << endl;" >> $(TEST_MAIN_CPP)
@echo " for_each(failure_messages.begin(), failure_messages.end(), [](const string& message){cout << message << endl;});\n" >> $(TEST_MAIN_CPP) @echo " for_each(failure_messages.begin(), failure_messages.end(), [](const string& message){cout << \"❌FAILED: \" << message << endl;});" >> $(TEST_MAIN_CPP)
@echo " }" >> $(TEST_MAIN_CPP) @echo " }" >> $(TEST_MAIN_CPP)
@echo " auto error_messages = results.error_messages();" >> $(TEST_MAIN_CPP) @echo " auto error_messages = results.error_messages();" >> $(TEST_MAIN_CPP)
@echo " if (error_messages.size() > 0) {" >> $(TEST_MAIN_CPP) @echo " if (error_messages.size() > 0) {" >> $(TEST_MAIN_CPP)
@echo " cout << \"Errors:\" << endl;" >> $(TEST_MAIN_CPP) @echo " cout << \"Errors:\" << endl;" >> $(TEST_MAIN_CPP)
@echo " for_each(error_messages.begin(), error_messages.end(), [](const string& message){cout << message << endl;});\n" >> $(TEST_MAIN_CPP) @echo " for_each(error_messages.begin(), error_messages.end(), [](const string& message){cout << \"🔥ERROR: \" << message << endl;});" >> $(TEST_MAIN_CPP)
@echo " }" >> $(TEST_MAIN_CPP) @echo " }" >> $(TEST_MAIN_CPP)
@echo " cout << \"Total tests: \" << results.total() << endl;" >> $(TEST_MAIN_CPP) @echo " cout << \"Total tests: \" << results.total() << endl;" >> $(TEST_MAIN_CPP)
@echo " cout << \"Passed: \" << results.passed() << endl;" >> $(TEST_MAIN_CPP) @echo " cout << \"Passed: \" << results.passed() << \" ✅\" << endl;" >> $(TEST_MAIN_CPP)
@echo " cout << \"Failed: \" << results.failed() << endl;" >> $(TEST_MAIN_CPP) @echo " cout << \"Failed: \" << results.failed() << \" ❌\" << endl;" >> $(TEST_MAIN_CPP)
@echo " cout << \"Skipped: \" << results.skipped() << endl;" >> $(TEST_MAIN_CPP) @echo " cout << \"Skipped: \" << results.skipped() << \" 🚧\" << endl;" >> $(TEST_MAIN_CPP)
@echo " cout << \"Errors: \" << results.errors() << endl;" >> $(TEST_MAIN_CPP) @echo " cout << \"Errors: \" << results.errors() << \" 🔥\" << endl;" >> $(TEST_MAIN_CPP)
@echo "\n return 0;\n}\n//tom2" >> $(TEST_MAIN_CPP) @echo "\n return 0;\n}" >> $(TEST_MAIN_CPP)
# We make our own fat libs cause homebrew sucks. # We may have to do something similar for macports, but that's not supported yet. # We make our own fat libs cause homebrew sucks. # We may have to do something similar for macports, but that's not supported yet.
$(LIB_DIR)/lib%.a: $(BREW_PREFIX)/opt/$$*/lib/lib$$*.a $(BREW86_PREFIX)/opt/$$*/lib/lib$$*.a $(MANDATORY_TARGETS) $(LIB_DIR)/lib%.a: $(BREW_PREFIX)/opt/$$*/lib/lib$$*.a $(BREW86_PREFIX)/opt/$$*/lib/lib$$*.a $(MANDATORY_TARGETS)
@@ -179,30 +183,34 @@ $(TEST_HARNESS_CPP): $(MANDATORY_TARGETS)
@echo "#include <clocale>" >> $(TEST_HARNESS_CPP) @echo "#include <clocale>" >> $(TEST_HARNESS_CPP)
@echo "#include <string>" >> $(TEST_HARNESS_CPP) @echo "#include <string>" >> $(TEST_HARNESS_CPP)
@echo "#include <iostream>" >> $(TEST_HARNESS_CPP) @echo "#include <iostream>" >> $(TEST_HARNESS_CPP)
@echo "#include <tuple>" >> $(TEST_HARNESS_CPP)
@echo "#include <algorithm>" >> $(TEST_HARNESS_CPP) @echo "#include <algorithm>" >> $(TEST_HARNESS_CPP)
@echo "#include <vector>" >> $(TEST_HARNESS_CPP) @echo "#include <vector>" >> $(TEST_HARNESS_CPP)
@echo "using namespace Test;" >> $(TEST_HARNESS_CPP) @echo "using namespace Test;" >> $(TEST_HARNESS_CPP)
@echo "using std::cout;\nusing std::endl;\nusing std::tuple;\nusing std::get;\nusing std::for_each;\nusing std::vector;" >> $(TEST_HARNESS_CPP) @echo "using std::cout;\nusing std::endl;\nusing std::for_each;" >> $(TEST_HARNESS_CPP)
@echo "extern TestResults main_test_$(MODULE)(int argc, char** argv);" >> $(TEST_HARNESS_CPP) @echo "extern TestResults main_test_$(MODULE)(int argc, char* argv[]);" >> $(TEST_HARNESS_CPP)
@echo "int main(int argc, char** argv) {\n setlocale(LC_ALL, \"\");\n TestResults results;\n" >> $(TEST_HARNESS_CPP) @echo "int main(int argc, char** argv) {\n setlocale(LC_ALL, \"\");\n TestResults results;\n" >> $(TEST_HARNESS_CPP)
@echo " results = results + main_test_$(MODULE)(argc, argv);\n" >> $(TEST_HARNESS_CPP) @echo " results = results + main_test_$(MODULE)(argc, argv);\n" >> $(TEST_HARNESS_CPP)
@echo " auto skip_messages = results.skip_messages();" >> $(TEST_HARNESS_CPP)
@echo " if (skip_messages.size() > 0) {" >> $(TEST_HARNESS_CPP)
@echo " cout << \"Skipped:\" << endl;" >> $(TEST_HARNESS_CPP)
@echo " for_each(skip_messages.begin(), skip_messages.end(), [](const string& message){cout << \"🚧Skipped: \" << message << endl;});" >> $(TEST_HARNESS_CPP)
@echo " }" >> $(TEST_HARNESS_CPP)
@echo " auto failure_messages = results.failure_messages();" >> $(TEST_HARNESS_CPP) @echo " auto failure_messages = results.failure_messages();" >> $(TEST_HARNESS_CPP)
@echo " if (failure_messages.size() > 0) {" >> $(TEST_HARNESS_CPP) @echo " if (failure_messages.size() > 0) {" >> $(TEST_HARNESS_CPP)
@echo " cout << \"Failures:\" << endl;" >> $(TEST_HARNESS_CPP) @echo " cout << \"Failures:\" << endl;" >> $(TEST_HARNESS_CPP)
@echo " for_each(failure_messages.begin(), failure_messages.end(), [](const string& message){cout << message << endl;});\n" >> $(TEST_HARNESS_CPP) @echo " for_each(failure_messages.begin(), failure_messages.end(), [](const string& message){cout << \"❌FAILED: \" << message << endl;});" >> $(TEST_HARNESS_CPP)
@echo " }" >> $(TEST_HARNESS_CPP) @echo " }" >> $(TEST_HARNESS_CPP)
@echo " auto error_messages = results.error_messages();" >> $(TEST_HARNESS_CPP) @echo " auto error_messages = results.error_messages();" >> $(TEST_HARNESS_CPP)
@echo " if (error_messages.size() > 0) {" >> $(TEST_HARNESS_CPP) @echo " if (error_messages.size() > 0) {" >> $(TEST_HARNESS_CPP)
@echo " cout << \"Errors:\" << endl;" >> $(TEST_HARNESS_CPP) @echo " cout << \"Errors:\" << endl;" >> $(TEST_HARNESS_CPP)
@echo " for_each(error_messages.begin(), error_messages.end(), [](const string& message){cout << message << endl;});\n" >> $(TEST_HARNESS_CPP) @echo " for_each(error_messages.begin(), error_messages.end(), [](const string& message){cout << \"🔥ERROR: \" << message << endl;});" >> $(TEST_HARNESS_CPP)
@echo " }" >> $(TEST_HARNESS_CPP) @echo " }" >> $(TEST_HARNESS_CPP)
@echo " cout << \"Total tests: \" << results.total() << endl;" >> $(TEST_HARNESS_CPP) @echo " cout << \"Total tests: \" << results.total() << endl;" >> $(TEST_HARNESS_CPP)
@echo " cout << \"Passed: \" << results.passed() << endl;" >> $(TEST_HARNESS_CPP) @echo " cout << \"Passed: \" << results.passed() << \" ✅\" << endl;" >> $(TEST_HARNESS_CPP)
@echo " cout << \"Failed: \" << results.failed() << endl;" >> $(TEST_HARNESS_CPP) @echo " cout << \"Failed: \" << results.failed() << \" ❌\" << endl;" >> $(TEST_HARNESS_CPP)
@echo " cout << \"Skipped: \" << results.skipped() << endl;" >> $(TEST_HARNESS_CPP) @echo " cout << \"Skipped: \" << results.skipped() << \" 🚧\" << endl;" >> $(TEST_HARNESS_CPP)
@echo " cout << \"Errors: \" << results.errors() << endl;" >> $(TEST_HARNESS_CPP) @echo " cout << \"Errors: \" << results.errors() << \" 🔥\" << endl;" >> $(TEST_HARNESS_CPP)
@echo "\n return 0;\n}\n//tom" >> $(TEST_HARNESS_CPP) @echo "\n return 0;\n}" >> $(TEST_HARNESS_CPP)
$(TEST_HARNESS_OBJ): $(TEST_HARNESS_CPP) $(SRC_DIR)/*.h $(TEST_CPP) $(MANDATORY_TARGETS) $(TEST_HARNESS_OBJ): $(TEST_HARNESS_CPP) $(SRC_DIR)/*.h $(TEST_CPP) $(MANDATORY_TARGETS)
$(CC) $(CCFLAGS) -c -o $@ $< $(CC) $(CCFLAGS) -c -o $@ $<