public void WarningsTest_ChecksCombiners() { var partProducers = new List <ITieredProducer>() { this.drill1, this.partFactory }; var combiners = new List <ITieredCombiner>() { this.combiner }; Dictionary <string, double> availableMixins = new Dictionary <string, double>() { { StubRocketPartCombiner.ExpectedInputResource, 100.0 } }; Dictionary <string, double> placeForOutput = new Dictionary <string, double>() { { StubRocketPartCombiner.ExpectedOutputResource, 100.0 } }; // Verify no false-positives. var actual = StaticAnalysis.CheckCombiners(colonizationResearch, partProducers, combiners, availableMixins, placeForOutput).ToList(); Assert.AreEqual(0, actual.Count); // Verify finds missing untiered input actual = StaticAnalysis.CheckCombiners(colonizationResearch, partProducers, combiners, this.emptyContainers, placeForOutput).ToList(); Assert.AreEqual(1, actual.Count); Assert.AreEqual("To produce Rocket Parts you will need to bring some Complex Parts.", actual[0].Message); // Verify finds missing tiered input actual = StaticAnalysis.CheckCombiners(colonizationResearch, new List <ITieredProducer>(), combiners, availableMixins, placeForOutput).ToList(); Assert.AreEqual(1, actual.Count); Assert.AreEqual("To produce Rocket Parts, you need produce LocalParts as input.", actual[0].Message); // Verify checks storage for output actual = StaticAnalysis.CheckCombiners(colonizationResearch, partProducers, combiners, availableMixins, new Dictionary <string, double>()).ToList(); Assert.AreEqual(1, actual.Count); Assert.AreEqual("There's no place to put the Rocket Parts this base is producing.", actual[0].Message); }