@@ -80,6 +80,7 @@ class JsonTest : public testing::Test
8080 {
8181 BT::JsonExporter& exporter = BT::JsonExporter::get ();
8282 exporter.addConverter <TestTypes::Pose3D>();
83+ exporter.addConverter <std::vector<TestTypes::Pose3D>>();
8384 exporter.addConverter <TestTypes::Vector3D>();
8485 exporter.addConverter <TestTypes::Quaternion3D>();
8586
@@ -195,3 +196,64 @@ TEST_F(JsonTest, BlackboardInOut)
195196 ASSERT_EQ (vect_out.y , 2.2 );
196197 ASSERT_EQ (vect_out.z , 3.3 );
197198}
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