diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 223ea1b4bae..efbf15714a5 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -10,6 +10,10 @@ /// Optionally allows an additional message in the case of a failure #define TEST_ASSERT_EQUAL(a, b, message) if ((a) != (b)) { return Fail("Expected [isnull(a) ? "null" : a] to be equal to [isnull(b) ? "null" : b].[message ? " [message]" : ""]") } +/// Asserts that the two parameters passed are not equal, fails otherwise +/// Optionally allows an additional message in the case of a failure +#define TEST_ASSERT_NOTEQUAL(a, b, message) if ((a) == (b)) { return Fail("Expected [isnull(a) ? "null" : a] to not be equal to [isnull(b) ? "null" : b].[message ? " [message]" : ""]") } + #include "anchored_mobs.dm" #include "bespoke_id.dm" #include "binary_insert.dm" @@ -27,6 +31,7 @@ #include "plantgrowth_tests.dm" #include "quick_swap_sanity.dm" #include "reagent_id_typos.dm" +#include "reagent_mod_expose.dm" #include "reagent_mod_procs.dm" #include "reagent_recipe_collisions.dm" #include "resist.dm" @@ -42,4 +47,5 @@ #undef TEST_ASSERT #undef TEST_ASSERT_EQUAL +#undef TEST_ASSERT_NOTEQUAL #endif diff --git a/code/modules/unit_tests/reagent_mod_expose.dm b/code/modules/unit_tests/reagent_mod_expose.dm new file mode 100644 index 00000000000..a19a9409975 --- /dev/null +++ b/code/modules/unit_tests/reagent_mod_expose.dm @@ -0,0 +1,50 @@ +// testing the mob expose procs are working + +/datum/reagent/method_patch_test + name = "method patch test" + +/datum/reagent/method_patch_test/expose_mob(mob/living/target, methods = PATCH, reac_volume, show_message = TRUE) + . = ..() + if(methods & PATCH) + target.health = 90 + if(methods & INJECT) + target.health = 80 + +/datum/unit_test/reagent_mob_expose/Run() + var/mob/living/carbon/human/human = allocate(/mob/living/carbon/human) + var/obj/item/reagent_containers/dropper/dropper = allocate(/obj/item/reagent_containers/dropper) + var/obj/item/reagent_containers/food/drinks/drink = allocate(/obj/item/reagent_containers/food/drinks/bottle) + var/obj/item/reagent_containers/pill/patch/patch = allocate(/obj/item/reagent_containers/pill/patch) + var/obj/item/reagent_containers/syringe/syringe = allocate(/obj/item/reagent_containers/syringe) + + // INGEST + TEST_ASSERT_EQUAL(human.fire_stacks, 0, "Human has fire stacks before taking phlogiston") + drink.reagents.add_reagent(/datum/reagent/phlogiston, 10) + drink.attack(human, human) + TEST_ASSERT_EQUAL(human.fire_stacks, 1, "Human does not have fire stacks after taking phlogiston") + + // TOUCH + dropper.reagents.add_reagent(/datum/reagent/water, 1) + dropper.afterattack(human, human, TRUE) + TEST_ASSERT_EQUAL(human.fire_stacks, 0, "Human still has fire stacks after touching water") + + // VAPOR + TEST_ASSERT_EQUAL(human.drowsyness, 0, "Human is drowsy at the start of testing") + drink.reagents.clear_reagents() + drink.reagents.add_reagent(/datum/reagent/nitrous_oxide, 10) + drink.reagents.trans_to(human, 10, methods = VAPOR) + TEST_ASSERT_NOTEQUAL(human.drowsyness, 0, "Human is not drowsy after exposure to vapors") + + // PATCH + human.health = 100 + TEST_ASSERT_EQUAL(human.health, 100, "Human health did not set properly") + patch.reagents.add_reagent(/datum/reagent/method_patch_test, 1) + patch.self_delay = 0 + patch.attack(human, human) + TEST_ASSERT_EQUAL(human.health, 90, "Human health did not update after patch was applied") + + // INJECT + syringe.reagents.add_reagent(/datum/reagent/method_patch_test, 1) + syringe.mode = SYRINGE_INJECT + syringe.afterattack(human, human, TRUE) + TEST_ASSERT_EQUAL(human.health, 80, "Human health did not update after injection from syringe")