@@ -57,7 +57,7 @@ TEST_CASE("Testing dbc file loading", "[fileio]") {
5757
5858 REQUIRE (parser->get_messages () == msgs);
5959
60- REQUIRE (parser->get_messages ().front ().signals () == msg.signals ());
60+ REQUIRE (parser->get_messages ().front ().getSignals () == msg.getSignals ());
6161 }
6262}
6363
@@ -80,13 +80,13 @@ TEST_CASE("Testing big endian, little endian") {
8080 parser.parse_file (filename);
8181
8282 REQUIRE (parser.get_messages ().size () == 1 );
83- REQUIRE (parser.get_messages ().at (0 ).signals ().size () == 2 );
83+ REQUIRE (parser.get_messages ().at (0 ).getSignals ().size () == 2 );
8484 {
85- const auto signal = parser.get_messages ().at (0 ).signals ().at (0 );
85+ const auto signal = parser.get_messages ().at (0 ).getSignals ().at (0 );
8686 REQUIRE (signal.is_bigendian == true );
8787 }
8888 {
89- const auto signal = parser.get_messages ().at (0 ).signals ().at (1 );
89+ const auto signal = parser.get_messages ().at (0 ).getSignals ().at (1 );
9090 REQUIRE (signal.is_bigendian == false );
9191 }
9292}
@@ -104,31 +104,31 @@ TEST_CASE("Testing negative values") {
104104 parser.parse_file (filename);
105105
106106 REQUIRE (parser.get_messages ().size () == 1 );
107- REQUIRE (parser.get_messages ().at (0 ).signals ().size () == 4 );
107+ REQUIRE (parser.get_messages ().at (0 ).getSignals ().size () == 4 );
108108
109109 SECTION (" Evaluating first message" ) {
110- const auto signal = parser.get_messages ().at (0 ).signals ().at (0 );
110+ const auto signal = parser.get_messages ().at (0 ).getSignals ().at (0 );
111111 REQUIRE (signal.factor == 0.1 );
112112 REQUIRE (signal.offset == 0 );
113113 REQUIRE (signal.min == -3276.8 );
114114 REQUIRE (signal.max == -3276.7 );
115115 }
116116 SECTION (" Evaluating second message" ) {
117- const auto signal = parser.get_messages ().at (0 ).signals ().at (1 );
117+ const auto signal = parser.get_messages ().at (0 ).getSignals ().at (1 );
118118 REQUIRE (signal.factor == 0.1 );
119119 REQUIRE (signal.offset == 0 );
120120 REQUIRE (signal.min == -3276.8 );
121121 REQUIRE (signal.max == -3276.7 );
122122 }
123123 SECTION (" Evaluating third message" ) {
124- const auto signal = parser.get_messages ().at (0 ).signals ().at (2 );
124+ const auto signal = parser.get_messages ().at (0 ).getSignals ().at (2 );
125125 REQUIRE (signal.factor == 10 );
126126 REQUIRE (signal.offset == 0 );
127127 REQUIRE (signal.min == -3276.8 );
128128 REQUIRE (signal.max == -3276.7 );
129129 }
130130 SECTION (" Evaluating fourth message" ) {
131- const auto signal = parser.get_messages ().at (0 ).signals ().at (3 );
131+ const auto signal = parser.get_messages ().at (0 ).getSignals ().at (3 );
132132 REQUIRE (signal.factor == 1 );
133133 REQUIRE (signal.offset == -10 );
134134 REQUIRE (signal.min == 0 );
@@ -146,9 +146,103 @@ TEST_CASE("Special characters in unit") {
146146 parser.parse_file (filename);
147147
148148 REQUIRE (parser.get_messages ().size () == 1 );
149- REQUIRE (parser.get_messages ().at (0 ).signals ().size () == 1 );
149+ REQUIRE (parser.get_messages ().at (0 ).getSignals ().size () == 1 );
150150 SECTION (" Checking that signal with special characters as unit is parsed correctly" ) {
151- const auto signal = parser.get_messages ().at (0 ).signals ().at (0 );
151+ const auto signal = parser.get_messages ().at (0 ).getSignals ().at (0 );
152152 REQUIRE (signal.unit .compare (" Km/h" ) == 0 );
153153 }
154154}
155+
156+ TEST_CASE (" Signal Value Description" ) {
157+ const auto * filename = std::tmpnam (NULL );
158+
159+ create_tmp_dbc_with (filename, R"( BO_ 234 MSG1: 8 Vector__XXX
160+ SG_ State1 : 0|8@1+ (1,0) [0|200] "Km/h" DEVICE1,DEVICE2,DEVICE3
161+ SG_ State2 : 0|8@1+ (1,0) [0|204] "" DEVICE1,DEVICE2,DEVICE3
162+ VAL_ 234 State1 123 "Description 1" 0 "Description 2" 90903489 "Big value and special characters &$§())!" ;)" );
163+
164+ auto parser = libdbc::DbcParser ();
165+ parser.parse_file (filename);
166+
167+ REQUIRE (parser.get_messages ().size () == 1 );
168+ REQUIRE (parser.get_messages ().at (0 ).getSignals ().size () == 2 );
169+
170+ REQUIRE (parser.get_messages ().at (0 ).getSignals ().at (0 ).svDescriptions .size () == 3 );
171+ REQUIRE (parser.get_messages ().at (0 ).getSignals ().at (1 ).svDescriptions .size () == 0 );
172+
173+ const auto signal = parser.get_messages ().at (0 ).getSignals ().at (0 );
174+ REQUIRE (signal.svDescriptions .at (0 ).value == 123 );
175+ REQUIRE (signal.svDescriptions .at (0 ).description == " Description 1" );
176+ REQUIRE (signal.svDescriptions .at (1 ).value == 0 );
177+ REQUIRE (signal.svDescriptions .at (1 ).description == " Description 2" );
178+ REQUIRE (signal.svDescriptions .at (2 ).value == 90903489 );
179+ REQUIRE (signal.svDescriptions .at (2 ).description == " Big value and special characters &$§())!" );
180+ }
181+
182+ TEST_CASE (" Signal Value Description Extended CAN id" ) {
183+ /*
184+ * It should not crash, even extended CAN id is used
185+ */
186+ const auto * filename = std::tmpnam (NULL );
187+
188+ create_tmp_dbc_with (filename, R"( BO_ 3221225472 MSG1: 8 Vector__XXX
189+ SG_ State1 : 0|8@1+ (1,0) [0|200] "Km/h" DEVICE1,DEVICE2,DEVICE3
190+ SG_ State2 : 0|8@1+ (1,0) [0|204] "" DEVICE1,DEVICE2,DEVICE3
191+ VAL_ 3221225472 State1 123 "Description 1" 0 "Description 2" 4000000000 "Big value and special characters &$§())!" ;)" );
192+
193+ auto parser = libdbc::DbcParser ();
194+ parser.parse_file (filename);
195+
196+ REQUIRE (parser.get_messages ().size () == 1 );
197+ REQUIRE (parser.get_messages ().at (0 ).getSignals ().size () == 2 );
198+
199+ REQUIRE (parser.get_messages ().at (0 ).getSignals ().at (0 ).svDescriptions .size () == 3 );
200+ REQUIRE (parser.get_messages ().at (0 ).getSignals ().at (1 ).svDescriptions .size () == 0 );
201+
202+ const auto signal = parser.get_messages ().at (0 ).getSignals ().at (0 );
203+ REQUIRE (signal.svDescriptions .at (0 ).value == 123 );
204+ REQUIRE (signal.svDescriptions .at (0 ).description == " Description 1" );
205+ REQUIRE (signal.svDescriptions .at (1 ).value == 0 );
206+ REQUIRE (signal.svDescriptions .at (1 ).description == " Description 2" );
207+ REQUIRE (signal.svDescriptions .at (2 ).value == 4000000000 );
208+ REQUIRE (signal.svDescriptions .at (2 ).description == " Big value and special characters &$§())!" );
209+ }
210+
211+ TEST_CASE (" Signal Value Multiple VAL_" ) {
212+ /*
213+ * It should not crash, even extended CAN id is used
214+ */
215+ const auto * filename = std::tmpnam (NULL );
216+
217+ create_tmp_dbc_with (filename, R"( BO_ 3221225472 MSG1: 8 Vector__XXX
218+ SG_ State1 : 0|8@1+ (1,0) [0|200] "Km/h" DEVICE1,DEVICE2,DEVICE3
219+ SG_ State2 : 0|8@1+ (1,0) [0|204] "" DEVICE1,DEVICE2,DEVICE3"
220+ BO_ 123 MSG1: 8 Vector__XXX
221+ SG_ State1 : 0|8@1+ (1,0) [0|200] "Km/h" DEVICE1,DEVICE2,DEVICE3
222+ SG_ State2 : 0|8@1+ (1,0) [0|204] "" DEVICE1,DEVICE2,DEVICE3
223+ VAL_ 3221225472 State1 123 "Description 1" 0 "Description 2" ;
224+ VAL_ 123 State1 123 "Description 3" 0 "Description 4" ;)" );
225+
226+ auto parser = libdbc::DbcParser ();
227+ parser.parse_file (filename);
228+
229+ REQUIRE (parser.get_messages ().size () == 2 );
230+ REQUIRE (parser.get_messages ().at (0 ).getSignals ().size () == 2 );
231+
232+ REQUIRE (parser.get_messages ().at (0 ).getSignals ().at (0 ).svDescriptions .size () == 2 );
233+ REQUIRE (parser.get_messages ().at (0 ).getSignals ().at (1 ).svDescriptions .size () == 0 );
234+ REQUIRE (parser.get_messages ().at (1 ).getSignals ().at (0 ).svDescriptions .size () == 2 );
235+ REQUIRE (parser.get_messages ().at (1 ).getSignals ().at (1 ).svDescriptions .size () == 0 );
236+
237+ const auto signal = parser.get_messages ().at (0 ).getSignals ().at (0 );
238+ REQUIRE (signal.svDescriptions .at (0 ).value == 123 );
239+ REQUIRE (signal.svDescriptions .at (0 ).description == " Description 1" );
240+ REQUIRE (signal.svDescriptions .at (1 ).value == 0 );
241+ REQUIRE (signal.svDescriptions .at (1 ).description == " Description 2" );
242+
243+ const auto signal2 = parser.get_messages ().at (1 ).getSignals ().at (0 );
244+ REQUIRE (signal2.svDescriptions .at (0 ).value == 123 );
245+ REQUIRE (signal2.svDescriptions .at (0 ).description == " Description 3" );
246+ REQUIRE (signal2.svDescriptions .at (1 ).value == 0 );
247+ REQUIRE (signal2.svDescriptions .at (1 ).description == " Description 4" );
248+ }
0 commit comments