Files
CHOMPStation2/code/modules/unit_tests/cosmetic_tests.dm
CHOMPStation2StaffMirrorBot 4f205c9197 [MIRROR] Clothing fallback (#11470)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
2025-08-19 21:38:30 -04:00

57 lines
2.9 KiB
Plaintext

/// converted unit test, maybe should be fully refactored
/// MIGHT REQUIRE BIGGER REWORK
/// Test that tests that all cosmetics have unique name entries
/datum/unit_test/sprite_accessories_shall_be_unique
/datum/unit_test/sprite_accessories_shall_be_unique/Run()
validate_accessory_list(/datum/sprite_accessory/ears)
validate_accessory_list(/datum/sprite_accessory/facial_hair)
validate_accessory_list(/datum/sprite_accessory/hair)
validate_accessory_list(/datum/sprite_accessory/hair_accessory)
validate_accessory_list(/datum/sprite_accessory/marking)
validate_accessory_list(/datum/sprite_accessory/tail)
validate_accessory_list(/datum/sprite_accessory/wing)
/datum/unit_test/sprite_accessories_shall_be_unique/proc/validate_accessory_list(path)
var/list/collection = list()
for(var/datum/sprite_accessory/accessory as anything in subtypesof(path))
if(accessory::name == DEVELOPER_WARNING_NAME)
continue
TEST_ASSERT(accessory::name, "[accessory::name] - [accessory::type]: Cosmetic - Missing name.")
TEST_ASSERT(!collection[accessory::name], "[accessory::name] - [accessory::type]: Cosmetic - Name defined twice. Original def [collection[accessory::name]]")
if(!collection[accessory::name])
collection[accessory::name] = accessory::type
if(ispath(accessory, text2path("[path]/invisible")))
TEST_ASSERT(!accessory::icon_state, "[accessory::name] - [accessory::type]: Cosmetic - Invisible subtype has icon_state.")
else if(!accessory::icon_state)
TEST_FAIL("[accessory::name] - [accessory::type]: Cosmetic - Has no icon_state.")
else
// Check if valid icon
validate_icons(accessory)
/datum/unit_test/sprite_accessories_shall_be_unique/proc/validate_icons(datum/sprite_accessory/accessory)
var/actual_icon_state = accessory::icon_state
if(istype(accessory, /datum/sprite_accessory/hair))
actual_icon_state += "_s"
TEST_ASSERT(icon_exists(accessory::icon, actual_icon_state), "[accessory::name] - [accessory::type]: Cosmetic - Icon_state \"[actual_icon_state]\" is not present in [accessory::icon].")
return
if(istype(accessory, /datum/sprite_accessory/facial_hair))
actual_icon_state += "_s"
TEST_ASSERT(icon_exists(accessory::icon, actual_icon_state), "[accessory::name] - [accessory::type]: Cosmetic - Icon_state \"[actual_icon_state]\" is not present in [accessory::icon].")
return
if(istype(accessory, /datum/sprite_accessory/marking))
var/datum/sprite_accessory/marking/marking = accessory
for(var/body_part in marking.body_parts)
TEST_ASSERT(body_part in BP_ALL, "[accessory::name] - [accessory::type]: Cosmetic - Has an illegal bodypart \"[body_part]\". ONLY use parts listed in BP_ALL.")
actual_icon_state = "[accessory::icon_state]-[body_part]"
TEST_ASSERT(icon_exists(accessory::icon, actual_icon_state), "[accessory::name] - [accessory::type]: Cosmetic - Icon_state \"[actual_icon_state]\" is not present in [accessory::icon].")
return