Files
VOREStation/code/modules/unit_tests/cosmetic_tests.dm
T
Cameron Lennox 9856c64443 Clothing fallback (#18258)
* Clothing fallback

Makes clothing have a fallback in the event of a custom species file not having the appropriate icon state.

* some logging

* testing

* swap all unit tests to use icon_exists

* Update poster_tests.dm

* Update clothing_tests.dm

* Update cosmetic_tests.dm

* Update robot_tests.dm

* whoop

* upgrades people, upgrades

* port these

* Update _atom.dm

* adjust all these

* Update clothing.dm

* TRUEFALSE
2025-08-19 20:42:42 -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