@@ -80,6 +80,7 @@ class JsonTest : public testing::Test
80
80
{
81
81
BT::JsonExporter& exporter = BT::JsonExporter::get ();
82
82
exporter.addConverter <TestTypes::Pose3D>();
83
+ exporter.addConverter <std::vector<TestTypes::Pose3D>>();
83
84
exporter.addConverter <TestTypes::Vector3D>();
84
85
exporter.addConverter <TestTypes::Quaternion3D>();
85
86
@@ -195,3 +196,64 @@ TEST_F(JsonTest, BlackboardInOut)
195
196
ASSERT_EQ (vect_out.y , 2.2 );
196
197
ASSERT_EQ (vect_out.z , 3.3 );
197
198
}
199
+
200
+ TEST_F (JsonTest, VectorOfCustomTypes)
201
+ {
202
+ BT::JsonExporter& exporter = BT::JsonExporter::get ();
203
+
204
+ std::vector<TestTypes::Pose3D> poses (2 );
205
+ poses[0 ].pos .x = 1 ;
206
+ poses[0 ].pos .y = 2 ;
207
+ poses[0 ].pos .z = 3 ;
208
+ poses[0 ].rot .w = 4 ;
209
+ poses[0 ].rot .x = 5 ;
210
+ poses[0 ].rot .y = 6 ;
211
+ poses[0 ].rot .z = 7 ;
212
+ poses[1 ].pos .x = 8 ;
213
+ poses[1 ].pos .y = 9 ;
214
+ poses[1 ].pos .z = 10 ;
215
+ poses[1 ].rot .w = 11 ;
216
+ poses[1 ].rot .x = 12 ;
217
+ poses[1 ].rot .y = 13 ;
218
+ poses[1 ].rot .z = 14 ;
219
+
220
+ nlohmann::json json;
221
+ exporter.toJson (BT::Any (poses), json[" poses" ]);
222
+
223
+ std::cout << json.dump (2 ) << std::endl;
224
+
225
+ ASSERT_EQ (json[" poses" ][0 ][" __type" ], " Pose3D" );
226
+ ASSERT_EQ (json[" poses" ][0 ][" pos" ][" x" ], 1 );
227
+ ASSERT_EQ (json[" poses" ][0 ][" pos" ][" y" ], 2 );
228
+ ASSERT_EQ (json[" poses" ][0 ][" pos" ][" z" ], 3 );
229
+ ASSERT_EQ (json[" poses" ][0 ][" rot" ][" w" ], 4 );
230
+ ASSERT_EQ (json[" poses" ][0 ][" rot" ][" x" ], 5 );
231
+ ASSERT_EQ (json[" poses" ][0 ][" rot" ][" y" ], 6 );
232
+ ASSERT_EQ (json[" poses" ][0 ][" rot" ][" z" ], 7 );
233
+ ASSERT_EQ (json[" poses" ][1 ][" __type" ], " Pose3D" );
234
+ ASSERT_EQ (json[" poses" ][1 ][" pos" ][" x" ], 8 );
235
+ ASSERT_EQ (json[" poses" ][1 ][" pos" ][" y" ], 9 );
236
+ ASSERT_EQ (json[" poses" ][1 ][" pos" ][" z" ], 10 );
237
+ ASSERT_EQ (json[" poses" ][1 ][" rot" ][" w" ], 11 );
238
+ ASSERT_EQ (json[" poses" ][1 ][" rot" ][" x" ], 12 );
239
+ ASSERT_EQ (json[" poses" ][1 ][" rot" ][" y" ], 13 );
240
+ ASSERT_EQ (json[" poses" ][1 ][" rot" ][" z" ], 14 );
241
+
242
+ // check the two-ways transform, i.e. "from_json"
243
+ auto poses2 = exporter.fromJson (json[" poses" ])->first .cast <std::vector<TestTypes::Pose3D>>();
244
+ ASSERT_EQ (poses.size (), poses2.size ());
245
+ ASSERT_EQ (poses[0 ].pos .x , poses2[0 ].pos .x );
246
+ ASSERT_EQ (poses[0 ].pos .y , poses2[0 ].pos .y );
247
+ ASSERT_EQ (poses[0 ].pos .z , poses2[0 ].pos .z );
248
+ ASSERT_EQ (poses[0 ].rot .w , poses2[0 ].rot .w );
249
+ ASSERT_EQ (poses[0 ].rot .x , poses2[0 ].rot .x );
250
+ ASSERT_EQ (poses[0 ].rot .y , poses2[0 ].rot .y );
251
+ ASSERT_EQ (poses[0 ].rot .z , poses2[0 ].rot .z );
252
+ ASSERT_EQ (poses[1 ].pos .x , poses2[1 ].pos .x );
253
+ ASSERT_EQ (poses[1 ].pos .y , poses2[1 ].pos .y );
254
+ ASSERT_EQ (poses[1 ].pos .z , poses2[1 ].pos .z );
255
+ ASSERT_EQ (poses[1 ].rot .w , poses2[1 ].rot .w );
256
+ ASSERT_EQ (poses[1 ].rot .x , poses2[1 ].rot .x );
257
+ ASSERT_EQ (poses[1 ].rot .y , poses2[1 ].rot .y );
258
+ ASSERT_EQ (poses[1 ].rot .z , poses2[1 ].rot .z );
259
+ }
0 commit comments