def test_load_msg_depends_stamped(): # TODO: should there just be a 'load_msg, implicit=True?' from genmsg.msg_loader import MsgContext, load_msg_by_type, load_msg_depends test_d = get_test_dir() geometry_d = os.path.join(test_d, "geometry_msgs", "msg") search_path = { "test_ros": os.path.join(test_d, "test_ros", "msg"), "std_msgs": os.path.join(test_d, "std_msgs", "msg"), "geometry_msgs": geometry_d, "sensor_msgs": os.path.join(test_d, "sensor_msgs", "msg"), } # Test with Stamped and deeper hierarchies, Header msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, "geometry_msgs/PoseStamped", search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, "geometry_msgs", "msg", "PoseStamped.msg") assert file_p == msg_context.get_file("geometry_msgs/PoseStamped") val = msg_context.get_depends("geometry_msgs/PoseStamped") assert set(["std_msgs/Header", "geometry_msgs/Pose", "geometry_msgs/Point", "geometry_msgs/Quaternion"]) == set( val ), val for s in ["Header"]: file_p = os.path.join(test_d, "std_msgs", "msg", "%s.msg" % s) assert file_p == msg_context.get_file("std_msgs/%s" % s) for s in ["Pose", "Point", "Quaternion"]: file_p = os.path.join(geometry_d, "%s.msg" % s) assert file_p == msg_context.get_file("geometry_msgs/%s" % s) msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, "geometry_msgs/TwistWithCovarianceStamped", search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, "geometry_msgs", "msg", "TwistWithCovarianceStamped.msg") assert file_p == msg_context.get_file("geometry_msgs/TwistWithCovarianceStamped") val = msg_context.get_depends("geometry_msgs/TwistWithCovarianceStamped") assert set( ["std_msgs/Header", "geometry_msgs/TwistWithCovariance", "geometry_msgs/Twist", "geometry_msgs/Vector3"] ) == set(val), val for s in ["Header"]: file_p = os.path.join(test_d, "std_msgs", "msg", "%s.msg" % s) assert file_p == msg_context.get_file("std_msgs/%s" % s) for s in ["TwistWithCovariance", "Twist", "Vector3"]: file_p = os.path.join(geometry_d, "%s.msg" % s) assert file_p == msg_context.get_file("geometry_msgs/%s" % s) msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, "sensor_msgs/Imu", search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, "sensor_msgs", "msg", "Imu.msg") assert file_p == msg_context.get_file("sensor_msgs/Imu") val = msg_context.get_depends("sensor_msgs/Imu") assert set(["std_msgs/Header", "geometry_msgs/Quaternion", "geometry_msgs/Vector3"]) == set(val), val for s in ["Header"]: file_p = os.path.join(test_d, "std_msgs", "msg", "%s.msg" % s) assert file_p == msg_context.get_file("std_msgs/%s" % s) for s in ["Quaternion", "Vector3"]: file_p = os.path.join(geometry_d, "%s.msg" % s) assert file_p == msg_context.get_file("geometry_msgs/%s" % s)
def test_load_depends_msg(): from genmsg.msg_loader import MsgContext, load_msg_by_type, load_depends, MsgNotFound, load_srv_by_type test_d = get_test_dir() geometry_d = os.path.join(test_d, "geometry_msgs", "msg") msg_search_path = { "test_ros": os.path.join(test_d, "test_ros", "msg"), "std_msgs": os.path.join(test_d, "std_msgs", "msg"), "geometry_msgs": geometry_d, "sensor_msgs": os.path.join(test_d, "sensor_msgs", "msg"), "invalid": os.path.join(test_d, "invalid", "msg"), } # Test not found msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, "invalid/BadDepend", msg_search_path) try: load_depends(msg_context, root_spec, msg_search_path) assert False, "should have raised MsgNotFound" except MsgNotFound: pass root_spec = load_msg_by_type(msg_context, "invalid/BadLocalDepend", msg_search_path) try: load_depends(msg_context, root_spec, msg_search_path) assert False, "should have raised MsgNotFound" except MsgNotFound: pass # Test with msgs msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, "geometry_msgs/PoseStamped", msg_search_path) load_depends(msg_context, root_spec, msg_search_path) file_p = os.path.join(test_d, "geometry_msgs", "msg", "PoseStamped.msg") assert file_p == msg_context.get_file("geometry_msgs/PoseStamped") val = msg_context.get_depends("geometry_msgs/PoseStamped") assert set(["std_msgs/Header", "geometry_msgs/Pose", "geometry_msgs/Point", "geometry_msgs/Quaternion"]) == set( val ), val for s in ["Header"]: file_p = os.path.join(test_d, "std_msgs", "msg", "%s.msg" % s) assert file_p == msg_context.get_file("std_msgs/%s" % s) for s in ["Pose", "Point", "Quaternion"]: file_p = os.path.join(geometry_d, "%s.msg" % s) assert file_p == msg_context.get_file("geometry_msgs/%s" % s) msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, "sensor_msgs/Imu", msg_search_path) load_depends(msg_context, root_spec, msg_search_path) file_p = os.path.join(test_d, "sensor_msgs", "msg", "Imu.msg") assert file_p == msg_context.get_file("sensor_msgs/Imu") val = msg_context.get_depends("sensor_msgs/Imu") assert set(["std_msgs/Header", "geometry_msgs/Quaternion", "geometry_msgs/Vector3"]) == set(val), val for s in ["Header"]: file_p = os.path.join(test_d, "std_msgs", "msg", "%s.msg" % s) assert file_p == msg_context.get_file("std_msgs/%s" % s) for s in ["Quaternion", "Vector3"]: file_p = os.path.join(geometry_d, "%s.msg" % s) assert file_p == msg_context.get_file("geometry_msgs/%s" % s)
def test_load_depends_msg(): from genmsg.msg_loader import MsgContext, load_msg_by_type, load_depends, MsgNotFound, load_srv_by_type test_d = get_test_dir() geometry_d = os.path.join(test_d, 'geometry_msgs', 'msg') msg_search_path = { 'test_ros': [ os.path.join(test_d, 'test_ros', 'msg') ], 'std_msgs': [ os.path.join(test_d, 'std_msgs', 'msg') ], 'geometry_msgs': [ geometry_d ], 'sensor_msgs': [ os.path.join(test_d, 'sensor_msgs', 'msg') ], 'invalid': [ os.path.join(test_d, 'invalid', 'msg') ], } # Test not found msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'invalid/BadDepend', msg_search_path) try: load_depends(msg_context, root_spec, msg_search_path) assert False, "should have raised MsgNotFound" except MsgNotFound: pass root_spec = load_msg_by_type(msg_context, 'invalid/BadLocalDepend', msg_search_path) try: load_depends(msg_context, root_spec, msg_search_path) assert False, "should have raised MsgNotFound" except MsgNotFound: pass # Test with msgs msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'geometry_msgs/PoseStamped', msg_search_path) load_depends(msg_context, root_spec, msg_search_path) file_p = os.path.join(test_d, 'geometry_msgs', 'msg', 'PoseStamped.msg') assert file_p == msg_context.get_file('geometry_msgs/PoseStamped') val = msg_context.get_all_depends('geometry_msgs/PoseStamped') assert set(['std_msgs/Header', 'geometry_msgs/Pose', 'geometry_msgs/Point', 'geometry_msgs/Quaternion']) == set(val), val val = msg_context.get_depends('geometry_msgs/PoseStamped') assert set(['std_msgs/Header', 'geometry_msgs/Pose']) == set(val), val for s in ['Header']: file_p = os.path.join(test_d, 'std_msgs', 'msg', '%s.msg'%s) assert file_p == msg_context.get_file('std_msgs/%s'%s) for s in ['Pose', 'Point', 'Quaternion']: file_p = os.path.join(geometry_d, '%s.msg'%s) assert file_p == msg_context.get_file('geometry_msgs/%s'%s) msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'sensor_msgs/Imu', msg_search_path) load_depends(msg_context, root_spec, msg_search_path) file_p = os.path.join(test_d, 'sensor_msgs', 'msg', 'Imu.msg') assert file_p == msg_context.get_file('sensor_msgs/Imu') val = msg_context.get_depends('sensor_msgs/Imu') assert set(['std_msgs/Header', 'geometry_msgs/Quaternion', 'geometry_msgs/Vector3']) == set(val), val for s in ['Header']: file_p = os.path.join(test_d, 'std_msgs', 'msg', '%s.msg'%s) assert file_p == msg_context.get_file('std_msgs/%s'%s) for s in ['Quaternion', 'Vector3']: file_p = os.path.join(geometry_d, '%s.msg'%s) assert file_p == msg_context.get_file('geometry_msgs/%s'%s)
def test_load_msg_depends_stamped(): #TODO: should there just be a 'load_msg, implicit=True?' from genmsg.msg_loader import MsgContext, load_msg_by_type, load_msg_depends test_d = get_test_dir() geometry_d = os.path.join(test_d, 'geometry_msgs', 'msg') search_path = { 'test_ros': os.path.join(test_d, 'test_ros', 'msg'), 'std_msgs': os.path.join(test_d, 'std_msgs', 'msg'), 'geometry_msgs': geometry_d, 'sensor_msgs': os.path.join(test_d, 'sensor_msgs', 'msg'), } # Test with Stamped and deeper hierarchies, Header msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'geometry_msgs/PoseStamped', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'geometry_msgs', 'msg', 'PoseStamped.msg') assert file_p == msg_context.get_file('geometry_msgs/PoseStamped') val = msg_context.get_depends('geometry_msgs/PoseStamped') assert set(['std_msgs/Header', 'geometry_msgs/Pose', 'geometry_msgs/Point', 'geometry_msgs/Quaternion']) == set(val), val for s in ['Header']: file_p = os.path.join(test_d, 'std_msgs', 'msg', '%s.msg'%s) assert file_p == msg_context.get_file('std_msgs/%s'%s) for s in ['Pose', 'Point', 'Quaternion']: file_p = os.path.join(geometry_d, '%s.msg'%s) assert file_p == msg_context.get_file('geometry_msgs/%s'%s) msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'geometry_msgs/TwistWithCovarianceStamped', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'geometry_msgs', 'msg', 'TwistWithCovarianceStamped.msg') assert file_p == msg_context.get_file('geometry_msgs/TwistWithCovarianceStamped') val = msg_context.get_depends('geometry_msgs/TwistWithCovarianceStamped') assert set(['std_msgs/Header', 'geometry_msgs/TwistWithCovariance', 'geometry_msgs/Twist', 'geometry_msgs/Vector3']) == set(val), val for s in ['Header']: file_p = os.path.join(test_d, 'std_msgs', 'msg', '%s.msg'%s) assert file_p == msg_context.get_file('std_msgs/%s'%s) for s in ['TwistWithCovariance', 'Twist', 'Vector3']: file_p = os.path.join(geometry_d, '%s.msg'%s) assert file_p == msg_context.get_file('geometry_msgs/%s'%s) msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'sensor_msgs/Imu', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'sensor_msgs', 'msg', 'Imu.msg') assert file_p == msg_context.get_file('sensor_msgs/Imu') val = msg_context.get_depends('sensor_msgs/Imu') assert set(['std_msgs/Header', 'geometry_msgs/Quaternion', 'geometry_msgs/Vector3']) == set(val), val for s in ['Header']: file_p = os.path.join(test_d, 'std_msgs', 'msg', '%s.msg'%s) assert file_p == msg_context.get_file('std_msgs/%s'%s) for s in ['Quaternion', 'Vector3']: file_p = os.path.join(geometry_d, '%s.msg'%s) assert file_p == msg_context.get_file('geometry_msgs/%s'%s)
def load_all_subtypes(rosmsg_types): """ Args: rosmsg_types: List of ROS message types Return: Gets all the subtypes from a list of ROS message types and adds them to the GLOBAL_TYPE_LIST """ if NO_SUBTYPES: print "WARNING: --no-subtypes selected. Not generating subtypes" return print "Gathering subtypes for %d ROS message types" % len(rosmsg_types) msg_paths = get_rosmsg_paths(rosmsg_types) pkg_paths = get_rospkg_paths() for msgtype in rosmsg_types: # Should be iterating this types subtypes. msg_context = msg_loader.MsgContext() msgspec = msg_loader.load_msg_by_type(msg_context, msgtype, pkg_paths) for t in msgspec.types: get_subtypes(t, msg_paths, pkg_paths)
def test_complex_serializer_generator(): from genmsg.msg_loader import load_msg_by_type from genpy.generator import complex_serializer_generator, MsgGenerationException, reset_var array_d = os.path.join(get_test_dir(), 'array') complex_d = os.path.join(get_test_dir(), 'complex') # generator tests are mainly tripwires/coverage tests # array_serializer_generator(msg_context, package, type_, name, serialize, is_numpy): msg_context = MsgContext.create_default() # load in some objects search_path = {'foo': [array_d]} load_msg_by_type(msg_context, 'foo/Object', search_path) load_msg_by_type(msg_context, 'foo/ObjectArray', search_path) serialize = True is_numpy = False reset_var() result = complex_serializer_generator(msg_context, 'foo', 'foo/Object', 'data', serialize, is_numpy) compare_file(complex_d, 'object_ser.txt', result) reset_var() result = complex_serializer_generator(msg_context, 'foo', 'foo/Object[]', 'data', serialize, is_numpy) compare_file(array_d, 'object_varlen_ser.txt', result) reset_var() result = complex_serializer_generator(msg_context, 'foo', 'foo/Object[3]', 'data', serialize, is_numpy) compare_file(array_d, 'object_fixed_ser.txt', result) serialize = False reset_var() result = complex_serializer_generator(msg_context, 'foo', 'foo/Object[]', 'data', serialize, is_numpy) compare_file(array_d, 'object_varlen_deser.txt', result) reset_var() result = complex_serializer_generator(msg_context, 'foo', 'foo/Object[3]', 'data', serialize, is_numpy) compare_file(array_d, 'object_fixed_deser.txt', result) try: result = complex_serializer_generator(msg_context, 'foo', 'bad/Object', 'data', serialize, is_numpy) exhaust(result) assert False, 'should have raised' except MsgGenerationException: pass
def test_complex_serializer_generator(): from genmsg.msg_loader import load_msg_by_type from genpy.generator import complex_serializer_generator, MsgGenerationException, reset_var array_d = os.path.join(get_test_dir(), 'array') complex_d = os.path.join(get_test_dir(), 'complex') # generator tests are mainly tripwires/coverage tests #array_serializer_generator(msg_context, package, type_, name, serialize, is_numpy): msg_context = MsgContext.create_default() # load in some objects search_path = {'foo': [array_d]} load_msg_by_type(msg_context, 'foo/Object', search_path) load_msg_by_type(msg_context, 'foo/ObjectArray', search_path) serialize = True is_numpy = False reset_var() result = complex_serializer_generator(msg_context, 'foo', 'foo/Object', 'data', serialize, is_numpy) compare_file(complex_d, 'object_ser.txt', result) reset_var() result = complex_serializer_generator(msg_context, 'foo', 'foo/Object[]', 'data', serialize, is_numpy) compare_file(array_d, 'object_varlen_ser.txt', result) reset_var() result = complex_serializer_generator(msg_context, 'foo', 'foo/Object[3]', 'data', serialize, is_numpy) compare_file(array_d, 'object_fixed_ser.txt', result) serialize = False reset_var() result = complex_serializer_generator(msg_context, 'foo', 'foo/Object[]', 'data', serialize, is_numpy) compare_file(array_d, 'object_varlen_deser.txt', result) reset_var() result = complex_serializer_generator(msg_context, 'foo', 'foo/Object[3]', 'data', serialize, is_numpy) compare_file(array_d, 'object_fixed_deser.txt', result) try: result = complex_serializer_generator(msg_context, 'foo', 'bad/Object', 'data', serialize, is_numpy) exhaust(result) assert False, "should have raised" except MsgGenerationException: pass
def test_load_msg_depends(): # TODO: should there just be a 'load_msg, implicit=True?' from genmsg.msg_loader import MsgContext, load_msg_by_type, load_msg_depends, MsgNotFound test_d = get_test_dir() search_path = { "test_ros": os.path.join(test_d, "test_ros", "msg"), "std_msgs": os.path.join(test_d, "std_msgs", "msg"), "geometry_msgs": os.path.join(test_d, "geometry_msgs", "msg"), "sensor_msgs": os.path.join(test_d, "sensor_msgs", "msg"), "invalid": os.path.join(test_d, "invalid", "msg"), } # Test not found msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, "invalid/BadDepend", search_path) try: load_msg_depends(msg_context, root_spec, search_path) assert False, "should have raised MsgNotFound" except MsgNotFound: pass root_spec = load_msg_by_type(msg_context, "invalid/BadLocalDepend", search_path) try: load_msg_depends(msg_context, root_spec, search_path) assert False, "should have raised MsgNotFound" except MsgNotFound: pass msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, "std_msgs/Int32", search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, "std_msgs", "msg", "Int32.msg") assert file_p == msg_context.get_file("std_msgs/Int32") assert [] == msg_context.get_depends("std_msgs/Int32") msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, "std_msgs/Header", search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, "std_msgs", "msg", "Header.msg") assert file_p == msg_context.get_file("std_msgs/Header") assert [] == msg_context.get_depends("std_msgs/Header") msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, "Header", search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, "std_msgs", "msg", "Header.msg") assert file_p == msg_context.get_file("std_msgs/Header") assert [] == msg_context.get_depends("std_msgs/Header") msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, "std_msgs/Int32MultiArray", search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, "std_msgs", "msg", "Int32MultiArray.msg") assert file_p == msg_context.get_file("std_msgs/Int32MultiArray") val = msg_context.get_depends("std_msgs/Int32MultiArray") assert 2 == len(val) assert set(["std_msgs/MultiArrayLayout", "std_msgs/MultiArrayDimension"]) == set(val), val for s in ["MultiArrayLayout", "MultiArrayDimension"]: file_p = os.path.join(test_d, "std_msgs", "msg", "%s.msg" % s) assert file_p == msg_context.get_file("std_msgs/%s" % s)
def test_load_msg_depends(): #TODO: should there just be a 'load_msg, implicit=True?' from genmsg.msg_loader import MsgContext, load_msg_by_type, load_msg_depends, MsgNotFound test_d = get_test_dir() search_path = { 'test_ros': os.path.join(test_d, 'test_ros', 'msg'), 'std_msgs': os.path.join(test_d, 'std_msgs', 'msg'), 'geometry_msgs': os.path.join(test_d, 'geometry_msgs', 'msg'), 'sensor_msgs': os.path.join(test_d, 'sensor_msgs', 'msg'), 'invalid': os.path.join(test_d, 'invalid', 'msg'), } # Test not found msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'invalid/BadDepend', search_path) try: load_msg_depends(msg_context, root_spec, search_path) assert False, "should have raised MsgNotFound" except MsgNotFound: pass root_spec = load_msg_by_type(msg_context, 'invalid/BadLocalDepend', search_path) try: load_msg_depends(msg_context, root_spec, search_path) assert False, "should have raised MsgNotFound" except MsgNotFound: pass msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'std_msgs/Int32', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'std_msgs', 'msg', 'Int32.msg') assert file_p == msg_context.get_file('std_msgs/Int32') assert [] == msg_context.get_depends('std_msgs/Int32') msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'std_msgs/Header', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'std_msgs', 'msg', 'Header.msg') assert file_p == msg_context.get_file('std_msgs/Header') assert [] == msg_context.get_depends('std_msgs/Header') msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'Header', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'std_msgs', 'msg', 'Header.msg') assert file_p == msg_context.get_file('std_msgs/Header') assert [] == msg_context.get_depends('std_msgs/Header') msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'std_msgs/Int32MultiArray', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'std_msgs', 'msg', 'Int32MultiArray.msg') assert file_p == msg_context.get_file('std_msgs/Int32MultiArray') val = msg_context.get_depends('std_msgs/Int32MultiArray') assert 2 == len(val) assert set(['std_msgs/MultiArrayLayout', 'std_msgs/MultiArrayDimension']) == set(val), val for s in ['MultiArrayLayout', 'MultiArrayDimension']: file_p = os.path.join(test_d, 'std_msgs', 'msg', '%s.msg'%s) assert file_p == msg_context.get_file('std_msgs/%s'%s)
def test_serialize_fn_generator(): from genmsg.msg_loader import load_msg_by_type from genpy.generator import serialize_fn_generator, reset_var array_d = os.path.join(get_test_dir(), 'array') complex_d = os.path.join(get_test_dir(), 'complex') # generator tests are mainly tripwires/coverage tests # array_serializer_generator(msg_context, package, type_, name, serialize, is_numpy): msg_context = MsgContext.create_default() # load in some objects search_path = {'foo': [array_d]} object_spec = load_msg_by_type(msg_context, 'foo/Object', search_path) object_array_spec = load_msg_by_type(msg_context, 'foo/ObjectArray', search_path) is_numpy = False reset_var() result = serialize_fn_generator(msg_context, object_spec, is_numpy) compare_file(complex_d, 'object_ser_full.txt', result) reset_var() result = serialize_fn_generator(msg_context, object_array_spec, is_numpy) compare_file(array_d, 'object_varlen_ser_full.txt', result) reset_var()
def test_serialize_fn_generator(): from genmsg.msg_loader import load_msg_by_type from genpy.generator import serialize_fn_generator, reset_var array_d = os.path.join(get_test_dir(), 'array') complex_d = os.path.join(get_test_dir(), 'complex') # generator tests are mainly tripwires/coverage tests #array_serializer_generator(msg_context, package, type_, name, serialize, is_numpy): msg_context = MsgContext.create_default() # load in some objects search_path = {'foo': [array_d]} object_spec = load_msg_by_type(msg_context, 'foo/Object', search_path) object_array_spec = load_msg_by_type(msg_context, 'foo/ObjectArray', search_path) is_numpy = False reset_var() result = serialize_fn_generator(msg_context, object_spec, is_numpy) compare_file(complex_d, 'object_ser_full.txt', result) reset_var() result = serialize_fn_generator(msg_context, object_array_spec, is_numpy) compare_file(array_d, 'object_varlen_ser_full.txt', result) reset_var()
def get_subtypes(msg_type, msg_paths, pkg_paths): """ Given a ROS type, get all of its subtypes and populate it within the GLOBAL_TYPES_LIST. Note you shouldn't use this function outside of this file. :) Args: msg_type: Type to recurse into msg_paths: Path to /msg directories on your system pkg_paths: Path to ROS packages on the system Return: None """ # We don't want to recurse into atomic types. pkg = msg_type.split('/')[0] m = get_base_type(msg_type) qual_type = pkg + "/" + m if m in msgs.BUILTIN_TYPES: #print "MSG_TYPE: %s is BUILTIN TYPE. IGNORING" % m return 1 elif qual_type in GLOBAL_TYPES_LIST: #print "MSG_TYPE: %s ALREADY LOADED. IGNORING." % qual_type return 1 elif qual_type is None: #print "MSG_TYPE: None" return 1 GLOBAL_TYPES_LIST.append(qual_type) msg_context = msg_loader.MsgContext() msgspec = msg_loader.load_msg_by_type(msg_context, qual_type, pkg_paths) print "Adding type %s to processing list" % qual_type if msgspec.types is not None: if len(msgspec.types): for msg_type in msgspec.types: #if msg_type.endswith(']'): # msg_type = msg_type.split('[')[0] pkg = msg_type.split('/')[0] m = get_base_type(msg_type) if (m in GLOBAL_BLACKLIST) or (pkg in GLOBAL_BLACKLIST): print "WARNING! %s is listed in the global blacklist but is a requirement for %s" % (m, msg_type) get_subtypes(msg_type, msg_paths, pkg_paths)
def generate_schema(message_type, pkg_paths, directory_path=""): """ Generates a schema for a given ROS message type. Args: message_type: The ROS message type in format package/Type pkg_paths: ROS Package Paths directory_path: Output directory path Return: None """ # What do we need from a message_type? We need its MsgSpec/MsgContext. msg_context = msg_loader.MsgContext() msgspec = msg_loader.load_msg_by_type(msg_context, message_type, pkg_paths) variables = get_schema_variables_from_msgspec(msgspec) # DONE imports = get_schema_imports_from_msgspec(msgspec) # DONE hex_id = get_random_hex_id(); # Done template = resolve_schema(msgspec.short_name, variables, imports, hex_id) outdir = directory_path if not os.path.exists(outdir): os.mkdir(outdir) type_dirname = message_type.split('/')[0] filename = msgspec.short_name + ".capnp" filepath = outdir + "/" + filename #if not os.path.isdir(filepath): # os.mkdir(filepath) # Disabled for now until I figure out how to handle the Capnp imports. #filenamepath = filepath + "/" + filename with open(filepath, 'w') as ostream: print "Generating schema (.capnp) file for %s " % message_type ostream.write(template) ostream.close() return
def test_load_msg_by_type(): from genmsg.msg_loader import load_msg_by_type, MsgContext, MsgNotFound test_d = get_test_dir() geometry_d = os.path.join(test_d, 'geometry_msgs', 'msg') test_ros_dir = os.path.join(test_d, 'test_ros', 'msg') test_string_path = os.path.join(test_ros_dir, 'TestString.msg') search_path = { 'test_ros': [test_ros_dir], 'geometry_msgs': [geometry_d], } msg_context = MsgContext.create_default() msgspec = load_msg_by_type(msg_context, 'test_ros/TestString', search_path) _validate_TestString(msgspec) # supposed to register assert msg_context.is_registered('test_ros/TestString'), msg_context # test invalid search path try: load_msg_by_type(msg_context, 'test_ros/TestString', [test_string_path]) assert False, "should have raised" except ValueError: pass # test not found try: load_msg_by_type(msg_context, 'test_ros/Fake', search_path) assert False, "should have raised" except MsgNotFound: pass # test all the known geometry msgs test_d = get_test_dir() for f in os.listdir(geometry_d): if f.endswith('.msg'): short = f[:-4] msg_type = 'geometry_msgs/%s' % short spec = load_msg_by_type(msg_context, msg_type, search_path) assert spec is not None assert spec.package == 'geometry_msgs' assert spec.full_name == msg_type assert spec.short_name == short with open(os.path.join(geometry_d, f)) as file_h: assert spec.text == file_h.read() # all types with 'Stamped' in name have headers if 'Stamped' in f: assert spec.has_header(), msg_type
def test_load_msg_by_type(): from genmsg.msg_loader import load_msg_by_type, MsgContext, MsgNotFound test_d = get_test_dir() geometry_d = os.path.join(test_d, 'geometry_msgs', 'msg') test_ros_dir = os.path.join(test_d, 'test_ros', 'msg') test_string_path = os.path.join(test_ros_dir, 'TestString.msg') search_path = { 'test_ros': [ test_ros_dir ], 'geometry_msgs': [ geometry_d ], } msg_context = MsgContext.create_default() msgspec = load_msg_by_type(msg_context, 'test_ros/TestString', search_path) _validate_TestString(msgspec) # supposed to register assert msg_context.is_registered('test_ros/TestString'), msg_context # test invalid search path try: load_msg_by_type(msg_context, 'test_ros/TestString', [test_string_path]) assert False, "should have raised" except ValueError: pass # test not found try: load_msg_by_type(msg_context, 'test_ros/Fake', search_path) assert False, "should have raised" except MsgNotFound: pass # test all the known geometry msgs test_d = get_test_dir() for f in os.listdir(geometry_d): if f.endswith('.msg'): short = f[:-4] msg_type = 'geometry_msgs/%s'%short spec = load_msg_by_type(msg_context, msg_type, search_path) assert spec is not None assert spec.package == 'geometry_msgs' assert spec.full_name == msg_type assert spec.short_name == short with open(os.path.join(geometry_d, f)) as file_h: assert spec.text == file_h.read() # all types with 'Stamped' in name have headers if 'Stamped' in f: assert spec.has_header(), msg_type
def test_array_serializer_generator(): from genmsg.msg_loader import load_msg_by_type from genpy.generator import array_serializer_generator, MsgGenerationException, reset_var d = os.path.join(get_test_dir(), 'array') # generator tests are mainly tripwires/coverage tests #array_serializer_generator(msg_context, package, type_, name, serialize, is_numpy): msg_context = MsgContext.create_default() # load in some objects search_path = {'foo': [d]} load_msg_by_type(msg_context, 'foo/Object', search_path) load_msg_by_type(msg_context, 'foo/ObjectArray', search_path) # permutations: var length, unint8 is_numpy = False serialize = True result = array_serializer_generator(msg_context, '', 'uint8[]', 'data', serialize, is_numpy) compare_file(d, 'uint8_varlen_ser.txt', result) result = array_serializer_generator(msg_context, '', 'int16[]', 'data', serialize, is_numpy) compare_file(d, 'int16_varlen_ser.txt', result) result = array_serializer_generator(msg_context, '', 'uint8[8]', 'data', serialize, is_numpy) compare_file(d, 'uint8_fixed_ser.txt', result) result = array_serializer_generator(msg_context, '', 'int16[10]', 'data', serialize, is_numpy) compare_file(d, 'int16_fixed_ser.txt', result) result = array_serializer_generator(msg_context, '', 'bool[]', 'data', serialize, is_numpy) compare_file(d, 'bool_varlen_ser.txt', result) result = array_serializer_generator(msg_context, '', 'bool[3]', 'data', serialize, is_numpy) compare_file(d, 'bool_fixed_ser.txt', result) # for 'complex' types have to reset the variable generator reset_var() result = array_serializer_generator(msg_context, '', 'string[]', 'data', serialize, is_numpy) compare_file(d, 'string_varlen_ser.txt', result) reset_var() result = array_serializer_generator(msg_context, '', 'string[2]', 'data', serialize, is_numpy) compare_file(d, 'string_fixed_ser.txt', result) reset_var() result = array_serializer_generator(msg_context, 'foo', 'foo/Object[]', 'data', serialize, is_numpy) compare_file(d, 'object_varlen_ser.txt', result) reset_var() result = array_serializer_generator(msg_context, 'foo', 'foo/Object[3]', 'data', serialize, is_numpy) compare_file(d, 'object_fixed_ser.txt', result) serialize = False result = array_serializer_generator(msg_context, '', 'uint8[]', 'data', serialize, is_numpy) compare_file(d, 'uint8_varlen_deser.txt', result) result = array_serializer_generator(msg_context, '', 'int16[]', 'data', serialize, is_numpy) compare_file(d, 'int16_varlen_deser.txt', result) result = array_serializer_generator(msg_context, '', 'uint8[8]', 'data', serialize, is_numpy) compare_file(d, 'uint8_fixed_deser.txt', result) result = array_serializer_generator(msg_context, '', 'int16[10]', 'data', serialize, is_numpy) compare_file(d, 'int16_fixed_deser.txt', result) result = array_serializer_generator(msg_context, '', 'bool[]', 'data', serialize, is_numpy) compare_file(d, 'bool_varlen_deser.txt', result) result = array_serializer_generator(msg_context, '', 'bool[3]', 'data', serialize, is_numpy) compare_file(d, 'bool_fixed_deser.txt', result) # for 'complex' types have to reset the variable generator reset_var() result = array_serializer_generator(msg_context, '', 'string[]', 'data', serialize, is_numpy) compare_file(d, 'string_varlen_deser.txt', result) reset_var() result = array_serializer_generator(msg_context, '', 'string[2]', 'data', serialize, is_numpy) compare_file(d, 'string_fixed_deser.txt', result) reset_var() result = array_serializer_generator(msg_context, 'foo', 'foo/Object[]', 'data', serialize, is_numpy) compare_file(d, 'object_varlen_deser.txt', result) reset_var() result = array_serializer_generator(msg_context, 'foo', 'foo/Object[3]', 'data', serialize, is_numpy) compare_file(d, 'object_fixed_deser.txt', result) # test w/ bad args try: result = array_serializer_generator(msg_context, '', 'uint8', 'data', True, False) exhaust(result) assert False, "should have raised" except MsgGenerationException: pass
def test_array_serializer_generator(): from genmsg.msg_loader import load_msg_by_type from genpy.generator import array_serializer_generator, MsgGenerationException, reset_var d = os.path.join(get_test_dir(), 'array') # generator tests are mainly tripwires/coverage tests # array_serializer_generator(msg_context, package, type_, name, serialize, is_numpy): msg_context = MsgContext.create_default() # load in some objects search_path = {'foo': [d]} load_msg_by_type(msg_context, 'foo/Object', search_path) load_msg_by_type(msg_context, 'foo/ObjectArray', search_path) # permutations: var length, unint8 is_numpy = False serialize = True result = array_serializer_generator(msg_context, '', 'uint8[]', 'data', serialize, is_numpy) compare_file(d, 'uint8_varlen_ser.txt', result) result = array_serializer_generator(msg_context, '', 'int16[]', 'data', serialize, is_numpy) compare_file(d, 'int16_varlen_ser.txt', result) result = array_serializer_generator(msg_context, '', 'uint8[8]', 'data', serialize, is_numpy) compare_file(d, 'uint8_fixed_ser.txt', result) result = array_serializer_generator(msg_context, '', 'int16[10]', 'data', serialize, is_numpy) compare_file(d, 'int16_fixed_ser.txt', result) result = array_serializer_generator(msg_context, '', 'bool[]', 'data', serialize, is_numpy) compare_file(d, 'bool_varlen_ser.txt', result) result = array_serializer_generator(msg_context, '', 'bool[3]', 'data', serialize, is_numpy) compare_file(d, 'bool_fixed_ser.txt', result) # for 'complex' types have to reset the variable generator reset_var() result = array_serializer_generator(msg_context, '', 'string[]', 'data', serialize, is_numpy) compare_file(d, 'string_varlen_ser.txt', result) reset_var() result = array_serializer_generator(msg_context, '', 'string[2]', 'data', serialize, is_numpy) compare_file(d, 'string_fixed_ser.txt', result) reset_var() result = array_serializer_generator(msg_context, 'foo', 'foo/Object[]', 'data', serialize, is_numpy) compare_file(d, 'object_varlen_ser.txt', result) reset_var() result = array_serializer_generator(msg_context, 'foo', 'foo/Object[3]', 'data', serialize, is_numpy) compare_file(d, 'object_fixed_ser.txt', result) serialize = False result = array_serializer_generator(msg_context, '', 'uint8[]', 'data', serialize, is_numpy) compare_file(d, 'uint8_varlen_deser.txt', result) result = array_serializer_generator(msg_context, '', 'int16[]', 'data', serialize, is_numpy) compare_file(d, 'int16_varlen_deser.txt', result) result = array_serializer_generator(msg_context, '', 'uint8[8]', 'data', serialize, is_numpy) compare_file(d, 'uint8_fixed_deser.txt', result) result = array_serializer_generator(msg_context, '', 'int16[10]', 'data', serialize, is_numpy) compare_file(d, 'int16_fixed_deser.txt', result) result = array_serializer_generator(msg_context, '', 'bool[]', 'data', serialize, is_numpy) compare_file(d, 'bool_varlen_deser.txt', result) result = array_serializer_generator(msg_context, '', 'bool[3]', 'data', serialize, is_numpy) compare_file(d, 'bool_fixed_deser.txt', result) # for 'complex' types have to reset the variable generator reset_var() result = array_serializer_generator(msg_context, '', 'string[]', 'data', serialize, is_numpy) compare_file(d, 'string_varlen_deser.txt', result) reset_var() result = array_serializer_generator(msg_context, '', 'string[2]', 'data', serialize, is_numpy) compare_file(d, 'string_fixed_deser.txt', result) reset_var() result = array_serializer_generator(msg_context, 'foo', 'foo/Object[]', 'data', serialize, is_numpy) compare_file(d, 'object_varlen_deser.txt', result) reset_var() result = array_serializer_generator(msg_context, 'foo', 'foo/Object[3]', 'data', serialize, is_numpy) compare_file(d, 'object_fixed_deser.txt', result) # test w/ bad args try: result = array_serializer_generator(msg_context, '', 'uint8', 'data', True, False) exhaust(result) assert False, 'should have raised' except MsgGenerationException: pass
def test_load_msg_depends(): #TODO: should there just be a 'load_msg, implicit=True?' from genmsg.msg_loader import MsgContext, load_msg_by_type, load_msg_depends, MsgNotFound test_d = get_test_dir() search_path = { 'test_ros': [ os.path.join(test_d, 'test_ros', 'msg') ], 'std_msgs': [ os.path.join(test_d, 'std_msgs', 'msg') ], 'geometry_msgs': [ os.path.join(test_d, 'geometry_msgs', 'msg') ], 'sensor_msgs': [ os.path.join(test_d, 'sensor_msgs', 'msg') ], 'invalid': [ os.path.join(test_d, 'invalid', 'msg') ], } # Test not found msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'invalid/BadDepend', search_path) try: load_msg_depends(msg_context, root_spec, search_path) assert False, "should have raised MsgNotFound" except MsgNotFound: pass root_spec = load_msg_by_type(msg_context, 'invalid/BadLocalDepend', search_path) try: load_msg_depends(msg_context, root_spec, search_path) assert False, "should have raised MsgNotFound" except MsgNotFound: pass msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'std_msgs/Int32', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'std_msgs', 'msg', 'Int32.msg') assert file_p == msg_context.get_file('std_msgs/Int32') assert [] == msg_context.get_depends('std_msgs/Int32') msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'std_msgs/Header', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'std_msgs', 'msg', 'Header.msg') assert file_p == msg_context.get_file('std_msgs/Header') assert [] == msg_context.get_depends('std_msgs/Header') msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'Header', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'std_msgs', 'msg', 'Header.msg') assert file_p == msg_context.get_file('std_msgs/Header') assert [] == msg_context.get_depends('std_msgs/Header') msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'std_msgs/Int32MultiArray', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'std_msgs', 'msg', 'Int32MultiArray.msg') assert file_p == msg_context.get_file('std_msgs/Int32MultiArray') val = msg_context.get_all_depends('std_msgs/Int32MultiArray') assert set(['std_msgs/MultiArrayLayout', 'std_msgs/MultiArrayDimension']) == set(val), val assert 2 == len(val), val val = msg_context.get_depends('std_msgs/Int32MultiArray') assert set(['std_msgs/MultiArrayLayout']) == set(val), val for s in ['MultiArrayLayout', 'MultiArrayDimension']: file_p = os.path.join(test_d, 'std_msgs', 'msg', '%s.msg'%s) assert file_p == msg_context.get_file('std_msgs/%s'%s)
def test_load_msg_depends_stamped(): #TODO: should there just be a 'load_msg, implicit=True?' from genmsg.msg_loader import MsgContext, load_msg_by_type, load_msg_depends test_d = get_test_dir() geometry_d = os.path.join(test_d, 'geometry_msgs', 'msg') search_path = { 'test_ros': [ os.path.join(test_d, 'test_ros', 'msg') ], 'std_msgs': [ os.path.join(test_d, 'std_msgs', 'msg') ], 'geometry_msgs': [ geometry_d ], 'sensor_msgs': [ os.path.join(test_d, 'sensor_msgs', 'msg') ], } # Test with Stamped and deeper hierarchies, Header msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'geometry_msgs/PoseStamped', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'geometry_msgs', 'msg', 'PoseStamped.msg') assert file_p == msg_context.get_file('geometry_msgs/PoseStamped') val = msg_context.get_all_depends('geometry_msgs/PoseStamped') assert set(['std_msgs/Header', 'geometry_msgs/Pose', 'geometry_msgs/Point', 'geometry_msgs/Quaternion']) == set(val), val val = msg_context.get_depends('geometry_msgs/PoseStamped') assert set(['std_msgs/Header', 'geometry_msgs/Pose']) == set(val), val for s in ['Header']: file_p = os.path.join(test_d, 'std_msgs', 'msg', '%s.msg'%s) assert file_p == msg_context.get_file('std_msgs/%s'%s) for s in ['Pose', 'Point', 'Quaternion']: file_p = os.path.join(geometry_d, '%s.msg'%s) assert file_p == msg_context.get_file('geometry_msgs/%s'%s) msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'geometry_msgs/TwistWithCovarianceStamped', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'geometry_msgs', 'msg', 'TwistWithCovarianceStamped.msg') assert file_p == msg_context.get_file('geometry_msgs/TwistWithCovarianceStamped') val = msg_context.get_all_depends('geometry_msgs/TwistWithCovarianceStamped') assert set(['std_msgs/Header', 'geometry_msgs/TwistWithCovariance', 'geometry_msgs/Twist', 'geometry_msgs/Vector3']) == set(val), val val = msg_context.get_depends('geometry_msgs/TwistWithCovarianceStamped') assert set(['std_msgs/Header', 'geometry_msgs/TwistWithCovariance']) == set(val), val for s in ['Header']: file_p = os.path.join(test_d, 'std_msgs', 'msg', '%s.msg'%s) assert file_p == msg_context.get_file('std_msgs/%s'%s) for s in ['TwistWithCovariance', 'Twist', 'Vector3']: file_p = os.path.join(geometry_d, '%s.msg'%s) assert file_p == msg_context.get_file('geometry_msgs/%s'%s) msg_context = MsgContext.create_default() root_spec = load_msg_by_type(msg_context, 'sensor_msgs/Imu', search_path) load_msg_depends(msg_context, root_spec, search_path) file_p = os.path.join(test_d, 'sensor_msgs', 'msg', 'Imu.msg') assert file_p == msg_context.get_file('sensor_msgs/Imu') val = msg_context.get_all_depends('sensor_msgs/Imu') assert set(['std_msgs/Header', 'geometry_msgs/Quaternion', 'geometry_msgs/Vector3']) == set(val), val val = msg_context.get_depends('sensor_msgs/Imu') assert set(['std_msgs/Header', 'geometry_msgs/Quaternion', 'geometry_msgs/Vector3']) == set(val), val for s in ['Header']: file_p = os.path.join(test_d, 'std_msgs', 'msg', '%s.msg'%s) assert file_p == msg_context.get_file('std_msgs/%s'%s) for s in ['Quaternion', 'Vector3']: file_p = os.path.join(geometry_d, '%s.msg'%s) assert file_p == msg_context.get_file('geometry_msgs/%s'%s)