From 795df5dc0ee082e6966e1b0865a4adf7552c6dfd Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 17 May 2022 20:14:41 +0200 Subject: [PATCH] [MIRROR] Unit tests for default hydroponic seed gene setups [MDB IGNORE] (#13671) * Unit tests for default hydroponic seed gene setups (#67029) Adds a unit test that ensures the default list of genes for all plants is a valid setup. * Unit tests for default hydroponic seed gene setups Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> --- code/modules/unit_tests/_unit_tests.dm | 1 + .../unit_tests/hydroponics_validate_genes.dm | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 code/modules/unit_tests/hydroponics_validate_genes.dm diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index a811a20dfbe..f7998f43cb1 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -100,6 +100,7 @@ #include "holidays.dm" #include "hydroponics_harvest.dm" #include "hydroponics_self_mutations.dm" +#include "hydroponics_validate_genes.dm" #include "keybinding_init.dm" #include "load_map_security.dm" #include "machine_disassembly.dm" diff --git a/code/modules/unit_tests/hydroponics_validate_genes.dm b/code/modules/unit_tests/hydroponics_validate_genes.dm new file mode 100644 index 00000000000..90d22c57fd2 --- /dev/null +++ b/code/modules/unit_tests/hydroponics_validate_genes.dm @@ -0,0 +1,31 @@ +/// Unit test to ensure plants don't have multiple of a plant type at once by default. +/datum/unit_test/hydroponics_validate_genes + +/datum/unit_test/hydroponics_validate_genes/Run() + var/list/all_seeds = subtypesof(/obj/item/seeds) + + for(var/seed in all_seeds) + var/obj/item/seeds/instantiated_seed = new seed() + + var/all_trait_ids_we_have = NONE + for(var/datum/plant_gene/trait/trait_gene in instantiated_seed.genes) + // Check if our seed is blacklisted from this trait. + for(var/blacklisted_type in trait_gene.seed_blacklist) + if(!istype(instantiated_seed, blacklisted_type)) + continue + TEST_FAIL("[instantiated_seed] - [instantiated_seed.type] has a gene which blacklists its type. (Bad gene: [trait_gene] - [trait_gene.type])") + + // Check if we already have a trait id from another trait. + if(all_trait_ids_we_have & trait_gene.trait_ids) + TEST_FAIL("[instantiated_seed] - [instantiated_seed.type] has an invalid default gene configuration. (Found on: [trait_gene] - [trait_gene.type])") + + all_trait_ids_we_have |= trait_gene.trait_ids + + // Check if we have duplicate traits. + for(var/datum/plant_gene/trait/other_trait_gene in instantiated_seed.genes - trait_gene) + // Have to check for type exact, since subtypes may be valid with one another. + if(trait_gene.type != other_trait_gene.type) + continue + TEST_FAIL("[instantiated_seed] - [instantiated_seed.type] has a duplicate gene. (Duped gene: [trait_gene] - [trait_gene.type])") + + qdel(instantiated_seed)