diff --git a/.gitignore b/.gitignore
index 3769a4ab..5c9f39c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,6 @@
# Visual Studio Code files
.vscode
+
+# PyCache
+*.pyc
diff --git a/andino_description/CMakeLists.txt b/andino_description/CMakeLists.txt
index 16b4becc..0eacb21b 100644
--- a/andino_description/CMakeLists.txt
+++ b/andino_description/CMakeLists.txt
@@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.8)
project(andino_description)
find_package(ament_cmake REQUIRED)
+find_package(ament_cmake_python REQUIRED)
install(
DIRECTORY
@@ -14,4 +15,19 @@ install(
share/${PROJECT_NAME}/
)
+if(BUILD_TESTING)
+ find_package(ament_cmake_pytest REQUIRED)
+ set(_pytest_tests
+ test/test_xacro_processing.py
+ )
+ foreach(_test_path ${_pytest_tests})
+ get_filename_component(_test_name ${_test_path} NAME_WE)
+ ament_add_pytest_test(${_test_name} ${_test_path}
+ APPEND_ENV PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}
+ TIMEOUT 60
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ )
+ endforeach()
+endif()
+
ament_package()
diff --git a/andino_description/package.xml b/andino_description/package.xml
index 5d630556..20d4cac2 100644
--- a/andino_description/package.xml
+++ b/andino_description/package.xml
@@ -9,6 +9,7 @@
BSD Clause 3
ament_cmake
+ ament_cmake_python
joint_state_publisher_gui
robot_state_publisher
@@ -16,6 +17,9 @@
rviz2
xacro
+ ament_cmake_pytest
+ ament_index_python
+
ament_cmake
diff --git a/andino_description/test/test_xacro_processing.py b/andino_description/test/test_xacro_processing.py
new file mode 100644
index 00000000..6b3fe7fc
--- /dev/null
+++ b/andino_description/test/test_xacro_processing.py
@@ -0,0 +1,45 @@
+# BSD 3-Clause License
+
+# Copyright (c) 2024, Ekumen Inc.
+# All rights reserved.
+
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+
+# 1. Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+
+# 3. Neither the name of the copyright holder nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import os
+import pytest
+import xacro
+from ament_index_python.packages import get_package_share_directory
+
+def test_xacro_processing():
+ """Test main xacro file (andino.urdf.xacro) processing"""
+ # Get the file path.
+ xacro_file_path = os.path.join(get_package_share_directory("andino_description"), 'urdf', 'andino.urdf.xacro')
+
+ # Test xacro processing.
+ try:
+ xacro.process_file(xacro_file_path)
+ except Exception as e:
+ pytest.fail(f"Xacro processing failed: {e}")