Skip to content

Commit

Permalink
Merge pull request #29 from Whitehouse112/user-defined-attributes-sup…
Browse files Browse the repository at this point in the history
…port

#15 User defined attributes support
  • Loading branch information
Adhara3 committed Mar 19, 2023
2 parents 83221e8 + ec15a55 commit 92f0a67
Show file tree
Hide file tree
Showing 23 changed files with 875 additions and 142 deletions.
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

0 comments on commit 92f0a67

Please sign in to comment.