diff --git a/libuavcan/test/dsdl_test/dsdl_test.cpp b/libuavcan/test/dsdl_test/dsdl_test.cpp index 0b8aa1a5b0..0b1270cb49 100644 --- a/libuavcan/test/dsdl_test/dsdl_test.cpp +++ b/libuavcan/test/dsdl_test/dsdl_test.cpp @@ -42,6 +42,7 @@ TEST(Dsdl, EmptyServices) ASSERT_EQ(65504, resp.covariance[1]); } + TEST(Dsdl, Signature) { ASSERT_EQ(0xe74617107a34aa9c, root_ns_a::EmptyService::getDataTypeSignature().get()); @@ -52,3 +53,56 @@ TEST(Dsdl, Signature) ASSERT_EQ("root_ns_a.NestedMessage", root_ns_a::NestedMessage::getDataTypeFullName()); ASSERT_EQ(uavcan::DataTypeKindMessage, root_ns_a::NestedMessage::DataTypeKind); } + + +TEST(Dsdl, Registration) +{ + using uavcan::GlobalDataTypeRegistry; + /* + * Descriptors + */ + const uavcan::DataTypeDescriptor* desc = NULL; + + desc = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, "root_ns_a.EmptyMessage"); + ASSERT_TRUE(desc); + ASSERT_EQ(root_ns_a::EmptyMessage::DefaultDataTypeID, desc->getID()); + ASSERT_EQ(root_ns_a::EmptyMessage::DataTypeKind, desc->getKind()); + ASSERT_EQ(root_ns_a::EmptyMessage::getDataTypeSignature(), desc->getSignature()); + ASSERT_STREQ(root_ns_a::EmptyMessage::getDataTypeFullName(), desc->getFullName()); + + desc = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindService, "root_ns_a.EmptyService"); + ASSERT_TRUE(desc); + ASSERT_EQ(root_ns_a::EmptyService::DefaultDataTypeID, desc->getID()); + ASSERT_EQ(root_ns_a::EmptyService::DataTypeKind, desc->getKind()); + ASSERT_EQ(root_ns_a::EmptyService::getDataTypeSignature(), desc->getSignature()); + ASSERT_STREQ(root_ns_a::EmptyService::getDataTypeFullName(), desc->getFullName()); + + desc = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindService, "root_ns_a.ReportBackSoldier"); + ASSERT_TRUE(desc); + ASSERT_EQ(root_ns_a::ReportBackSoldier::DefaultDataTypeID, desc->getID()); + ASSERT_EQ(root_ns_a::ReportBackSoldier::DataTypeKind, desc->getKind()); + ASSERT_EQ(root_ns_a::ReportBackSoldier::getDataTypeSignature(), desc->getSignature()); + ASSERT_STREQ(root_ns_a::ReportBackSoldier::getDataTypeFullName(), desc->getFullName()); + + /* + * Mask + */ + uavcan::DataTypeIDMask mask; + + GlobalDataTypeRegistry::instance().getDataTypeIDMask(uavcan::DataTypeKindMessage, mask); + ASSERT_TRUE(mask[8]); + mask[8] = false; + ASSERT_FALSE(mask.any()); + + GlobalDataTypeRegistry::instance().getDataTypeIDMask(uavcan::DataTypeKindService, mask); + ASSERT_TRUE(mask[1]); + ASSERT_TRUE(mask[3]); + mask[1] = mask[3] = false; + ASSERT_FALSE(mask.any()); + + /* + * Reset + */ + GlobalDataTypeRegistry::instance().reset(); + ASSERT_FALSE(GlobalDataTypeRegistry::instance().isFrozen()); +}