mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 17:52:36 +00:00
Revert "Remove unit tests"
This reverts commit 69e27bb76ff78af47d2c1b4b8faf91d8b5f9b128.
This commit is contained in:
@@ -24,6 +24,12 @@
|
|||||||
#define testing(msg)
|
#define testing(msg)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef UNIT_TESTS
|
||||||
|
/proc/log_test(text)
|
||||||
|
WRITE_FILE(GLOB.test_log, "\[[time_stamp()]]: [text]")
|
||||||
|
SEND_TEXT(world.log, text)
|
||||||
|
#endif
|
||||||
|
|
||||||
/proc/log_admin(text)
|
/proc/log_admin(text)
|
||||||
GLOB.admin_log.Add(text)
|
GLOB.admin_log.Add(text)
|
||||||
if (CONFIG_GET(flag/log_admin))
|
if (CONFIG_GET(flag/log_admin))
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
//#define VISUALIZE_ACTIVE_TURFS //Highlights atmos active turfs in green
|
//#define VISUALIZE_ACTIVE_TURFS //Highlights atmos active turfs in green
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//#define UNIT_TESTS //Enables unit tests via TEST_RUN_PARAMETER
|
||||||
|
|
||||||
#ifndef PRELOAD_RSC //set to:
|
#ifndef PRELOAD_RSC //set to:
|
||||||
#define PRELOAD_RSC 0 // 0 to allow using external resources or on-demand behaviour;
|
#define PRELOAD_RSC 0 // 0 to allow using external resources or on-demand behaviour;
|
||||||
#endif // 1 to use the default behaviour;
|
#endif // 1 to use the default behaviour;
|
||||||
@@ -39,6 +41,10 @@
|
|||||||
#define FIND_REF_NO_CHECK_TICK
|
#define FIND_REF_NO_CHECK_TICK
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef TRAVISBUILDING
|
||||||
|
#define UNIT_TESTS
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef TRAVISTESTING
|
#ifdef TRAVISTESTING
|
||||||
#define TESTING
|
#define TESTING
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -52,7 +52,11 @@ GLOBAL_PROTECT(security_mode)
|
|||||||
Master.sleep_offline_after_initializations = FALSE
|
Master.sleep_offline_after_initializations = FALSE
|
||||||
SSticker.start_immediately = TRUE
|
SSticker.start_immediately = TRUE
|
||||||
CONFIG_SET(number/round_end_countdown, 0)
|
CONFIG_SET(number/round_end_countdown, 0)
|
||||||
|
#ifdef UNIT_TESTS
|
||||||
|
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, /proc/RunUnitTests))
|
||||||
|
#else
|
||||||
SSticker.force_ending = TRUE
|
SSticker.force_ending = TRUE
|
||||||
|
#endif
|
||||||
|
|
||||||
/world/proc/SetupExternalRSC()
|
/world/proc/SetupExternalRSC()
|
||||||
#if (PRELOAD_RSC == 0)
|
#if (PRELOAD_RSC == 0)
|
||||||
@@ -83,6 +87,10 @@ GLOBAL_PROTECT(security_mode)
|
|||||||
GLOB.world_pda_log = file("[GLOB.log_directory]/pda.log")
|
GLOB.world_pda_log = file("[GLOB.log_directory]/pda.log")
|
||||||
GLOB.sql_error_log = file("[GLOB.log_directory]/sql.log")
|
GLOB.sql_error_log = file("[GLOB.log_directory]/sql.log")
|
||||||
GLOB.manifest_log = file("[GLOB.log_directory]/manifest.log")
|
GLOB.manifest_log = file("[GLOB.log_directory]/manifest.log")
|
||||||
|
#ifdef UNIT_TESTS
|
||||||
|
GLOB.test_log = file("[GLOB.log_directory]/tests.log")
|
||||||
|
WRITE_FILE(GLOB.test_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------")
|
||||||
|
#endif
|
||||||
WRITE_FILE(GLOB.world_game_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------")
|
WRITE_FILE(GLOB.world_game_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------")
|
||||||
WRITE_FILE(GLOB.world_attack_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------")
|
WRITE_FILE(GLOB.world_attack_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------")
|
||||||
WRITE_FILE(GLOB.world_runtime_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------")
|
WRITE_FILE(GLOB.world_runtime_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------")
|
||||||
@@ -152,6 +160,10 @@ GLOBAL_PROTECT(security_mode)
|
|||||||
if(GLOB)
|
if(GLOB)
|
||||||
if(GLOB.total_runtimes != 0)
|
if(GLOB.total_runtimes != 0)
|
||||||
fail_reasons = list("Total runtimes: [GLOB.total_runtimes]")
|
fail_reasons = list("Total runtimes: [GLOB.total_runtimes]")
|
||||||
|
#ifdef UNIT_TESTS
|
||||||
|
if(GLOB.failed_any_test)
|
||||||
|
LAZYADD(fail_reasons, "Unit Tests failed!")
|
||||||
|
#endif
|
||||||
if(!GLOB.log_directory)
|
if(!GLOB.log_directory)
|
||||||
LAZYADD(fail_reasons, "Missing GLOB.log_directory!")
|
LAZYADD(fail_reasons, "Missing GLOB.log_directory!")
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -121,6 +121,12 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0)
|
|||||||
for(var/line in desclines)
|
for(var/line in desclines)
|
||||||
SEND_TEXT(world.log, line)
|
SEND_TEXT(world.log, line)
|
||||||
|
|
||||||
|
#ifdef UNIT_TESTS
|
||||||
|
if(GLOB.current_test)
|
||||||
|
//good day, sir
|
||||||
|
GLOB.current_test.Fail("[main_line]\n[desclines.Join("\n")]")
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This logs the runtime in the old format */
|
/* This logs the runtime in the old format */
|
||||||
|
|
||||||
E.name = "\n\[[time2text(world.timeofday,"hh:mm:ss")]\][E.name]"
|
E.name = "\n\[[time2text(world.timeofday,"hh:mm:ss")]\][E.name]"
|
||||||
|
|||||||
5
code/modules/unit_tests/_unit_tests.dm
Normal file
5
code/modules/unit_tests/_unit_tests.dm
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
//include unit test files in this module in this ifdef
|
||||||
|
|
||||||
|
#ifdef UNIT_TESTS
|
||||||
|
#include "unit_test.dm"
|
||||||
|
#endif
|
||||||
77
code/modules/unit_tests/unit_test.dm
Normal file
77
code/modules/unit_tests/unit_test.dm
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
Override /Run() to run your test code
|
||||||
|
|
||||||
|
Call Fail() to fail the test (You should specify a reason)
|
||||||
|
|
||||||
|
You may use /New() and /Destroy() for setup/teardown respectively
|
||||||
|
|
||||||
|
You can use the run_loc_bottom_left and run_loc_top_right to get turfs for testing
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
GLOBAL_DATUM(current_test, /datum/unit_test)
|
||||||
|
GLOBAL_VAR_INIT(failed_any_test, FALSE)
|
||||||
|
GLOBAL_VAR(test_log)
|
||||||
|
|
||||||
|
/datum/unit_test
|
||||||
|
//Bit of metadata for the future maybe
|
||||||
|
var/list/procs_tested
|
||||||
|
|
||||||
|
//usable vars
|
||||||
|
var/turf/run_loc_bottom_left
|
||||||
|
var/turf/run_loc_top_right
|
||||||
|
|
||||||
|
//internal shit
|
||||||
|
var/succeeded = TRUE
|
||||||
|
var/list/fail_reasons
|
||||||
|
|
||||||
|
/datum/unit_test/New()
|
||||||
|
run_loc_bottom_left = locate(1, 1, 1)
|
||||||
|
run_loc_top_right = locate(5, 5, 1)
|
||||||
|
|
||||||
|
/datum/unit_test/Destroy()
|
||||||
|
//clear the test area
|
||||||
|
for(var/atom/movable/AM in block(run_loc_bottom_left, run_loc_top_right))
|
||||||
|
qdel(AM)
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/datum/unit_test/proc/Run()
|
||||||
|
Fail("Run() called parent or not implemented")
|
||||||
|
|
||||||
|
/datum/unit_test/proc/Fail(reason = "No reason")
|
||||||
|
succeeded = FALSE
|
||||||
|
|
||||||
|
if(!istext(reason))
|
||||||
|
reason = "FORMATTED: [reason != null ? reason : "NULL"]"
|
||||||
|
|
||||||
|
LAZYADD(fail_reasons, reason)
|
||||||
|
|
||||||
|
/proc/RunUnitTests()
|
||||||
|
CHECK_TICK
|
||||||
|
|
||||||
|
for(var/I in subtypesof(/datum/unit_test))
|
||||||
|
var/datum/unit_test/test = new I
|
||||||
|
|
||||||
|
GLOB.current_test = test
|
||||||
|
var/duration = REALTIMEOFDAY
|
||||||
|
|
||||||
|
test.Run()
|
||||||
|
|
||||||
|
duration = REALTIMEOFDAY - duration
|
||||||
|
GLOB.current_test = null
|
||||||
|
GLOB.failed_any_test |= !test.succeeded
|
||||||
|
|
||||||
|
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"))
|
||||||
|
|
||||||
|
CHECK_TICK
|
||||||
|
|
||||||
|
SSticker.force_ending = TRUE
|
||||||
@@ -2378,6 +2378,7 @@
|
|||||||
#include "code\modules\tgui\states\self.dm"
|
#include "code\modules\tgui\states\self.dm"
|
||||||
#include "code\modules\tgui\states\zlevel.dm"
|
#include "code\modules\tgui\states\zlevel.dm"
|
||||||
#include "code\modules\tooltip\tooltip.dm"
|
#include "code\modules\tooltip\tooltip.dm"
|
||||||
|
#include "code\modules\unit_tests\_unit_tests.dm"
|
||||||
#include "code\modules\uplink\uplink.dm"
|
#include "code\modules\uplink\uplink.dm"
|
||||||
#include "code\modules\uplink\uplink_devices.dm"
|
#include "code\modules\uplink\uplink_devices.dm"
|
||||||
#include "code\modules\uplink\uplink_items.dm"
|
#include "code\modules\uplink\uplink_items.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user