From 91d0a73cd29cb1a262532fef25baf1f45d1b64ce Mon Sep 17 00:00:00 2001 From: Morten Date: Wed, 3 Aug 2022 13:55:04 -0700 Subject: [PATCH] Handle empty GGA message Fixes #105 --- src/NmeaParser/Nmea/Gga.cs | 3 ++- .../NmeaParser.Tests/NmeaMessages.cs | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) 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() {