Skip to content

Commit 654d6f5

Browse files
authored
Move rosidl_generator_c/cpp tests to a separate package (#701)
This decouples the dependency between the generator packages and rosidl_cmake. Signed-off-by: Jacob Perron <[email protected]>
1 parent b8381d9 commit 654d6f5

20 files changed

+647
-480
lines changed

rosidl_generator_c/CMakeLists.txt

Lines changed: 0 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -27,72 +27,7 @@ endif()
2727

2828
if(BUILD_TESTING)
2929
find_package(ament_lint_auto REQUIRED)
30-
find_package(test_interface_files REQUIRED)
31-
find_package(rosidl_runtime_c REQUIRED)
3230
ament_lint_auto_find_test_dependencies()
33-
34-
include(cmake/register_c.cmake)
35-
# Trick ament_target_dependencies() into thinking this package has been found
36-
set(rosidl_generator_c_FOUND "1")
37-
set(rosidl_generator_c_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
38-
39-
rosidl_generator_c_extras(
40-
"${CMAKE_CURRENT_SOURCE_DIR}/bin/rosidl_generator_c"
41-
"${CMAKE_CURRENT_SOURCE_DIR}/rosidl_generator_c/__init__.py"
42-
"${CMAKE_CURRENT_SOURCE_DIR}/resource"
43-
)
44-
45-
rosidl_generate_interfaces(${PROJECT_NAME}_interfaces
46-
${test_interface_files_MSG_FILES}
47-
ADD_LINTER_TESTS
48-
SKIP_INSTALL
49-
)
50-
51-
add_executable(test_compilation_c test/test_compilation.c test/separate_compilation.c)
52-
add_executable(test_interfaces_c test/test_interfaces.c)
53-
add_executable(test_invalid_initialization_c test/test_invalid_initialization.c)
54-
55-
ament_add_test(
56-
test_compilation_c
57-
COMMAND "$<TARGET_FILE:test_compilation_c>"
58-
GENERATE_RESULT_FOR_RETURN_CODE_ZERO
59-
)
60-
ament_add_test(
61-
test_interfaces_c
62-
COMMAND "$<TARGET_FILE:test_interfaces_c>"
63-
GENERATE_RESULT_FOR_RETURN_CODE_ZERO
64-
)
65-
ament_add_test(
66-
test_invalid_initialization_c
67-
COMMAND "$<TARGET_FILE:test_invalid_initialization_c>"
68-
GENERATE_RESULT_FOR_RETURN_CODE_ZERO
69-
)
70-
71-
# include the built files directly, instead of their install location
72-
target_link_libraries(test_compilation_c
73-
${PROJECT_NAME}_interfaces__${PROJECT_NAME}
74-
${rosidl_runtime_c_LIBRARIES}
75-
)
76-
target_include_directories(test_compilation_c PUBLIC
77-
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
78-
${rosidl_runtime_c_INCLUDE_DIRS}
79-
)
80-
target_link_libraries(test_interfaces_c
81-
${PROJECT_NAME}_interfaces__${PROJECT_NAME}
82-
${rosidl_runtime_c_LIBRARIES}
83-
)
84-
target_include_directories(test_interfaces_c PUBLIC
85-
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
86-
${rosidl_runtime_c_INCLUDE_DIRS}
87-
)
88-
target_link_libraries(test_invalid_initialization_c
89-
${PROJECT_NAME}_interfaces__${PROJECT_NAME}
90-
${rosidl_runtime_c_LIBRARIES}
91-
)
92-
target_include_directories(test_invalid_initialization_c PUBLIC
93-
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
94-
${rosidl_runtime_c_INCLUDE_DIRS}
95-
)
9631
endif()
9732

9833
ament_package(

rosidl_generator_c/package.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,8 @@
2626
<exec_depend>rosidl_parser</exec_depend>
2727
<exec_depend>rcutils</exec_depend>
2828

29-
<test_depend>ament_cmake_gtest</test_depend>
3029
<test_depend>ament_lint_auto</test_depend>
3130
<test_depend>ament_lint_common</test_depend>
32-
<test_depend>rosidl_cmake</test_depend>
33-
<test_depend>rosidl_runtime_c</test_depend>
34-
<test_depend>test_interface_files</test_depend>
3531

3632
<member_of_group>rosidl_generator_packages</member_of_group>
3733

rosidl_generator_cpp/CMakeLists.txt

Lines changed: 0 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -11,110 +11,7 @@ ament_python_install_package(${PROJECT_NAME})
1111

1212
if(BUILD_TESTING)
1313
find_package(ament_lint_auto REQUIRED)
14-
find_package(rosidl_runtime_c REQUIRED)
15-
find_package(rosidl_runtime_cpp REQUIRED)
16-
find_package(test_interface_files REQUIRED)
1714
ament_lint_auto_find_test_dependencies()
18-
19-
include(cmake/register_cpp.cmake)
20-
set(rosidl_generator_cpp_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
21-
22-
rosidl_generator_cpp_extras(
23-
"${CMAKE_CURRENT_SOURCE_DIR}/bin/rosidl_generator_cpp"
24-
"${CMAKE_CURRENT_SOURCE_DIR}/rosidl_generator_cpp/__init__.py"
25-
"${CMAKE_CURRENT_SOURCE_DIR}/resource"
26-
)
27-
28-
rosidl_generate_interfaces(${PROJECT_NAME}
29-
${test_interface_files_MSG_FILES}
30-
${test_interface_files_SRV_FILES}
31-
ADD_LINTER_TESTS
32-
SKIP_INSTALL
33-
)
34-
35-
# Default to C++17
36-
if(NOT CMAKE_CXX_STANDARD)
37-
set(CMAKE_CXX_STANDARD 17)
38-
endif()
39-
40-
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
41-
add_compile_options(-Wall -Wextra -Wpedantic)
42-
endif()
43-
44-
ament_add_gtest(test_msg_builder test/test_msg_builder.cpp)
45-
if(TARGET test_msg_builder)
46-
add_dependencies(test_msg_builder ${PROJECT_NAME})
47-
target_include_directories(test_msg_builder PUBLIC
48-
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME})
49-
ament_target_dependencies(test_msg_builder
50-
rosidl_runtime_cpp
51-
rosidl_runtime_c)
52-
endif()
53-
ament_add_gtest(test_msg_initialization test/test_msg_initialization.cpp)
54-
if(TARGET test_msg_initialization)
55-
add_dependencies(test_msg_initialization ${PROJECT_NAME})
56-
ament_target_dependencies(test_msg_initialization
57-
rosidl_runtime_cpp
58-
rosidl_runtime_c)
59-
target_include_directories(test_msg_initialization PUBLIC
60-
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
61-
)
62-
endif()
63-
ament_add_gtest(test_srv_initialization test/test_srv_initialization.cpp)
64-
if(TARGET test_srv_initialization)
65-
add_dependencies(test_srv_initialization ${PROJECT_NAME})
66-
ament_target_dependencies(test_srv_initialization
67-
rosidl_runtime_cpp
68-
rosidl_runtime_c)
69-
target_include_directories(test_srv_initialization PUBLIC
70-
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
71-
)
72-
endif()
73-
ament_add_gtest(test_interfaces_cpp test/test_interfaces.cpp)
74-
if(TARGET test_interfaces_cpp)
75-
add_dependencies(test_interfaces_cpp ${PROJECT_NAME})
76-
ament_target_dependencies(test_interfaces_cpp
77-
rosidl_runtime_cpp
78-
rosidl_runtime_c)
79-
target_include_directories(test_interfaces_cpp PUBLIC
80-
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
81-
)
82-
endif()
83-
ament_add_gtest(test_msg_datatype test/test_msg_datatype.cpp)
84-
if(TARGET test_msg_datatype)
85-
add_dependencies(test_msg_datatype ${PROJECT_NAME})
86-
ament_target_dependencies(test_msg_datatype
87-
rosidl_runtime_cpp
88-
rosidl_runtime_c)
89-
target_include_directories(test_msg_datatype PUBLIC
90-
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
91-
)
92-
endif()
93-
ament_add_gtest(test_name test/test_name.cpp)
94-
if(TARGET test_name)
95-
add_dependencies(test_name ${PROJECT_NAME})
96-
ament_target_dependencies(test_name
97-
rosidl_runtime_cpp
98-
rosidl_runtime_c)
99-
target_include_directories(test_name PUBLIC
100-
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
101-
)
102-
endif()
103-
if(MSVC)
104-
# https://developercommunity.visualstudio.com/content/problem/919371/c2017-illegal-escape-sequence-when-using-in-a-raw.html
105-
set_source_files_properties(
106-
test/test_traits.cpp PROPERTIES COMPILE_FLAGS "/Zc:preprocessor")
107-
endif()
108-
ament_add_gtest(test_traits test/test_traits.cpp)
109-
if(TARGET test_traits)
110-
add_dependencies(test_traits ${PROJECT_NAME})
111-
ament_target_dependencies(test_traits
112-
rosidl_runtime_cpp
113-
rosidl_runtime_c)
114-
target_include_directories(test_traits PUBLIC
115-
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}
116-
)
117-
endif()
11815
endif()
11916

12017
ament_package(

rosidl_generator_cpp/package.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,8 @@
2424
<exec_depend>rosidl_cli</exec_depend>
2525
<exec_depend>rosidl_parser</exec_depend>
2626

27-
<test_depend>ament_cmake_gtest</test_depend>
2827
<test_depend>ament_lint_auto</test_depend>
2928
<test_depend>ament_lint_common</test_depend>
30-
<test_depend>rosidl_cmake</test_depend>
31-
<test_depend>rosidl_runtime_cpp</test_depend>
32-
<test_depend>rosidl_runtime_c</test_depend>
33-
<test_depend>test_interface_files</test_depend>
3429

3530
<member_of_group>rosidl_generator_packages</member_of_group>
3631

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
cmake_minimum_required(VERSION 3.8)
2+
project(rosidl_generator_tests)
3+
4+
# Default to C++17
5+
if(NOT CMAKE_CXX_STANDARD)
6+
set(CMAKE_CXX_STANDARD 17)
7+
endif()
8+
9+
# Default to C11
10+
if(NOT CMAKE_C_STANDARD)
11+
set(CMAKE_C_STANDARD 11)
12+
endif()
13+
14+
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
15+
add_compile_options(-Wall -Wextra -Wpedantic)
16+
endif()
17+
18+
find_package(ament_cmake REQUIRED)
19+
20+
if(BUILD_TESTING)
21+
find_package(ament_cmake_gtest REQUIRED)
22+
find_package(ament_lint_auto REQUIRED)
23+
find_package(rosidl_cmake REQUIRED)
24+
find_package(rosidl_generator_cpp REQUIRED)
25+
find_package(rosidl_runtime_c REQUIRED)
26+
find_package(rosidl_runtime_cpp REQUIRED)
27+
find_package(test_interface_files REQUIRED)
28+
ament_lint_auto_find_test_dependencies()
29+
30+
rosidl_generate_interfaces(${PROJECT_NAME}
31+
${test_interface_files_MSG_FILES}
32+
${test_interface_files_SRV_FILES}
33+
ADD_LINTER_TESTS
34+
SKIP_INSTALL
35+
)
36+
37+
rosidl_get_typesupport_target(cpp_generator_target "${PROJECT_NAME}" "rosidl_generator_cpp")
38+
39+
macro(add_generator_cpp_test)
40+
ament_add_gtest(${test_name} test/rosidl_generator_cpp/${test_name}.cpp)
41+
if(TARGET ${test_name})
42+
add_dependencies(${test_name} ${PROJECT_NAME})
43+
target_link_libraries(${test_name}
44+
${cpp_generator_target}
45+
rosidl_runtime_cpp::rosidl_runtime_cpp
46+
)
47+
endif()
48+
endmacro()
49+
50+
if(MSVC)
51+
# https://developercommunity.visualstudio.com/content/problem/919371/c2017-illegal-escape-sequence-when-using-in-a-raw.html
52+
set_source_files_properties(
53+
test/rosidl_generator_cpp/test_traits.cpp PROPERTIES COMPILE_FLAGS "/Zc:preprocessor")
54+
endif()
55+
56+
set(generator_cpp_test_names
57+
test_msg_builder
58+
test_msg_initialization
59+
test_srv_initialization
60+
test_interfaces
61+
test_msg_datatype
62+
test_name
63+
test_traits
64+
)
65+
66+
foreach(test_name ${generator_cpp_test_names})
67+
add_generator_cpp_test()
68+
endforeach()
69+
70+
rosidl_get_typesupport_target(c_generator_target "${PROJECT_NAME}" "rosidl_generator_c")
71+
72+
add_executable(
73+
test_compilation_c
74+
test/rosidl_generator_c/test_compilation.c
75+
test/rosidl_generator_c/separate_compilation.c
76+
)
77+
ament_add_test(
78+
test_compilation_c
79+
COMMAND "$<TARGET_FILE:test_compilation_c>"
80+
GENERATE_RESULT_FOR_RETURN_CODE_ZERO
81+
)
82+
target_link_libraries(test_compilation_c
83+
${c_generator_target}
84+
rosidl_runtime_c::rosidl_runtime_c
85+
)
86+
87+
add_executable(test_interfaces_c test/rosidl_generator_c/test_interfaces.c)
88+
ament_add_test(
89+
test_interfaces_c
90+
COMMAND "$<TARGET_FILE:test_interfaces_c>"
91+
GENERATE_RESULT_FOR_RETURN_CODE_ZERO
92+
)
93+
target_link_libraries(test_interfaces_c
94+
${c_generator_target}
95+
rosidl_runtime_c::rosidl_runtime_c
96+
)
97+
98+
add_executable(
99+
test_invalid_initialization_c
100+
test/rosidl_generator_c/test_invalid_initialization.c
101+
)
102+
ament_add_test(
103+
test_invalid_initialization_c
104+
COMMAND "$<TARGET_FILE:test_invalid_initialization_c>"
105+
GENERATE_RESULT_FOR_RETURN_CODE_ZERO
106+
)
107+
target_link_libraries(test_invalid_initialization_c
108+
${c_generator_target}
109+
rosidl_runtime_c::rosidl_runtime_c
110+
)
111+
endif()
112+
113+
ament_package()

0 commit comments

Comments
 (0)