diff --git a/src/NmeaParser/Nmea/Gga.cs b/src/NmeaParser/Nmea/Gga.cs index c0d32f4..137489e 100644 --- a/src/NmeaParser/Nmea/Gga.cs +++ b/src/NmeaParser/Nmea/Gga.cs @@ -40,7 +40,8 @@ namespace NmeaParser.Messages FixTime = StringToTimeSpan(message[0]); Latitude = NmeaMessage.StringToLatitude(message[1], message[2]); Longitude = NmeaMessage.StringToLongitude(message[3], message[4]); - Quality = (Gga.FixQuality)int.Parse(message[5], CultureInfo.InvariantCulture); + if (!string.IsNullOrEmpty(message[5])) + Quality = (Gga.FixQuality)int.Parse(message[5], CultureInfo.InvariantCulture); if (!string.IsNullOrEmpty(message[6])) NumberOfSatellites = int.Parse(message[6], CultureInfo.InvariantCulture); Hdop = NmeaMessage.StringToDouble(message[7]); diff --git a/src/UnitTests/NmeaParser.Tests/NmeaMessages.cs b/src/UnitTests/NmeaParser.Tests/NmeaMessages.cs index 5c60c32..4154345 100644 --- a/src/UnitTests/NmeaParser.Tests/NmeaMessages.cs +++ b/src/UnitTests/NmeaParser.Tests/NmeaMessages.cs @@ -261,6 +261,28 @@ namespace NmeaParser.Tests Assert.AreEqual(0, gga.NumberOfSatellites); } + + [TestMethod] + public void TestGPGGA_Empty() + { + string input = "$GPGGA,,,,,,,,,,,,,,*56"; + var msg = NmeaMessage.Parse(input); + Assert.IsInstanceOfType(msg, typeof(Gga)); + Gga gga = (Gga)msg; + Assert.AreEqual(0, gga.NumberOfSatellites); + Assert.AreEqual(Gga.FixQuality.Invalid, gga.Quality); + Assert.IsTrue(double.IsNaN(gga.GeoidalSeparation)); + Assert.AreEqual(string.Empty, gga.GeoidalSeparationUnits); + Assert.IsTrue(double.IsNaN(gga.Longitude)); + Assert.IsTrue(double.IsNaN(gga.Latitude)); + Assert.IsTrue(double.IsNaN(gga.Altitude)); + Assert.AreEqual(string.Empty, gga.AltitudeUnits); + Assert.IsTrue(double.IsNaN(gga.Hdop)); + Assert.IsNull(gga.TimeSinceLastDgpsUpdate); + Assert.AreEqual(TimeSpan.Zero, gga.FixTime); + Assert.AreEqual(-1, gga.DgpsStationId); + } + [TestMethod] public void TestPtlna() {