def test_publisher(self): node = CppParser("test", ["setup.py"]) code = 'ros::Publisher pub = nh.advertise<std_msgs::String>("topic_name", 5);' sub, brackets = node.extract_info(code, Publisher, node.publisher_regex) self.assertEqual(sub.name, "topic_name") self.assertEqual(sub.namespace, None) self.assertEqual(sub.datatype, "std_msgs/String") self.assertEqual(brackets, code) code = 'ros::Publisher pub = nh.advertise<std_msgs::String>("topic_name", 5, true);' sub, brackets = node.extract_info(code, Publisher, node.publisher_regex) self.assertEqual(sub.name, "topic_name") self.assertEqual(sub.namespace, None) self.assertEqual(sub.datatype, "std_msgs/String") self.assertEqual(brackets, code) code = 'nh.advertise<foo_msgs::Bar>(topic_name, 1,'\ ' SubscriberConnectCallback,'\ ' SubscriberDisconnectCallback,'\ ' VoidConstPtr(),'\ ' false)' sub, brackets = node.extract_info(code, Publisher, node.publisher_regex) self.assertEqual(sub.name, "topic_name") self.assertEqual(sub.namespace, None) self.assertEqual(sub.datatype, "foo_msgs/Bar") self.assertEqual(brackets, code)
def test_extract_params(self): # Just add setup.py as file to parse as a file is needed to instance # the parser but it is not really used here node = CppParser("test", ["setup.py"]) code = 'ros::param::param<std::string>("param1", param1, "default_value1");' param, brackets = node.extract_info(code, Parameter, node.param_regex) self.assertEqual(param.name, "param1") self.assertEqual(param.namespace, None) self.assertEqual(param.default_value, "default_value1") self.assertEqual(param.datatype, "std::string") self.assertEqual(brackets, code) code = 'ros::param::get("/param2", param2)' param, brackets = node.extract_info(code, Parameter, node.param_regex) self.assertEqual(param.name, "param2") self.assertEqual(param.namespace, "/") self.assertEqual(brackets, code) code = 'nh.getParam("param3", param3)' param, brackets = node.extract_info(code, Parameter, node.param_regex) self.assertEqual(param.name, "param3") self.assertEqual(param.namespace, None) self.assertEqual(brackets, code) self.assertEqual(param.default_value, None) code = 'nh.param<std::string>("param4", param4, defaultGenerator());' param, brackets = node.extract_info(code, Parameter, node.param_regex) self.assertEqual(param.name, "param4") self.assertEqual(param.namespace, None) self.assertEqual(param.default_value, "defaultGenerator()") self.assertEqual(param.datatype, "std::string") self.assertEqual(brackets, code)
def test_subscriber(self): node = CppParser("test", ["setup.py"]) code = 'm_start_stop_sub=m_glob_node_handle.subscribe("start_stop", 1,'\ '&PathLoader::startStopCallback, this) ' sub, brackets = node.extract_info(code, Subscriber, node.subscriber_regex) self.assertEqual(sub.name, "start_stop") self.assertEqual(brackets, code) code = 'ros::Subscriber sub = nh.subscribe<std_msgs::String>("my_topic", 1, callback);' sub, brackets = node.extract_info(code, Subscriber, node.subscriber_regex) self.assertEqual(sub.name, "my_topic") self.assertEqual(sub.namespace, None) self.assertEqual(sub.datatype, "std_msgs/String") self.assertEqual(brackets, code) code = """ros::Subscriber subscruber = nh.subscribe<std_msgs::String>("namespace/" "topic_name", 1, callback )""" sub, brackets = node.extract_info(code, Subscriber, node.subscriber_regex) self.assertEqual(sub.name, "topic_name") self.assertEqual(sub.namespace, "namespace/") self.assertEqual(sub.datatype, "std_msgs/String") self.assertEqual(brackets, code)
def test_service(self): node = CppParser("test", ["setup.py"]) code = 'ros::ServiceServer srv = nh.advertiseService<std_srvs::Empty::Request, '\ 'std_srvs::Empty::Response>("my_service", Foo);' service, brackets = node.extract_info(code, Service, node.service_regex) self.assertEqual(service.name, "my_service") self.assertEqual(service.namespace, None) self.assertEqual(service.datatype, "std_srvs/Empty") self.assertEqual(brackets, code) code = 'ros::ServiceServer service = nh.advertiseService("my_service", '\ '&Foo::callback, &foo_object);' service, brackets = node.extract_info(code, Service, node.service_regex) self.assertEqual(service.name, "my_service") self.assertEqual(brackets, code)
def test_extract_params_false(self): node = CppParser("test", ["setup.py"]) self.assertFalse( node.extract_info( ' ros_control_action_service = m_nh.resolveName(ros_control_action_service);', Parameter, node.param_regex)[0])
def test_service_clients(self): node = CppParser("test", ["setup.py"]) code = 'm_accept_path_client = '\ 'm_nh.serviceClient<follow_me_msgs::SetAdjustedPath>("/move_base/adjusted_plan");' service, brackets = node.extract_info(code, ServiceClient, node.service_client_regex) self.assertEqual(service.name, "adjusted_plan") self.assertEqual(service.namespace, "/move_base/") self.assertEqual(service.datatype, "follow_me_msgs/SetAdjustedPath") self.assertEqual(brackets, code) code = 'ros::service::call("my_service_name", std_srvs::Empty)' service, brackets = node.extract_info(code, ServiceClient, node.service_client_regex_alt) self.assertEqual(service.name, "my_service_name") self.assertEqual(service.namespace, None) self.assertEqual(service.datatype, "std_srvs/Empty") self.assertEqual(brackets, code)
def test_action_server(self): node = CppParser("test", ["setup.py"]) code = 'm_action_server = '\ 'new actionlib::SimpleActionServer<fzi_manipulation_msgs::PlayTrajectoryAction>'\ '("execute_trajectory", boost::bind(&PathLoader::executeCB, this), false);' action, brackets = node.extract_info(code, Action, node.action_regex) self.assertEqual(action.name, "execute_trajectory") self.assertEqual(action.namespace, None) self.assertEqual(action.datatype, "fzi_manipulation_msgs/PlayTrajectoryAction") self.assertEqual(brackets, code)
def test_action_client(self): node = CppParser("test", ["setup.py"]) code = 'm_ros_control_action_client = '\ 'new actionlib::SimpleActionClient<control_msgs::FollowJointTrajectoryAction>'\ '("controller_topic", true);' action, brackets = node.extract_info(code, ActionClient, node.action_client_regex) self.assertEqual(action.name, "controller_topic") self.assertEqual(action.namespace, None) self.assertEqual(action.datatype, "control_msgs/FollowJointTrajectoryAction") self.assertEqual(brackets, code)
def test_action_client_false(self): node = CppParser("test", ["setup.py"]) self.assertFalse( node.extract_info( ' ros_control_action_service = m_nh.resolveName(ros_control_action_service);', ActionClient, node.action_client_regex)[0])
def test_subscriber_false(self): node = CppParser("test", ["setup.py"]) self.assertFalse( node.extract_info( ' ros_control_action_service = m_nh.resolveName(ros_control_action_service);', Subscriber, node.subscriber_regex)[0])