📄
lib/tests/StandardHeaderTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
using Shouldly; namespace SharpDlt.Tests; public class StandardHeaderTests { [Fact] public void Parse_MinimalHeader() { var data = TestDlt.StandardHeader(length: 4, messageCounter: 7); var header = StandardHeader.Parse(data); header.UseExtendedHeader.ShouldBeFalse(); header.MsbFirst.ShouldBeFalse(); header.VersionNumber.ShouldBe(1); header.MessageCounter.ShouldBe((byte)7); header.Length.ShouldBe((ushort)4); header.EcuId.ShouldBeNull(); header.SessionId.ShouldBeNull(); header.Timestamp.ShouldBeNull(); header.ByteLength.ShouldBe(4); } [Fact] public void Parse_AllOptionalFields() { var data = TestDlt.StandardHeader( useExtendedHeader: true, msbFirst: true, versionNumber: 1, messageCounter: 42, length: 16, ecuId: "ECU1", sessionId: 0x11223344, timestamp: 0x55667788 ); var header = StandardHeader.Parse(data); header.UseExtendedHeader.ShouldBeTrue(); header.MsbFirst.ShouldBeTrue(); header.EcuId.ShouldBe("ECU1"); header.SessionId.ShouldBe(0x11223344u); header.Timestamp.ShouldBe(0x55667788u); header.ByteLength.ShouldBe(16); header.WithEcuId.ShouldBeTrue(); header.WithSessionId.ShouldBeTrue(); header.WithTimestamp.ShouldBeTrue(); } [Theory] [InlineData(false, false, null, null, null, 4)] [InlineData(false, false, "ECU1", null, null, 8)] [InlineData(true, true, "ECU1", 1u, null, 12)] [InlineData(true, true, "ECU1", 1u, 2u, 16)] public void Parse_RoundTripsHeaderType( bool useExtendedHeader, bool msbFirst, string? ecuId, uint? sessionId, uint? timestamp, int expectedByteLength ) { var data = TestDlt.StandardHeader( useExtendedHeader, msbFirst, ecuId: ecuId, sessionId: sessionId, timestamp: timestamp ); var header = StandardHeader.Parse(data); header.ByteLength.ShouldBe(expectedByteLength); header.HeaderType.ShouldBe(data[0]); } [Fact] public void Parse_LengthIsBigEndian() { var data = TestDlt.StandardHeader(length: 0x0102); StandardHeader.Parse(data).Length.ShouldBe((ushort)0x0102); data[2].ShouldBe((byte)0x01); data[3].ShouldBe((byte)0x02); } [Fact] public void ReadMessageLength_ReadsLengthWithoutParsingTheHeader() { var data = TestDlt.StandardHeader(length: 0x0123, ecuId: "ECU1"); StandardHeader.ReadMessageLength(data).ShouldBe((ushort)0x0123); } [Fact] public void Parse_TooShortData_Throws() { Should.Throw<DltParseException>(() => StandardHeader.Parse(new byte[3])); } [Fact] public void Parse_OptionalFieldsAnnouncedButMissing_Throws() { var data = TestDlt.StandardHeader(ecuId: "ECU1", timestamp: 1)[..8]; Should.Throw<DltParseException>(() => StandardHeader.Parse(data)); } }