XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

AutoMiningScript

【SpaceEngineer】全自动挖矿脚本

公开
关注 0 Fork 0 Star 0
UTF-8
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<string>)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");
        }
    }
}