Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#15 User defined attributes support #29

Merged
merged 9 commits into from
Mar 19, 2023
73 changes: 36 additions & 37 deletions DbcParserLib.Tests/DbcBuilderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public void SingleNodeIsAdded()
var dbc = builder.Build();

Assert.AreEqual(1, dbc.Nodes.Count());
Assert.AreEqual(node, dbc.Nodes.First());
Assert.AreEqual("nodeName", dbc.Nodes.First().Name);
}

[Test]
Expand All @@ -60,8 +60,8 @@ public void DuplicatedNodesAreSkipped()
var dbc = builder.Build();

Assert.AreEqual(2, dbc.Nodes.Count());
Assert.AreEqual(node, dbc.Nodes.First());
Assert.AreEqual(node2, dbc.Nodes.Skip(1).First());
Assert.AreEqual("nodeName", dbc.Nodes.First().Name);
Assert.AreEqual("nodeName2", dbc.Nodes.Skip(1).First().Name);
}

[Test]
Expand All @@ -75,7 +75,7 @@ public void NodeCommentIsAddedToNode()
var dbc = builder.Build();

Assert.AreEqual(1, dbc.Nodes.Count());
Assert.AreEqual(node, dbc.Nodes.First());
Assert.AreEqual("nodeName", dbc.Nodes.First().Name);
Assert.AreEqual("this is a comment", dbc.Nodes.First().Comment);
}

Expand All @@ -90,7 +90,7 @@ public void NodeCommentIsSkippedIfNodeIsNotFound()
var dbc = builder.Build();

Assert.AreEqual(1, dbc.Nodes.Count());
Assert.AreEqual(node, dbc.Nodes.First());
Assert.AreEqual("nodeName", dbc.Nodes.First().Name);
Assert.IsNull(dbc.Nodes.First().Comment);
}

Expand All @@ -104,7 +104,6 @@ public void MessageIsAdded()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
}

[Test]
Expand All @@ -118,7 +117,7 @@ public void CommentIsAddedToMessage()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.AreEqual("comment", dbc.Messages.First().Comment);
}

Expand All @@ -133,7 +132,7 @@ public void CommentIsNotAddedToMissingMessage()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.IsNull(dbc.Messages.First().Comment);
}

Expand Down Expand Up @@ -162,14 +161,14 @@ public void SignalIsAddedToCurrentMessage()
Assert.AreEqual(2, dbc.Messages.Count());

var messagesToArray = dbc.Messages.ToArray();
Assert.AreEqual(message1, messagesToArray[0]);
Assert.AreEqual(234, messagesToArray[0].ID);
Assert.AreEqual(1, messagesToArray[0].Signals.Count());
Assert.AreEqual(signal1, messagesToArray[0].Signals.First());
Assert.AreEqual("name1", messagesToArray[0].Signals.First().Name);

Assert.AreEqual(message2, messagesToArray[1]);
Assert.AreEqual(235, messagesToArray[1].ID);
Assert.AreEqual(2, messagesToArray[1].Signals.Count());
Assert.AreEqual(signal2, messagesToArray[1].Signals.First());
Assert.AreEqual(signal3, messagesToArray[1].Signals.Skip(1).First());
Assert.AreEqual("name2", messagesToArray[1].Signals.First().Name);
Assert.AreEqual("name3", messagesToArray[1].Signals.Skip(1).First().Name);
}

[Test]
Expand Down Expand Up @@ -197,8 +196,8 @@ public void CommentIsAddedToSignal()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(signal, dbc.Messages.First().Signals.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.AreEqual("name1", dbc.Messages.First().Signals.First().Name);
Assert.AreEqual("comment", dbc.Messages.First().Signals.First().Comment);
}

Expand All @@ -216,8 +215,8 @@ public void CommentIsNotAddedToMissingSignalMessageId()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(signal, dbc.Messages.First().Signals.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.AreEqual("name1", dbc.Messages.First().Signals.First().Name);
Assert.IsNull(dbc.Messages.First().Signals.First().Comment);
}

Expand All @@ -235,8 +234,8 @@ public void CommentIsNotAddedToMissingSignalName()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(signal, dbc.Messages.First().Signals.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.AreEqual("name1", dbc.Messages.First().Signals.First().Name);
Assert.IsNull(dbc.Messages.First().Signals.First().Comment);
}

Expand All @@ -255,8 +254,8 @@ public void TableValuesAreAddedToSignal()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(signal, dbc.Messages.First().Signals.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.AreEqual("name1", dbc.Messages.First().Signals.First().Name);
Assert.AreEqual(testValuesDict, dbc.Messages.First().Signals.First().ValueTableMap);
Assert.AreEqual("1 fake", dbc.Messages.First().Signals.First().ValueTable);
}
Expand All @@ -277,8 +276,8 @@ public void TableValuesWithExtendedMessageIdAreAddedToSignal()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(signal, dbc.Messages.First().Signals.First());
Assert.AreEqual(message.ID, dbc.Messages.First().ID);
Assert.AreEqual("name1", dbc.Messages.First().Signals.First().Name);
Assert.AreEqual(testValuesDict, dbc.Messages.First().Signals.First().ValueTableMap);
Assert.AreEqual("1 fake", dbc.Messages.First().Signals.First().ValueTable);
}
Expand All @@ -298,8 +297,8 @@ public void TableValueIsNotAddedToMissingSignalMessageId()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(signal, dbc.Messages.First().Signals.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.AreEqual("name1", dbc.Messages.First().Signals.First().Name);
Assert.IsNull(dbc.Messages.First().Signals.First().ValueTableMap);
Assert.IsNull(dbc.Messages.First().Signals.First().ValueTable);
}
Expand All @@ -319,8 +318,8 @@ public void TableValueIsNotAddedToMissingSignalName()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(signal, dbc.Messages.First().Signals.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.AreEqual("name1", dbc.Messages.First().Signals.First().Name);
Assert.IsNull(dbc.Messages.First().Signals.First().ValueTableMap);
Assert.IsNull(dbc.Messages.First().Signals.First().ValueTable);
}
Expand All @@ -342,8 +341,8 @@ public void NamedTableValuesAreAddedToSignal()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(signal, dbc.Messages.First().Signals.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.AreEqual("name1", dbc.Messages.First().Signals.First().Name);
Assert.AreEqual(testValuesDict, dbc.Messages.First().Signals.First().ValueTableMap);
Assert.AreEqual("1 fake", dbc.Messages.First().Signals.First().ValueTable);
}
Expand All @@ -365,8 +364,8 @@ public void NamedTableValueIsNotAddedToMissingSignalMessageId()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(signal, dbc.Messages.First().Signals.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.AreEqual("name1", dbc.Messages.First().Signals.First().Name);
Assert.IsNull(dbc.Messages.First().Signals.First().ValueTableMap);
Assert.IsNull(dbc.Messages.First().Signals.First().ValueTable);
}
Expand All @@ -388,8 +387,8 @@ public void NamedTableValueIsNotAddedToMissingSignalName()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(signal, dbc.Messages.First().Signals.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.AreEqual("name1", dbc.Messages.First().Signals.First().Name);
Assert.IsNull(dbc.Messages.First().Signals.First().ValueTableMap);
Assert.IsNull(dbc.Messages.First().Signals.First().ValueTable);
}
Expand All @@ -408,8 +407,8 @@ public void NamedTableValueIsNotAddedIfTableNameDoesNotExist()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(signal, dbc.Messages.First().Signals.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.AreEqual("name1", dbc.Messages.First().Signals.First().Name);
Assert.IsNull(dbc.Messages.First().Signals.First().ValueTable);
}

Expand Down Expand Up @@ -462,8 +461,8 @@ public void NamedTablesWithSameNameOverridesPrevious()

Assert.IsEmpty(dbc.Nodes);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(message, dbc.Messages.First());
Assert.AreEqual(signal, dbc.Messages.First().Signals.First());
Assert.AreEqual(234, dbc.Messages.First().ID);
Assert.AreEqual("name1", dbc.Messages.First().Signals.First().Name);
Assert.AreEqual(testValuesDict2, dbc.Messages.First().Signals.First().ValueTableMap);
Assert.AreEqual("2 fake2", dbc.Messages.First().Signals.First().ValueTable);
}
Expand Down
48 changes: 48 additions & 0 deletions DbcParserLib.Tests/ParserTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -282,5 +282,53 @@ public void ExplicitValTableIsAppliedTest()
Assert.IsNotNull(signal);
Assert.AreEqual(107, signal.ValueTable.Length);
}

[Test]
public void UserDefinedAttributesTest()
{
// This example is taken from kia_ev6.dbc
var dbcString = @"
BU_: XXX

BO_ 1043 BLINKERS: 8 XXX
SG_ COUNTER_ALT : 15|4@0+ (1,0) [0|15] """" XXX
SG_ LEFT_LAMP : 20|1@0+ (1,0) [0|1] """" XXX
SG_ RIGHT_LAMP : 22|1@0+ (1,0) [0|1] """" XXX

BA_DEF_ BU_ ""HexAttribute"" HEX 0 100;
BA_DEF_ BO_ ""IntegerAttribute"" INT 0 10;
BA_DEF_ BO_ ""FloatAttribute"" FLOAT 0 1;
BA_DEF_ SG_ ""StringAttribute"" STRING;
BA_DEF_ SG_ ""EnumAttributeName"" ENUM ""FirstVal"",""SecondVal"",""ThirdVal"";

BA_DEF_DEF_ ""HexAttribute"" 50;
BA_DEF_DEF_ ""IntegerAttribute"" 5;
BA_DEF_DEF_ ""FloatAttribute"" 0.5;
BA_DEF_DEF_ ""StringAttribute"" ""DefaultString"";
BA_DEF_DEF_ ""EnumAttributeName"" ""FirstVal"";

BA_ ""HexAttribute"" BU_ XXX 70;
BA_ ""IntegerAttribute"" BO_ 1043 7;
BA_ ""EnumAttributeName"" SG_ 1043 COUNTER_ALT ""ThirdVal""; ";

var dbc = Parser.Parse(dbcString);
Assert.AreEqual(1, dbc.Messages.Count());
Assert.AreEqual(1, dbc.Nodes.Count());

var node = dbc.Nodes.First();
Assert.AreEqual(1, node.CustomProperties.Count());
Assert.AreEqual(70, node.CustomProperties["HexAttribute"].IntegerCustomProperty.Value);

var message = dbc.Messages.First();
Assert.AreEqual(2, message.CustomProperties.Count());
Assert.AreEqual(7, message.CustomProperties["IntegerAttribute"].IntegerCustomProperty.Value);
Assert.AreEqual(0.5, message.CustomProperties["FloatAttribute"].FloatCustomProperty.Value);

var signal = dbc.Messages.Single().Signals.FirstOrDefault(x => x.Name.Equals("COUNTER_ALT"));
Assert.IsNotNull(signal);
Assert.AreEqual(2, signal.CustomProperties.Count());
Assert.AreEqual("ThirdVal", signal.CustomProperties["EnumAttributeName"].EnumCustomProperty.Value);
Assert.AreEqual("DefaultString", signal.CustomProperties["StringAttribute"].StringCustomProperty.Value);
}
}
}
Loading