Skip to content

Commit

Permalink
fix component template path and add test case
Browse files Browse the repository at this point in the history
  • Loading branch information
ipa-rwu committed Feb 8, 2024
1 parent b4cab03 commit 5852bd7
Show file tree
Hide file tree
Showing 3 changed files with 141 additions and 6 deletions.
23 changes: 17 additions & 6 deletions ros2model/api/model_generator/component_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,31 @@
Template_Folder = Path(__file__).parent.parent.parent.parent.resolve() / "templates"
Template = Path(Template_Folder / "component.ros2.j2")

Template_Folder_ROS = Path(get_package_share_directory("ros2model") + "/templates")
Template_ROS = Path(Template_Folder_ROS / "component.ros2.j2")

try:
from ament_index_python import get_package_share_directory

Template_Folder_ROS = Path(get_package_share_directory("ros2model") + "/templates")
Template_ROS = Path(Template_Folder_ROS / "component.ros2.j2")
except ImportError:
Template_ROS = None


class ComponentGenerator(GeneratorCore):
def __init__(self, template_path=None) -> None:
if template_path != None:
self.template_path = Path(template_path).resolve()
elif Template_ROS.is_file():
elif Template_ROS != None and Template_ROS.is_file():
self.template_path = Template
elif Template.is_file():
self.template_path = Template
else:
raise FileNotFoundError(
f"Can't find template either from {Template.absolute().as_posix()} or {Template_ROS.absolute().as_posix()}"
)
if Template_ROS != None:
raise FileNotFoundError(
f"Can't find template either from {Template.absolute().as_posix()} or {Template_ROS.absolute().as_posix()}"
)
else:
raise FileNotFoundError(
f"Can't find template either from {Template.absolute().as_posix()}"
)
super().__init__(self.template_path, ".ros2")
24 changes: 24 additions & 0 deletions test/outputs/test_model.ros2
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
test_model:
artifacts:
map_server:
node: /map_server
publishers:
'map_metadata':
type: 'nav_msgs/msg/MapMetaData'
'map':
type: 'nav_msgs/msg/OccupancyGrid'
actionservers:
'static_map':
type: 'nav_msgs/srv/GetMap'
actionclients:
'static_map':
type: 'nav_msgs/srv/GetMap'
serviceservers:
'static_map':
type: 'nav_msgs/srv/GetMap'
serviceclients:
'static_map':
type: 'nav_msgs/srv/GetMap'
parameters:
'shadows/min_angle':
type: Double
100 changes: 100 additions & 0 deletions test/unittest/test_generate_component.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
import unittest
from pathlib import Path

from ros2model.api.model_generator.component_generator import ComponentGenerator
from ros2model.core.metamodels.metamodel_ros import *

test_model = Package(
name="test_model",
artifact=[
Artifact(
name="map_server",
node=[
Node(
name=GraphName(
name="map_server",
namespace="/",
full_name="/map_server",
),
publisher=[
Publisher(name="map_metadata", type="nav_msgs/msg/MapMetaData"),
Publisher(name="map", type="nav_msgs/msg/OccupancyGrid"),
],
serviceserver=[
ServiceServer(name="static_map", type="nav_msgs/srv/GetMap")
],
serviceclient=[
ServiceClient(name="static_map", type="nav_msgs/srv/GetMap")
],
actionclient=[
ActionClient(name="static_map", type="nav_msgs/srv/GetMap")
],
actionserver=[
ActionServer(name="static_map", type="nav_msgs/srv/GetMap")
],
parameter=[
Parameter(
name="shadows/min_angle", type="Double", value="-1.52"
)
],
),
],
),
],
)

from devtools import pprint

pprint(test_model)

test_dir = "test"
output_folder = "outputs"

expect_result = """
test_model:
artifacts:
map_server:
node: /map_server
publishers:
'map_metadata':
type: 'nav_msgs/msg/MapMetaData'
'map':
type: 'nav_msgs/msg/OccupancyGrid'
actionservers:
'static_map':
type: 'nav_msgs/srv/GetMap'
actionclients:
'static_map':
type: 'nav_msgs/srv/GetMap'
serviceservers:
'static_map':
type: 'nav_msgs/srv/GetMap'
serviceclients:
'static_map':
type: 'nav_msgs/srv/GetMap'
parameters:
'shadows/min_angle':
type: Double
"""


class test_message_generator(unittest.TestCase):
def setUp(self) -> None:
self.generator = ComponentGenerator()
self.test_dir = Path(test_dir)
self.output_dir = Path(self.test_dir / output_folder)

def test_generate_pkg(self):
self.generator.generate_a_file(
model=test_model,
output_dir=self.output_dir,
filename=f"{test_model.name}",
)
with open(Path(self.output_dir / f"{test_model.name}.ros2"), "r") as file:
data = file.read()
self.assertEqual(expect_result.strip(), data.strip())


if __name__ == "__main__":
unittest.main()

0 comments on commit 5852bd7

Please sign in to comment.