diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index 7c3e74608b9..9b1891546fa 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -22,7 +22,7 @@ icon_state = sign.icon - if(sign.name) + if(sign.rename_area) name = "[initial(name)] ([sign.name])" else name = "[initial(name)]" @@ -30,7 +30,7 @@ if(sign.desc) desc = sign.desc - if(sign.rename_area && sign.name) + if(sign.rename_area) rename_area(src, sign.name) return sign @@ -138,15 +138,20 @@ var/list/names = list() for(var/d in subtypesof(/datum/barsign)) var/datum/barsign/D = d - if(initial(D.name) && !initial(D.hidden)) + if(!initial(D.hidden)) names += initial(D.name) . = names /datum/barsign - var/name = "Name" - var/icon = "Icon" - var/desc = "desc" + /// User-visible name of the sign. + var/name + /// Icon state associated with this sign + var/icon + /// Description shown in the sign's examine text. + var/desc + /// Hidden from list of selectable options. var/hidden = FALSE + /// Rename the area when this sign is selected. var/rename_area = TRUE /datum/barsign/New() @@ -304,7 +309,7 @@ /datum/barsign/hiddensigns/empbarsign - name = null + name = "EMP'd" icon = "empbarsign" desc = "Something has gone very wrong." rename_area = FALSE @@ -315,7 +320,7 @@ desc = "Syndicate or die." /datum/barsign/hiddensigns/signoff - name = null + name = "Off" icon = "empty" desc = "This sign doesn't seem to be on." rename_area = FALSE diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index cae65ca90d9..d6d3ea82af3 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -70,6 +70,7 @@ #include "anchored_mobs.dm" #include "anonymous_themes.dm" #include "autowiki.dm" +#include "barsigns.dm" #include "bespoke_id.dm" #include "binary_insert.dm" #include "bloody_footprints.dm" diff --git a/code/modules/unit_tests/barsigns.dm b/code/modules/unit_tests/barsigns.dm new file mode 100644 index 00000000000..70c0e355ea7 --- /dev/null +++ b/code/modules/unit_tests/barsigns.dm @@ -0,0 +1,37 @@ +/** + * Test if icon states for each datum actually exist in the DMI. + */ +/datum/unit_test/barsigns_icon + +/datum/unit_test/barsigns_icon/Run() + var/obj/structure/sign/barsign_type = /obj/structure/sign/barsign + var/icon/barsign_icon = initial(barsign_type.icon) + var/list/barsign_icon_states = icon_states(barsign_icon) + + // Check every datum real bar sign + for(var/sign_type in (subtypesof(/datum/barsign) - /datum/barsign/hiddensigns)) + var/datum/barsign/sign = new sign_type() + + if(!(sign.icon in barsign_icon_states)) + TEST_FAIL("Icon state for [sign_type] does not exist in [barsign_icon].") + +/** + * Check that bar signs have a name and desc, and that the name is unique. + */ +/datum/unit_test/barsigns_name + +/datum/unit_test/barsigns_name/Run() + var/list/existing_names = list() + + for(var/sign_type in subtypesof(/datum/barsign) - /datum/barsign/hiddensigns) + var/datum/barsign/sign = new sign_type() + + if(!sign.name) + TEST_FAIL("[sign_type] does not have a name.") + if(!sign.desc) + TEST_FAIL("[sign_type] does not have a desc.") + + if(sign.name in existing_names) + TEST_FAIL("[sign_type] does not have a unique name.") + + existing_names += sign.name