diff --git a/_maps/map_files/stations/metastation.dmm b/_maps/map_files/stations/metastation.dmm index d54fe0bf7d3..920766c4d41 100644 --- a/_maps/map_files/stations/metastation.dmm +++ b/_maps/map_files/stations/metastation.dmm @@ -66322,7 +66322,6 @@ icon_state = "0-2" }, /obj/machinery/power/apc/directional/north, -/obj/machinery/power/apc/directional/north, /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, diff --git a/code/game/machinery/ai_resource.dm b/code/game/machinery/ai_resource.dm index baf58ffc330..0134ef7aafd 100644 --- a/code/game/machinery/ai_resource.dm +++ b/code/game/machinery/ai_resource.dm @@ -38,7 +38,7 @@ GLOBAL_LIST_EMPTY(ai_nodes) /obj/machinery/ai_node/Initialize(mapload) - ..() + . = ..() GLOB.ai_nodes += src /obj/machinery/ai_node/examine(mob/user) diff --git a/code/game/objects/effects/spawners/random/pool/pool_spawner.dm b/code/game/objects/effects/spawners/random/pool/pool_spawner.dm index 64e96955c41..75a62657bab 100644 --- a/code/game/objects/effects/spawners/random/pool/pool_spawner.dm +++ b/code/game/objects/effects/spawners/random/pool/pool_spawner.dm @@ -27,7 +27,7 @@ // Skip all the shit and just spawn it. spawn_loot() qdel(src) - return + return INITIALIZE_HINT_QDEL var/datum/spawn_pool/pool = GLOB.spawn_pool_manager.get(spawn_pool) if(!pool) @@ -41,6 +41,8 @@ else pool.known_spawners |= src + return INITIALIZE_HINT_QDEL + /obj/effect/spawner/random/pool/generate_loot_list() var/datum/spawn_pool/pool = GLOB.spawn_pool_manager.get(spawn_pool) if(!pool) diff --git a/code/tests/_game_test.dm b/code/tests/_game_test.dm index f6413bd89cd..159454530ed 100644 --- a/code/tests/_game_test.dm +++ b/code/tests/_game_test.dm @@ -57,30 +57,12 @@ GLOBAL_LIST_EMPTY(game_test_tguis) //Bit of metadata for the future maybe var/list/procs_tested - //usable vars - var/list/available_turfs - - //internal shit + // failure tracking var/succeeded = TRUE var/list/allocated var/list/fail_reasons - var/testing_area_name = "test_generic.dmm" - var/obj/effect/landmark/bottom_left - var/obj/effect/landmark/top_right /datum/game_test/New() - if(!length(available_turfs)) - load_testing_area() - available_turfs = get_test_turfs() - -/datum/game_test/proc/load_testing_area() - var/list/testing_levels = levels_by_trait(GAME_TEST_LEVEL) - if(!length(testing_levels)) - Fail("Could not find appropriate z-level for spawning test areas") - var/testing_z_level = pick(testing_levels) - var/datum/map_template/generic_test_area = GLOB.map_templates[testing_area_name] - if(!generic_test_area.load(locate(TRANSITIONEDGE + 1, TRANSITIONEDGE + 1, testing_z_level))) - Fail("Could not place generic testing area on z-level [testing_z_level]") /datum/game_test/Destroy() QDEL_LIST_CONTENTS(allocated) @@ -89,11 +71,6 @@ GLOBAL_LIST_EMPTY(game_test_tguis) for(var/atom/movable/AM in T) qdel(AM) - // Gotta destroy these landmarks so the next test - // doesn't end up seeing them if it tries to load a new map - qdel(bottom_left) - qdel(top_right) - return ..() /datum/game_test/proc/Run() @@ -107,7 +84,59 @@ GLOBAL_LIST_EMPTY(game_test_tguis) LAZYADD(fail_reasons, list(list(reason, file, line))) -/datum/game_test/proc/get_test_turfs() +/datum/game_test/proc/get_available_turfs() + return get_area_turfs(findEventArea()) + +/// Allocates an instance of the provided type, and places it somewhere in an available loc +/// Instances allocated through this proc will be destroyed when the test is over +/datum/game_test/proc/allocate(type, ...) + var/list/arguments = args.Copy(2) + if(ispath(type, /atom)) + if(!arguments.len) + arguments = list(pick(get_available_turfs())) + else if(arguments[1] == null) + arguments[1] = pick(get_available_turfs()) + var/instance + // Byond will throw an index out of bounds if arguments is empty in that arglist call. Sigh + if(length(arguments)) + instance = new type(arglist(arguments)) + else + instance = new type() + LAZYADD(allocated, instance) + return instance + +/datum/game_test/room_test + var/list/available_turfs + var/testing_area_name = "test_generic.dmm" + var/obj/effect/landmark/bottom_left + var/obj/effect/landmark/top_right + +/datum/game_test/room_test/New() + . = ..() + if(!length(available_turfs)) + load_testing_area() + available_turfs = get_test_turfs() + +/datum/game_test/room_test/Destroy() + . = ..() + // Gotta destroy these landmarks so the next test + // doesn't end up seeing them if it tries to load a new map + qdel(bottom_left) + qdel(top_right) + +/datum/game_test/room_test/get_available_turfs() + return available_turfs + +/datum/game_test/room_test/proc/load_testing_area() + var/list/testing_levels = levels_by_trait(GAME_TEST_LEVEL) + if(!length(testing_levels)) + Fail("Could not find appropriate z-level for spawning test areas") + var/testing_z_level = pick(testing_levels) + var/datum/map_template/generic_test_area = GLOB.map_templates[testing_area_name] + if(!generic_test_area.load(locate(TRANSITIONEDGE + 1, TRANSITIONEDGE + 1, testing_z_level))) + Fail("Could not place generic testing area on z-level [testing_z_level]") + +/datum/game_test/room_test/proc/get_test_turfs() var/list/result = list() for(var/obj/effect/landmark in GLOB.landmarks_list) if(istype(landmark, /obj/effect/landmark/game_test/bottom_left_corner)) @@ -125,21 +154,3 @@ GLOBAL_LIST_EMPTY(game_test_tguis) Fail("could not find any test turfs") return result - -/// Allocates an instance of the provided type, and places it somewhere in an available loc -/// Instances allocated through this proc will be destroyed when the test is over -/datum/game_test/proc/allocate(type, ...) - var/list/arguments = args.Copy(2) - if(ispath(type, /atom)) - if(!arguments.len) - arguments = list(pick(available_turfs)) - else if(arguments[1] == null) - arguments[1] = pick(available_turfs) - var/instance - // Byond will throw an index out of bounds if arguments is empty in that arglist call. Sigh - if(length(arguments)) - instance = new type(arglist(arguments)) - else - instance = new type() - LAZYADD(allocated, instance) - return instance diff --git a/code/tests/atmos/test_ventcrawl.dm b/code/tests/atmos/test_ventcrawl.dm index ee446d15e2e..5779c0bff14 100644 --- a/code/tests/atmos/test_ventcrawl.dm +++ b/code/tests/atmos/test_ventcrawl.dm @@ -1,4 +1,4 @@ -/datum/game_test/ventcrawl +/datum/game_test/room_test/ventcrawl var/mob/living/simple_animal/slime = null var/obj/machinery/vent = null var/obj/structure/table/table = null @@ -6,7 +6,7 @@ /datum/milla_safe_must_sleep/ventcrawl_test_setup -/datum/milla_safe_must_sleep/ventcrawl_test_setup/on_run(datum/game_test/ventcrawl/test) +/datum/milla_safe_must_sleep/ventcrawl_test_setup/on_run(datum/game_test/room_test/ventcrawl/test) // I'm sure get_area_turfs is totally deterministic and this will never go wrong var/turf/run_loc_bottom_left = test.available_turfs[1] // This setup creates turfs that initialize themselves in MILLA on creation, which is why we need to be MILLA-safe. @@ -19,13 +19,13 @@ test.table = test.find_spawned_test_object(get_step(run_loc_bottom_left, EAST), /obj/structure/table) test.setup_complete = TRUE -/datum/game_test/ventcrawl/proc/find_spawned_test_object(turf/location as turf, test_object_type) +/datum/game_test/room_test/ventcrawl/proc/find_spawned_test_object(turf/location as turf, test_object_type) for(var/content in location.contents) if(istype(content, test_object_type)) return content TEST_FAIL("Couldn't find spawned test object of type: [test_object_type].") -/datum/game_test/ventcrawl/Run() +/datum/game_test/room_test/ventcrawl/Run() var/datum/milla_safe_must_sleep/ventcrawl_test_setup/milla = new() milla.invoke_async(src) while(!setup_complete) diff --git a/code/tests/attack_chain/test_attack_chain_borgs.dm b/code/tests/attack_chain/test_attack_chain_borgs.dm index 5cf8721b786..6a6decb9e88 100644 --- a/code/tests/attack_chain/test_attack_chain_borgs.dm +++ b/code/tests/attack_chain/test_attack_chain_borgs.dm @@ -1,4 +1,4 @@ -/datum/game_test/attack_chain_borgs/Run() +/datum/game_test/room_test/attack_chain_borgs/Run() var/datum/test_puppeteer/player = new(src) player.puppet.name = "Player" diff --git a/code/tests/attack_chain/test_attack_chain_cult_dagger.dm b/code/tests/attack_chain/test_attack_chain_cult_dagger.dm index c1c2420e494..69321c91e14 100644 --- a/code/tests/attack_chain/test_attack_chain_cult_dagger.dm +++ b/code/tests/attack_chain/test_attack_chain_cult_dagger.dm @@ -1,4 +1,4 @@ -/datum/game_test/attack_chain_cult_dagger/Run() +/datum/game_test/room_test/attack_chain_cult_dagger/Run() var/datum/test_puppeteer/cultist = new(src) var/datum/test_puppeteer/target = cultist.spawn_puppet_nearby() diff --git a/code/tests/attack_chain/test_attack_chain_machinery.dm b/code/tests/attack_chain/test_attack_chain_machinery.dm index 7755af16cfe..ae8aa8c7898 100644 --- a/code/tests/attack_chain/test_attack_chain_machinery.dm +++ b/code/tests/attack_chain/test_attack_chain_machinery.dm @@ -1,21 +1,21 @@ -/datum/game_test/attack_chain_machinery +/datum/game_test/room_test/attack_chain_machinery testing_area_name = "test_attack_chain_machinery.dmm" var/list/machine_instances_by_type = list() -/datum/game_test/attack_chain_machinery/proc/teleport_to_first(datum/test_puppeteer/player, obj_type, dir=EAST) +/datum/game_test/room_test/attack_chain_machinery/proc/teleport_to_first(datum/test_puppeteer/player, obj_type, dir=EAST) if(length(machine_instances_by_type[obj_type])) var/machine = machine_instances_by_type[obj_type][1] player.puppet.forceMove(get_step(machine, dir)) return machine TEST_FAIL("could not find [obj_type] to teleport puppet to") -/datum/game_test/attack_chain_machinery/New() +/datum/game_test/room_test/attack_chain_machinery/New() . = ..() for(var/turf/T in available_turfs) for(var/obj/machinery/machine in T) LAZYOR(machine_instances_by_type[machine.type], machine) -/datum/game_test/attack_chain_machinery/Run() +/datum/game_test/room_test/attack_chain_machinery/Run() var/datum/test_puppeteer/player = new(src) // Here we fucking go. There's a lot of machines and interactions to test diff --git a/code/tests/attack_chain/test_attack_chain_mobs.dm b/code/tests/attack_chain/test_attack_chain_mobs.dm index 3544f73f64b..d86fb5d9158 100644 --- a/code/tests/attack_chain/test_attack_chain_mobs.dm +++ b/code/tests/attack_chain/test_attack_chain_mobs.dm @@ -1,4 +1,4 @@ -/datum/game_test/attack_chain_mobs/Run() +/datum/game_test/room_test/attack_chain_mobs/Run() var/datum/test_puppeteer/player = new(src) player.puppet.name = "Player" // To ensure punches do damage without knockdowns @@ -115,6 +115,6 @@ // Even before this test, butchering items included a second attack message TEST_ASSERT_ANY_CHATLOG(player, "You hack off a chunk of meat from Victim") -/datum/game_test/attack_chain_mobs/proc/cancel_attack_chain(datum/source, mob/user) +/datum/game_test/room_test/attack_chain_mobs/proc/cancel_attack_chain(datum/source, mob/user) to_chat(user, "Attack chain cancelled by signal") return COMPONENT_CANCEL_ATTACK_CHAIN diff --git a/code/tests/attack_chain/test_attack_chain_reagent_containers.dm b/code/tests/attack_chain/test_attack_chain_reagent_containers.dm index 0aac3d0bc0c..94542d493f7 100644 --- a/code/tests/attack_chain/test_attack_chain_reagent_containers.dm +++ b/code/tests/attack_chain/test_attack_chain_reagent_containers.dm @@ -1,4 +1,4 @@ -/datum/game_test/attack_chain_applicator/Run() +/datum/game_test/room_test/attack_chain_applicator/Run() var/datum/test_puppeteer/player = new(src) var/datum/test_puppeteer/target = player.spawn_puppet_nearby() var/obj/item/reagent_containers/applicator/mender = player.spawn_obj_in_hand(/obj/item/reagent_containers/applicator/burn) @@ -32,7 +32,7 @@ items = list(/obj/item/food/grown/apple) result = /obj/item/food/badrecipe -/datum/game_test/attack_chain_condiment/Run() +/datum/game_test/room_test/attack_chain_condiment/Run() var/datum/test_puppeteer/player = new(src) var/obj/item/reagent_containers/saltshaker = player.spawn_obj_in_hand(/obj/item/reagent_containers/condiment/saltshaker) @@ -70,7 +70,7 @@ player.click_on(backpack) TEST_ASSERT_LAST_CHATLOG(player, "You put") -/datum/game_test/attack_chain_drinks/Run() +/datum/game_test/room_test/attack_chain_drinks/Run() var/datum/test_puppeteer/player = new(src) var/obj/structure/reagent_dispensers/watertank/watertank = player.spawn_obj_nearby(/obj/structure/reagent_dispensers/watertank) var/obj/item/reagent_containers/glass/bucket/bucket = player.spawn_obj_nearby(/obj/item/reagent_containers/glass/bucket) @@ -195,7 +195,7 @@ player.use_item_in_hand() TEST_ASSERT_LAST_CHATLOG(player, "The dancing flame on the flaming shot glass of Vodka dies out.") -/datum/game_test/attack_chain_medcontainers/Run() +/datum/game_test/room_test/attack_chain_medcontainers/Run() var/datum/test_puppeteer/player = new(src) var/datum/test_puppeteer/target = player.spawn_puppet_nearby() @@ -245,7 +245,7 @@ player.click_on(pill_bottle) TEST_ASSERT_LAST_CHATLOG(player, "You put [pill] into [pill_bottle].") -/datum/game_test/attack_chain_syringes/Run() +/datum/game_test/room_test/attack_chain_syringes/Run() var/datum/test_puppeteer/player = new(src) var/datum/test_puppeteer/target = player.spawn_puppet_nearby() @@ -272,7 +272,7 @@ player.click_on(beaker) TEST_ASSERT_LAST_CHATLOG(player, "You inject 5 units of the solution") -/datum/game_test/attack_chain_iv_bags/Run() +/datum/game_test/room_test/attack_chain_iv_bags/Run() var/datum/test_puppeteer/player = new(src) var/datum/test_puppeteer/target = player.spawn_puppet_nearby() @@ -298,7 +298,7 @@ player.click_on(beaker) TEST_ASSERT_LAST_CHATLOG(player, "You transfer 1 units of the solution to [beaker]") -/datum/game_test/attack_chain_chemistry_bags/Run() +/datum/game_test/room_test/attack_chain_chemistry_bags/Run() var/datum/test_puppeteer/player = new(src) var/obj/table = player.spawn_obj_nearby(/obj/structure/table) @@ -319,7 +319,7 @@ player.click_on(chem_bag) TEST_ASSERT_LAST_CHATLOG(player, "You put [patch] into [chem_bag]") -/datum/game_test/attack_chain_rags/Run() +/datum/game_test/room_test/attack_chain_rags/Run() var/datum/test_puppeteer/player = new(src) var/turf/simulated/floor/floor = get_turf(player.puppet) new/obj/effect/decal/cleanable/dirt(floor) @@ -333,7 +333,7 @@ player.click_on(target) TEST_ASSERT_LAST_CHATLOG(player, "You smother [target.puppet] with [rag]") -/datum/game_test/attack_chain_hyposprays/Run() +/datum/game_test/room_test/attack_chain_hyposprays/Run() var/datum/test_puppeteer/player = new(src) var/obj/autoinjector = player.spawn_obj_in_hand(/obj/item/reagent_containers/hypospray/autoinjector/stimpack) player.click_on_self() @@ -345,7 +345,7 @@ player.click_on(target) TEST_ASSERT_ANY_CHATLOG(player, "You inject [target] with [autoinjector]") -/datum/game_test/attack_chain_droppers/Run() +/datum/game_test/room_test/attack_chain_droppers/Run() var/datum/test_puppeteer/player = new(src) var/datum/test_puppeteer/target = player.spawn_puppet_nearby() var/obj/item/reagent_containers/dropper/dropper = player.spawn_obj_in_hand(/obj/item/reagent_containers/dropper) @@ -357,7 +357,7 @@ TEST_ASSERT_ANY_CHATLOG(player, "[player.puppet] drips something into [target.puppet]'s eyes") TEST_ASSERT_NOT_CHATLOG(player, "You cannot directly remove reagents from [target.puppet]") -/datum/game_test/attack_chain_spray/Run() +/datum/game_test/room_test/attack_chain_spray/Run() var/datum/test_puppeteer/player = new(src) var/obj/item/reagent_containers/spray/spray = player.spawn_obj_in_hand(/obj/item/reagent_containers/spray) var/obj/structure/table = player.spawn_obj_nearby(/obj/structure/table) diff --git a/code/tests/attack_chain/test_attack_chain_stunbaton.dm b/code/tests/attack_chain/test_attack_chain_stunbaton.dm index 755dce70b93..2966beafa0c 100644 --- a/code/tests/attack_chain/test_attack_chain_stunbaton.dm +++ b/code/tests/attack_chain/test_attack_chain_stunbaton.dm @@ -1,4 +1,4 @@ -/datum/game_test/attack_chain_stunbaton/Run() +/datum/game_test/room_test/attack_chain_stunbaton/Run() var/datum/test_puppeteer/player = new(src) var/datum/test_puppeteer/target = player.spawn_puppet_nearby() player.spawn_obj_in_hand(/obj/item/melee/baton/loaded) diff --git a/code/tests/attack_chain/test_attack_chain_turf.dm b/code/tests/attack_chain/test_attack_chain_turf.dm index 76997511e4b..1ad26f70efc 100644 --- a/code/tests/attack_chain/test_attack_chain_turf.dm +++ b/code/tests/attack_chain/test_attack_chain_turf.dm @@ -1,4 +1,4 @@ -/datum/game_test/attack_chain_turf/Run() +/datum/game_test/room_test/attack_chain_turf/Run() var/datum/test_puppeteer/player = new(src) var/area/admin_area = get_area(player.puppet) diff --git a/code/tests/attack_chain/test_attack_chain_vehicles.dm b/code/tests/attack_chain/test_attack_chain_vehicles.dm index 6b2588bc2be..0ddf83bc4b9 100644 --- a/code/tests/attack_chain/test_attack_chain_vehicles.dm +++ b/code/tests/attack_chain/test_attack_chain_vehicles.dm @@ -1,4 +1,4 @@ -/datum/game_test/attack_chain_vehicles/Run() +/datum/game_test/room_test/attack_chain_vehicles/Run() var/datum/test_puppeteer/player = new(src) var/obj/item/key/janitor/janicart_key = player.spawn_obj_in_hand(/obj/item/key/janitor) var/obj/vehicle/janicart/janicart = player.spawn_obj_nearby(/obj/vehicle/janicart) diff --git a/code/tests/attack_chain/test_attack_chain_watercloset.dm b/code/tests/attack_chain/test_attack_chain_watercloset.dm index e44dcf30501..9551068b624 100644 --- a/code/tests/attack_chain/test_attack_chain_watercloset.dm +++ b/code/tests/attack_chain/test_attack_chain_watercloset.dm @@ -1,4 +1,4 @@ -/datum/game_test/attack_chain_toilet/Run() +/datum/game_test/room_test/attack_chain_toilet/Run() var/datum/test_puppeteer/player = new(src) var/obj/structure/toilet/toilet = player.spawn_obj_nearby(/obj/structure/toilet, EAST) @@ -19,14 +19,14 @@ player.use_item_in_hand() player.put_away(flamethrower) - var/obj/item/crowbar = player.spawn_obj_in_hand(/obj/item/crowbar) + player.spawn_obj_in_hand(/obj/item/crowbar) player.click_on(toilet) TEST_ASSERT_LAST_CHATLOG(player, "You lift") player.puppet.swap_hand() player.click_on(toilet) player.click_on(toilet) TEST_ASSERT_LAST_CHATLOG(player, "The cistern is empty") - var/obj/item/storage/box = player.spawn_obj_in_hand(/obj/item/storage/box) + player.spawn_obj_in_hand(/obj/item/storage/box) player.click_on(toilet) TEST_ASSERT_LAST_CHATLOG(player, "You carefully") player.click_on(toilet) @@ -35,7 +35,7 @@ player.click_on(toilet) TEST_ASSERT_LAST_CHATLOG(player, "You replace") -/datum/game_test/attack_chain_shower/Run() +/datum/game_test/room_test/attack_chain_shower/Run() var/datum/test_puppeteer/player = new(src) var/obj/machinery/shower = player.spawn_obj_nearby(/obj/machinery/shower, EAST) @@ -65,7 +65,7 @@ player.put_away(welder) qdel(player) -/datum/game_test/attack_chain_sink/Run() +/datum/game_test/room_test/attack_chain_sink/Run() var/datum/test_puppeteer/player = new(src) var/obj/structure/sink = player.spawn_obj_nearby(/obj/structure/sink, SOUTH) diff --git a/code/tests/games/test_cards.dm b/code/tests/games/test_cards.dm index c74f52bc1a9..fe30d696e84 100644 --- a/code/tests/games/test_cards.dm +++ b/code/tests/games/test_cards.dm @@ -1,4 +1,4 @@ -/datum/game_test/card_deck/proc/validate_deck(obj/item/deck/deck) +/datum/game_test/room_test/card_deck/proc/validate_deck(obj/item/deck/deck) var/list/card_count = list() for(var/datum/playingcard/card in deck.cards) if(card_count[card.name] == null) @@ -14,7 +14,7 @@ return TRUE -/datum/game_test/card_deck/Run() +/datum/game_test/room_test/card_deck/Run() // setup var/loc = pick(available_turfs) var/obj/item/deck/cards/cards = allocate(/obj/item/deck/cards, loc) diff --git a/code/tests/test_aicard_icons.dm b/code/tests/test_aicard_icons.dm index b35e368d5b9..9efa1151d91 100644 --- a/code/tests/test_aicard_icons.dm +++ b/code/tests/test_aicard_icons.dm @@ -1,4 +1,4 @@ -/datum/game_test/aicard_icons/Run() +/datum/game_test/room_test/aicard_icons/Run() var/mob/living/silicon/ai/ai_box = allocate(/mob/living/silicon/ai) var/obj/item/aicard/int_card = allocate(/obj/item/aicard) diff --git a/code/tests/test_anti_drop.dm b/code/tests/test_anti_drop.dm index 5497d99d5fd..96d1a3a7c71 100644 --- a/code/tests/test_anti_drop.dm +++ b/code/tests/test_anti_drop.dm @@ -1,4 +1,4 @@ -/datum/game_test/anti_drop_implant/Run() +/datum/game_test/room_test/anti_drop_implant/Run() var/datum/test_puppeteer/player = new(src) var/obj/item/organ/internal/cyberimp/brain/anti_drop/anti_drop = new/obj/item/organ/internal/cyberimp/brain/anti_drop var/obj/item/autosurgeon/organ/syndicate/autosurg = player.spawn_obj_in_hand(/obj/item/autosurgeon/organ/syndicate) diff --git a/code/tests/test_ensure_subtree_operational_datum.dm b/code/tests/test_ensure_subtree_operational_datum.dm index 3b6cbf6b836..03250b3abf6 100644 --- a/code/tests/test_ensure_subtree_operational_datum.dm +++ b/code/tests/test_ensure_subtree_operational_datum.dm @@ -5,16 +5,16 @@ /// Unit Test that ensure that if we add a specific planning subtree to a basic mob's planning tree, that we also have the operational datum needed for it (component/element). /// This can be extended to other "mandatory" operational datums for certain subtrees to work. -/datum/game_test/ensure_subtree_operational_datum +/datum/game_test/room_test/ensure_subtree_operational_datum /// Associated list of mobs that we need to test this on. Key is the typepath of the mob, value is a list of the planning subtree and the operational datums that are required for it. var/list/testable_mobs = list() -/datum/game_test/ensure_subtree_operational_datum/Run() +/datum/game_test/room_test/ensure_subtree_operational_datum/Run() gather_testable_mobs() test_applicable_mobs() /// First, look for all mobs that have a planning subtree that requires an element, then add it to the list for stuff to test afterwards. Done like this to not have one mumbo proc that's hard to read. -/datum/game_test/ensure_subtree_operational_datum/proc/gather_testable_mobs() +/datum/game_test/room_test/ensure_subtree_operational_datum/proc/gather_testable_mobs() for(var/mob/living/basic/checkable_mob as anything in subtypesof(/mob/living/basic)) var/datum/ai_controller/testable_controller = initial(checkable_mob.ai_controller) if(isnull(testable_controller)) @@ -37,7 +37,7 @@ ) /// Then, test the mobs that we've found -/datum/game_test/ensure_subtree_operational_datum/proc/test_applicable_mobs() +/datum/game_test/room_test/ensure_subtree_operational_datum/proc/test_applicable_mobs() for(var/mob/living/basic/checkable_mob as anything in testable_mobs) var/list/checkable_mob_data = testable_mobs[checkable_mob] checkable_mob = allocate(checkable_mob) diff --git a/code/tests/test_runner.dm b/code/tests/test_runner.dm index 1bd2cf28781..3a91d9c09c8 100644 --- a/code/tests/test_runner.dm +++ b/code/tests/test_runner.dm @@ -27,7 +27,7 @@ // Run map tests first in case unit tests futz with map state RunMap() #endif - #ifdef GAME_TESTS + #if defined(GAME_TESTS) || defined(MAP_TESTS) Run() #endif SSticker.reboot_helper("Unit Test Reboot", "tests ended", 0) @@ -36,7 +36,7 @@ log_world("Test runner: game tests.") CHECK_TICK - for(var/I in subtypesof(/datum/game_test)) + for(var/I in subtypesof(/datum/game_test) - /datum/game_test/room_test) var/datum/game_test/test = new I test_logs[I] = list() @@ -95,9 +95,10 @@ QDEL_LIST_CONTENTS(tests) /datum/test_runner/proc/Finalize(emit_failures = FALSE) + set waitfor = FALSE + log_world("Test runner: finalizing.") var/time = world.timeofday - set waitfor = FALSE #ifdef LOCAL_GAME_TESTS emit_failures = TRUE diff --git a/code/tests/test_spawn_humans.dm b/code/tests/test_spawn_humans.dm index f7bb6c6cd22..1ca152af647 100644 --- a/code/tests/test_spawn_humans.dm +++ b/code/tests/test_spawn_humans.dm @@ -1,4 +1,4 @@ -/datum/game_test/spawn_humans/Run() +/datum/game_test/room_test/spawn_humans/Run() for(var/I in 1 to 5) allocate(/mob/living/carbon/human, pick(available_turfs))