Files
CHOMPStation2/code/unit_tests/cosmetic_tests.dm
CHOMPStation2StaffMirrorBot ba992cc896 [MIRROR] More cosmetic strictness (#10140)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Willburd <7099514+Willburd@users.noreply.github.com>
2025-02-11 07:16:31 +01:00

92 lines
3.2 KiB
Plaintext

/datum/unit_test/sprite_accessories_shall_be_unique
name = "COSMETICS: Entries shall have unique name."
/datum/unit_test/sprite_accessories_shall_be_unique/start_test()
var/failed = 0
failed += validate_accessory_list( /datum/sprite_accessory/ears)
failed += validate_accessory_list( /datum/sprite_accessory/facial_hair)
failed += validate_accessory_list( /datum/sprite_accessory/hair)
failed += validate_accessory_list( /datum/sprite_accessory/hair_accessory)
failed += validate_accessory_list( /datum/sprite_accessory/marking)
failed += validate_accessory_list( /datum/sprite_accessory/tail)
failed += validate_accessory_list( /datum/sprite_accessory/wing)
if(failed)
fail("One or more /datum/sprite_accessory definitions had invalid names, icon_states, or names were reused definitions")
else
pass("All /datum/sprite_accessory definitions had correct settings.")
return 1
/datum/unit_test/sprite_accessories_shall_be_unique/proc/validate_accessory_list(var/path)
var/failed = 0
var/total_good = 0
var/total_all = 0
var/list/collection = list()
for(var/SP in subtypesof(path))
total_all++
var/datum/sprite_accessory/A = new SP()
if(!A)
log_unit_test("[SP]: Cosmetic - Path resolved to null in list.")
continue
if(!A.name)
log_unit_test("[A] - [A.type]: Cosmetic - Missing name.")
failed = 1
if(A.name == DEVELOPER_WARNING_NAME)
continue
if(collection[A.name])
log_unit_test("[A] - [A.type]: Cosmetic - Name defined twice. Original def [collection[A.name]]")
failed = 1
else
collection[A.name] = A.type
if(istype(A,text2path("[path]/invisible")))
if(A.icon_state)
log_unit_test("[A] - [A.type]: Cosmetic - Invisible subtype has icon_state.")
failed = 1
else if(!A.icon_state)
log_unit_test("[A] - [A.type]: Cosmetic - Has no icon_state.")
failed = 1
else
// Check if valid icon
failed += validate_icons(A)
total_good++
qdel(A)
log_unit_test("[path]: Cosmetic - Total valid count: [total_good]/[total_all].")
return failed
/datum/unit_test/sprite_accessories_shall_be_unique/proc/validate_icons(var/datum/sprite_accessory/A)
var/failed = 0
var/actual_icon_state = A.icon_state
if(istype(A,/datum/sprite_accessory/hair))
actual_icon_state = "[A.icon_state]_s"
if(!(actual_icon_state in cached_icon_states(A.icon)))
log_unit_test("[A] - [A.type]: Cosmetic - Icon_state \"[actual_icon_state]\" is not present in [A.icon].")
failed = 1
if(istype(A,/datum/sprite_accessory/facial_hair))
actual_icon_state = "[A.icon_state]_s"
if(!(actual_icon_state in cached_icon_states(A.icon)))
log_unit_test("[A] - [A.type]: Cosmetic - Icon_state \"[actual_icon_state]\" is not present in [A.icon].")
failed = 1
if(istype(A,/datum/sprite_accessory/marking))
var/datum/sprite_accessory/marking/MA = A
for(var/BP in MA.body_parts)
if(!(BP in BP_ALL))
log_unit_test("[A] - [A.type]: Cosmetic - Has an illegal bodypart \"[BP]\". ONLY use parts listed in BP_ALL.")
failed = 1
actual_icon_state = "[A.icon_state]-[BP]"
if(!(actual_icon_state in cached_icon_states(A.icon)))
log_unit_test("[A] - [A.type]: Cosmetic - Icon_state \"[actual_icon_state]\" is not present in [A.icon].")
failed = 1
return failed