mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-19 13:35:10 +00:00
## About The Pull Request One of the development hell cycles with mapping is how long it takes to fix quality or run issues with maps. By adding a prefix called "maptest_" to some of the unit tests it allows mappers to only target some tests instead of the usual 350+ tests to run each time or trying to trigger them individually and faffing. This does not rename the unit test files themselves to preserve history but just the "/datum/unit_test/" in each file. This does not break the current CI or obstruct other tests - A few other map files that call these tests specifically have been edited to point at the new datum name. This assumes you are using the TG testing extension to do this. | All Tests | maptest_ | |--------|--------| | <img width="426" height="106" alt="image" src="https://github.com/user-attachments/assets/d1d6f81e-16bd-473a-88da-e8b56f8bd3d0" /> | <img width="434" height="96" alt="image" src="https://github.com/user-attachments/assets/ea1c47fe-a6ce-40c6-b2cb-65b9c8e94a29" /> | | <img width="360" height="886" alt="image" src="https://github.com/user-attachments/assets/65bcd774-79ad-432e-8211-c67fb9d3e443" /> | <img width="370" height="833" alt="Screenshot 2025-10-01 204609" src="https://github.com/user-attachments/assets/ad360796-5698-42fd-bd2e-51de1a02ab87" /> | ## Why It's Good For The Game - Should make it easier for mappers to test locally, saving CI/Github resource for TG - Mappers can now test their work 56% faster ## Changelog 🆑 code: Mappers can now run just mapping unit tests - Should be 56% faster - Should have no player impact /🆑 Co-authored-by: loganuk <falseemail@aol.com>
66 lines
2.8 KiB
Plaintext
66 lines
2.8 KiB
Plaintext
/**
|
|
* Tests that all expected items are mapped in roundstart.
|
|
*
|
|
* How to add an item to this test:
|
|
* - Add the typepath(s) to setup_expected_types
|
|
* - In the type's initialize, REGISTER_REQUIRED_MAP_ITEM() a minimum and maximum
|
|
*/
|
|
/datum/unit_test/maptest_required_map_items
|
|
/// A list of all typepaths that we expect to be in the required items list
|
|
var/list/expected_types = list()
|
|
|
|
/// Used to fill the expected types list with all the types we look for on the map.
|
|
/// This list will just be full of typepaths that we expect.
|
|
/// More detailed information about each item (mainly, how much of each should exist) is set on a per item basis
|
|
/datum/unit_test/maptest_required_map_items/proc/setup_expected_types()
|
|
expected_types += subtypesof(/obj/item/stamp/head)
|
|
expected_types += subtypesof(/obj/machinery/modular_computer/preset/cargochat)
|
|
|
|
expected_types += /mob/living/basic/parrot/poly
|
|
expected_types += /mob/living/basic/pet/dog/corgi/ian
|
|
expected_types += /mob/living/carbon/human/species/monkey/punpun
|
|
expected_types += /obj/machinery/computer/communications
|
|
expected_types += /obj/machinery/drone_dispenser
|
|
expected_types += /obj/item/piggy_bank/vault
|
|
|
|
/datum/unit_test/maptest_required_map_items/Run()
|
|
setup_expected_types()
|
|
|
|
var/list/required_map_items = GLOB.required_map_items.Copy()
|
|
for(var/got_type in expected_types)
|
|
var/datum/required_item/item = required_map_items[got_type]
|
|
var/items_found = item?.total_amount || 0
|
|
required_map_items -= got_type
|
|
if(items_found <= 0)
|
|
TEST_FAIL("Item [got_type] was not found, but is expected to be mapped in on mapload!")
|
|
continue
|
|
|
|
if(items_found < item.minimum_amount)
|
|
TEST_FAIL("Item [got_type] should have at least [item.minimum_amount] mapped in but only had [items_found] on mapload!")
|
|
continue
|
|
|
|
if(items_found > item.maximum_amount)
|
|
TEST_FAIL("Item [got_type] should have at most [item.maximum_amount] mapped in but had [items_found] on mapload!")
|
|
continue
|
|
|
|
// This primarily serves as a reminder to include the typepath in the expected types list above.
|
|
// However we can easily delete this line in the future if it runs into false positives.
|
|
TEST_ASSERT(length(required_map_items) == 0, "The following paths were found in required map items, but weren't checked: [english_list(required_map_items)]")
|
|
|
|
/// Datum for tracking required map items
|
|
/datum/required_item
|
|
/// Type (exact) being tracked
|
|
var/tracked_type
|
|
/// How many exist in the world
|
|
var/total_amount = 0
|
|
/// Min. amount of this type that should exist roundstart (inclusive)
|
|
var/minimum_amount = 1
|
|
/// Max. amount of this type that should exist roundstart (inclusive)
|
|
var/maximum_amount = 1
|
|
|
|
/datum/required_item/New(tracked_type, minimum_amount = 1, maximum_amount = 1)
|
|
src.tracked_type = tracked_type
|
|
src.minimum_amount = minimum_amount
|
|
src.maximum_amount = maximum_amount
|
|
total_amount += 1
|