using System.Collections.Generic; using System.Reflection; using System.Runtime.Remoting; using Sandbox.ModAPI.Ingame; using VRageMath; using Xunit; using P=AutoMiningScript.Program; namespace AutoMiningScript.Tests { public class DockMotionWindowTests { static T Field(object value,string name) {return (T)value.GetType().GetField(name,BindingFlags.Instance|BindingFlags.NonPublic).GetValue(value);} [Fact] public void ConnectorImpulseIsFilteredButSustainedAccelerationAndActualVelocityRemainVisible() { var r=new FleetStateTests.Rig(1,false);Vector3D velocity=Vector3D.Zero; var controller=Field(r.Fleet,"controller"); ((Stub)RemotingServices.GetRealProxy(controller)).Method("GetShipVelocities",a=>new MyShipVelocities(velocity,Vector3D.Zero)); var frames=Field>(r.Fleet,"frames"); r.Tick(2);Assert.True(frames[100].IsWindow(r.Program.Config,r.Program.Now)); velocity=Vector3D.Right*.015;r.Tick(1); Assert.Equal(velocity,frames[100].PointVelocity(frames[100].Position)); Assert.InRange(frames[100].Acceleration.Length(),.02,.04); Assert.True(frames[100].IsWindow(r.Program.Config,r.Program.Now)); for(int n=0;n<5;n++){velocity+=Vector3D.Right*.05;r.Tick(1);} Assert.True(frames[100].Acceleration.Length()>.1); Assert.False(frames[100].IsWindow(r.Program.Config,r.Program.Now)); velocity=Vector3D.Right*6;r.Tick(1); Assert.Equal(6,frames[100].PointVelocity(frames[100].Position).Length()); Assert.False(frames[100].IsWindow(r.Program.Config,r.Program.Now)); } } }