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");
}
}
}
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");
}
}
}