mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Willburd <7099514+Willburd@users.noreply.github.com>
92 lines
3.2 KiB
Plaintext
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
|