mirror of
https://github.com/dotMorten/NmeaParser.git
synced 2025-12-06 07:12:04 +01:00
Fix a bug in the multi message, where the the index wasn't used to get the count/number
This commit is contained in:
parent
9cb711e6b2
commit
61ae5ade1f
|
|
@ -75,8 +75,8 @@ namespace NmeaParser.Nmea
|
|||
throw new ArgumentException("Invalid message", "message");
|
||||
|
||||
|
||||
int msgCount = int.Parse(message[0], CultureInfo.InvariantCulture);
|
||||
int msgNumber = int.Parse(message[1], CultureInfo.InvariantCulture);
|
||||
int msgCount = int.Parse(message[MessageCountIndex], CultureInfo.InvariantCulture);
|
||||
int msgNumber = int.Parse(message[MessageNumberIndex], CultureInfo.InvariantCulture);
|
||||
|
||||
if (initialized)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ using NmeaParser.Nmea;
|
|||
using System.Threading.Tasks;
|
||||
using System.IO;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using System.Reflection;
|
||||
|
||||
namespace NmeaParser.Tests
|
||||
{
|
||||
|
|
@ -815,7 +816,7 @@ namespace NmeaParser.Tests
|
|||
public void TestCustomMessageRegistration()
|
||||
{
|
||||
int count = NmeaMessage.RegisterAssembly(typeof(CustomMessage).Assembly, true);
|
||||
Assert.AreEqual(1, count);
|
||||
Assert.AreEqual(2, count);
|
||||
var input = "$PTEST,TEST*7C";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(CustomMessage));
|
||||
|
|
@ -828,8 +829,21 @@ namespace NmeaParser.Tests
|
|||
public void TestCustomMessageDuplicateRegistrationFailure()
|
||||
{
|
||||
int count = NmeaMessage.RegisterAssembly(typeof(CustomMessage).Assembly, true);
|
||||
Assert.AreEqual(1, count);
|
||||
count = NmeaMessage.RegisterAssembly(typeof(CustomMessage).Assembly, false); // This will throw
|
||||
Assert.AreEqual(2, count);
|
||||
NmeaMessage.RegisterAssembly(typeof(CustomMessage).Assembly, false); // This will throw
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestCustomMultiMessage()
|
||||
{
|
||||
NmeaMessage.RegisterNmeaMessage(typeof(CustomMultiMessage).GetTypeInfo(), "", true);
|
||||
var input1 = "$PTST2,2,1,123,A,B,C,D*2A";
|
||||
var input2 = "$PTST2,2,2,123,E,F,G,H*21";
|
||||
var msg1 = NmeaMessage.Parse(input1);
|
||||
var msg2 = NmeaMessage.Parse(input2, msg1 as IMultiSentenceMessage);
|
||||
Assert.IsInstanceOfType(msg2, typeof(CustomMultiMessage));
|
||||
var cmsg = (CustomMultiMessage)msg2;
|
||||
Assert.AreEqual(8, cmsg.Values.Count);
|
||||
}
|
||||
|
||||
[Nmea.NmeaMessageType("PTEST")]
|
||||
|
|
@ -841,5 +855,26 @@ namespace NmeaParser.Tests
|
|||
}
|
||||
public string Value { get; }
|
||||
}
|
||||
|
||||
[NmeaMessageType("PTST2")]
|
||||
private class CustomMultiMessage : NmeaMultiSentenceMessage, IMultiSentenceMessage
|
||||
{
|
||||
public CustomMultiMessage(string type, string[] parameters) : base(type, parameters)
|
||||
{
|
||||
}
|
||||
public string Id { get; private set; }
|
||||
public List<string> Values { get; } = new List<string>();
|
||||
protected override int MessageCountIndex => 0;
|
||||
protected override int MessageNumberIndex => 1;
|
||||
protected override bool ParseSentences(Talker talkerType, string[] message)
|
||||
{
|
||||
if (Id == null)
|
||||
Id = message[2]; //First time
|
||||
else if (Id != message[2])
|
||||
return false; // This message doesn't match previous message
|
||||
Values.AddRange(message.Skip(3));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue