diff --git a/features/test/ros2/assets/minimal_package/CMakeLists.txt b/features/test/ros2/assets/minimal_package/CMakeLists.txt new file mode 100644 index 0000000..7c67ae5 --- /dev/null +++ b/features/test/ros2/assets/minimal_package/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.8) +project(devcontainers_minimal) + +find_package(ament_cmake REQUIRED) + +add_executable(devcontainers_minimal_node src/main.cpp) +install(TARGETS devcontainers_minimal_node DESTINATION lib/${PROJECT_NAME}) + +if(BUILD_TESTING) + find_package(ament_cmake_gtest REQUIRED) + ament_add_gtest(devcontainers_minimal_test test/test_main.cpp) +endif() + +ament_package() diff --git a/features/test/ros2/assets/minimal_package/package.xml b/features/test/ros2/assets/minimal_package/package.xml new file mode 100644 index 0000000..e6bcf2b --- /dev/null +++ b/features/test/ros2/assets/minimal_package/package.xml @@ -0,0 +1,15 @@ + + + devcontainers_minimal + 0.0.0 + Minimal package used to validate the ROS 2 development environment. + Devcontainers test + Apache-2.0 + + ament_cmake + ament_cmake_gtest + + + ament_cmake + + diff --git a/features/test/ros2/assets/minimal_package/src/main.cpp b/features/test/ros2/assets/minimal_package/src/main.cpp new file mode 100644 index 0000000..cf76d03 --- /dev/null +++ b/features/test/ros2/assets/minimal_package/src/main.cpp @@ -0,0 +1,7 @@ +#include + +int main() +{ + std::cout << "ROS 2 development environment is ready" << std::endl; + return 0; +} diff --git a/features/test/ros2/assets/minimal_package/test/test_main.cpp b/features/test/ros2/assets/minimal_package/test/test_main.cpp new file mode 100644 index 0000000..32f8580 --- /dev/null +++ b/features/test/ros2/assets/minimal_package/test/test_main.cpp @@ -0,0 +1,6 @@ +#include + +TEST(DevcontainersMinimal, BuildsAndRuns) +{ + EXPECT_EQ(2 + 2, 4); +} diff --git a/features/test/ros2/test.sh b/features/test/ros2/test.sh index 4646e8a..c52c94a 100755 --- a/features/test/ros2/test.sh +++ b/features/test/ros2/test.sh @@ -15,4 +15,22 @@ check "absent overlay does not break shell startup" bash -lc 'command -v ros2 >/ check "effective user bashrc sources ROS profile once" bash -lc 'test "$(grep -Fc "[ -f /etc/profile.d/ros2.sh ] && . /etc/profile.d/ros2.sh" /home/vscode/.bashrc)" -eq 1' check "colcon completion is enabled" bash -ic 'complete -p colcon >/dev/null' +test_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +workspace="/tmp/ros2_minimal_workspace" + +mkdir -p "${workspace}/src" +cp -R "${test_dir}/assets/minimal_package" "${workspace}/src/" +cd "${workspace}" + +check "rosdep metadata can be updated" rosdep update +check "workspace dependencies can be resolved" rosdep install --from-paths src --ignore-src --rosdistro "${ROS_DISTRO}" -y +check "minimal workspace builds" colcon build --event-handlers console_direct+ + +# shellcheck disable=SC1091 +source install/setup.bash + +check "minimal workspace tests run" colcon test --event-handlers console_direct+ +check "minimal workspace tests pass" colcon test-result --verbose +check "installed workspace executable runs" "${workspace}/install/devcontainers_minimal/lib/devcontainers_minimal/devcontainers_minimal_node" + reportResults