public void WhenRaisingTransponderDataReady_GivenFlightIsWithinAirspace_CreateFlightTrack_ThatASubscriperCanReceive(string rawData, string expTag, int expLat, int expLong, int expAlt)
        {
            // ARRANGE
            var transponderData = new List <string>();

            transponderData.Add(rawData);
            _fakeMonitoredAirspace.HasPositionWithinBoundaries(Arg.Any <Position>()).Returns(true);

            IFlightTrack persistedArgs = null;

            _sut.EnteredAirspace += (sender, e) =>
            {
                persistedArgs = e.FlightTrack;
            };

            //ACT
            _fakeTransponder.TransponderDataReady += Raise.EventWith(_fakeTransponder, new RawTransponderDataEventArgs(transponderData));

            // ASSERT
            Assert.That(persistedArgs.Tag, Is.Not.Null);
            Assert.That(persistedArgs.NavigationCourse, Is.EqualTo(double.NaN));
            Assert.That(persistedArgs.Velocity, Is.EqualTo(0));
            Assert.That(persistedArgs.LatestTime, Is.Not.EqualTo(DateTime.MinValue));

            Assert.That(persistedArgs.Tag, Is.EqualTo(expTag));
            Assert.That(persistedArgs.Position.Altitude, Is.EqualTo(expAlt));
            Assert.That(persistedArgs.Position.Latitude, Is.EqualTo(expLat));
            Assert.That(persistedArgs.Position.Longitude, Is.EqualTo(expLong));
        }
        private void UpdateFlightTracks(object sender, FlightRecordEventArgs e)
        {
            var flightUpdate = e.FlightRecord;

            if (_monitoredAirspace.HasPositionWithinBoundaries(flightUpdate.Position))
            {
                IFlightTrack updatedTrack;
                var          existingTrack = _tracks.Any(t => t.Tag == flightUpdate.Tag);
                if (existingTrack) // already in list
                {
                    updatedTrack = _tracks.SortRecordByTag(flightUpdate);
                    _view.AddToRenderWithColor(updatedTrack.ToString(), ConsoleColor.Yellow);
                }
                else
                {
                    updatedTrack = _tracks.SortRecordByTag(flightUpdate);
                    var args = new FlightTrackEventArgs(updatedTrack);
                    EnteredAirspace?.Invoke(this, args);
                }
                _handler.DetectCollision(_tracks);
                _handler.DetectCollision(_tracks);
            }
            else
            {
                var leftAirspaceTrack = _tracks.FirstOrDefault(t => t.Tag == flightUpdate.Tag);
                var leftairspacetrue  = _tracks.Any(t => t.Tag == flightUpdate.Tag);
                if (leftairspacetrue) // in list
                {
                    var args = new FlightTrackEventArgs(leftAirspaceTrack);
                    LeftAirspace?.Invoke(this, args);

                    _tracks.Remove(leftAirspaceTrack);
                }
            }
        }
예제 #3
0
        public void Call_DetectCollision()
        {
            // Arrange
            _fakeMonitoredAirspace.HasPositionWithinBoundaries(Arg.Any <Position>()).Returns(true);

            // Act
            var record = new FlightRecord()
            {
                Tag       = "test flight",
                Position  = new Position(20000, 20000, 19000),
                Timestamp = DateTime.MinValue
            };

            _fakeFlight.FlightRecordReceived += Raise.EventWith(_fakeFlight, new FlightRecordEventArgs(record));

            // Assert
            _fakeSeperation.Received().DetectCollision(Arg.Any <ICollection <IFlightTrack> >());
        }