using System.Collections.Generic; using System.Linq; using System.Reflection; using Xunit; using P = AutoMiningScript.Program; namespace AutoMiningScript.Tests { public class OreSamplingTests { const BindingFlags Private=BindingFlags.Instance|BindingFlags.NonPublic; static void Sample(MinerStateTests.MinerRig r) {typeof(P.MinerController).GetMethod("SampleOre",Private).Invoke(r.Miner,null);} [Fact] public void MixedSampleConfirmsEveryOreIncludingStoneAndNonTargets() { var r=new MinerStateTests.MinerRig();r.Task(); r.Program.Config=new P.Settings("[Mining]\nTargetOres=Iron\nPriorityOres=Iron,Cobalt,Nickel,Silicon\n","miner","test"); var job=(P.Job)typeof(P.MinerController).GetField("job",Private).GetValue(r.Miner);job.TargetOre="Iron"; r.Resources.SamplingValid=true;r.Resources.Ores["Stone"]=100;r.Resources.Ores["Iron"]=10;r.Resources.Ores["Cobalt"]=3; Sample(r);Assert.DoesNotContain(r.Sent,p=>p.Kind=="RESULT");Sample(r); var report=P.JobReport.FromIni(Assert.Single(r.Sent,p=>p.Kind=="RESULT").Body); Assert.Equal("Discovery",report.Outcome);Assert.Equal(new[]{"Cobalt","Iron","Stone"},report.Ore.Split(',')); var discovered=(HashSet)typeof(P.MinerController).GetField("discovered",Private).GetValue(r.Miner); Assert.Equal(new[]{"Cobalt","Iron","Stone"},discovered.OrderBy(x=>x)); Sample(r);Assert.Single(r.Sent,p=>p.Kind=="RESULT"); } [Fact] public void InvalidInventorySampleCannotCreateOreDiscovery() { var r=new MinerStateTests.MinerRig();r.Task();r.Resources.SamplingValid=false;r.Resources.Ores["Stone"]=100; Sample(r);Sample(r);Assert.DoesNotContain(r.Sent,p=>p.Kind=="RESULT"); } } }