.. _program_listing_file__tmp_ws_src_rosidl_rosidl_typesupport_introspection_tests_include_rosidl_typesupport_introspection_tests_gtest_service_introspection_test.hpp: Program Listing for File service_introspection_test.hpp ======================================================= |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/rosidl/rosidl_typesupport_introspection_tests/include/rosidl_typesupport_introspection_tests/gtest/service_introspection_test.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // Copyright 2022 Open Source Robotics Foundation, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef ROSIDL_TYPESUPPORT_INTROSPECTION_TESTS__GTEST__SERVICE_INTROSPECTION_TEST_HPP_ #define ROSIDL_TYPESUPPORT_INTROSPECTION_TESTS__GTEST__SERVICE_INTROSPECTION_TEST_HPP_ #include #include "rosidl_typesupport_introspection_tests/gtest/shared_library_test.hpp" #include "rosidl_typesupport_introspection_tests/api.hpp" #include "rosidl_typesupport_introspection_tests/type_traits.hpp" #include "rosidl_typesupport_introspection_tests/types.hpp" namespace rosidl_typesupport_introspection_tests { namespace testing { template class ServiceIntrospectionTest : public SharedLibraryTest { public: using TypeSupportLibraryT = typename introspection_traits::TypeSupportLibraryT; using ServiceDescriptorT = typename TypeSupportLibraryT::ServiceDescriptorT; ServiceIntrospectionTest() : SharedLibraryTest(TypeSupportLibraryT::name) { } void SetUp() override { const char * typesupport_symbol = introspection_traits::typesupport.symbol; auto service_typesupport_fetch = reinterpret_cast( this->GetSharedLibrary().get_symbol(typesupport_symbol)); ASSERT_NE(service_typesupport_fetch, nullptr); const rosidl_service_type_support_t * service_typesupport = get_service_typesupport_handle( service_typesupport_fetch(), TypeSupportLibraryT::identifier); ASSERT_NE(service_typesupport, nullptr); service_descriptor_ = reinterpret_cast( service_typesupport->data); ASSERT_NE(service_descriptor_, nullptr); } const ServiceDescriptorT * GetServiceDescriptor() const { return service_descriptor_; } std::unique_ptr> MakeTypeErasedRequestMessage() const { using MessageDescriptorT = typename TypeSupportLibraryT::MessageDescriptorT; const MessageDescriptorT * request_message_descriptor = get_service_request_descriptor(service_descriptor_); using RequestMessageT = typename ServiceT::Request; std::allocator allocator; std::function type_erased_message_deleter = [ = ](void * ptr) mutable { finalize_message(ptr, request_message_descriptor); allocator.deallocate(reinterpret_cast(ptr), 1); }; std::unique_ptr> type_erased_message( initialize_message(allocator.allocate(1), request_message_descriptor), type_erased_message_deleter); return type_erased_message; } std::unique_ptr> MakeTypeErasedResponseMessage() const { using MessageDescriptorT = typename TypeSupportLibraryT::MessageDescriptorT; const MessageDescriptorT * response_message_descriptor = get_service_response_descriptor(service_descriptor_); using ResponseMessageT = typename ServiceT::Response; std::allocator allocator; std::function type_erased_message_deleter = [ = ](void * ptr) mutable { finalize_message(ptr, response_message_descriptor); allocator.deallocate(reinterpret_cast(ptr), 1); }; std::unique_ptr> type_erased_message( initialize_message(allocator.allocate(1), response_message_descriptor), type_erased_message_deleter); return type_erased_message; } private: const ServiceDescriptorT * service_descriptor_{nullptr}; }; } // namespace testing } // namespace rosidl_typesupport_introspection_tests #endif // ROSIDL_TYPESUPPORT_INTROSPECTION_TESTS__GTEST__SERVICE_INTROSPECTION_TEST_HPP_