diff --git a/.vscode/extensions.json b/.vscode/extensions.json index bf0d9d2fb96..6997491bb95 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -5,6 +5,7 @@ "EditorConfig.EditorConfig", "arcanis.vscode-zipfs", "dbaeumer.vscode-eslint", - "kevinkyang.auto-comment-blocks" + "kevinkyang.auto-comment-blocks", + "Donkie.vscode-tgstation-test-adapter" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index f95b8f7cc6b..f4f4ff2fc3d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,5 +14,6 @@ } ], "files.eol": "\n", - "gitlens.advanced.blame.customArguments": ["-w"] + "gitlens.advanced.blame.customArguments": ["-w"], + "tgstationTestExplorer.project.resultsType": "json" } diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index b01b4ac08b1..737fd3b6325 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -32,6 +32,11 @@ /// Intended to be used in the manner of `TEST_FOCUS(/datum/unit_test/math)` #define TEST_FOCUS(test_path) ##test_path { focus = TRUE; } +/// Constants indicating unit test completion status +#define UNIT_TEST_PASSED 0 +#define UNIT_TEST_FAILED 1 +#define UNIT_TEST_SKIPPED 2 + #include "anchored_mobs.dm" #include "bespoke_id.dm" #include "binary_insert.dm" diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm index 15fe6b466c2..49b3cfcfbc0 100644 --- a/code/modules/unit_tests/unit_test.dm +++ b/code/modules/unit_tests/unit_test.dm @@ -87,6 +87,8 @@ GLOBAL_VAR(test_log) tests_to_run = list(test_to_run) break + var/list/test_results = list() + for(var/I in tests_to_run) var/datum/unit_test/test = new I @@ -102,12 +104,19 @@ GLOBAL_VAR(test_log) var/list/log_entry = list("[test.succeeded ? "PASS" : "FAIL"]: [I] [duration / 10]s") var/list/fail_reasons = test.fail_reasons - qdel(test) - for(var/J in 1 to LAZYLEN(fail_reasons)) log_entry += "\tREASON #[J]: [fail_reasons[J]]" - log_test(log_entry.Join("\n")) + var/message = log_entry.Join("\n") + log_test(message) + + test_results[I] = list("status" = test.succeeded ? UNIT_TEST_PASSED : UNIT_TEST_FAILED, "message" = message, "name" = I) + + qdel(test) CHECK_TICK + var/file_name = "data/unit_tests.json" + fdel(file_name) + file(file_name) << json_encode(test_results) + SSticker.force_ending = TRUE