ros_message 0.1.1

Utilities for handling MSG and SRV files in ROS
Documentation
use super::*;

#[test]
fn match_field_matches_legal_field() {
    assert_eq!(
        FieldLine {
            field_type: "geom_msgs/Twist".into(),
            field_name: "myname".into(),
        },
        match_field("geom_msgs/Twist   myname").unwrap()
    );
}

#[test]
fn match_vector_field_matches_legal_field() {
    assert_eq!(
        FieldLine {
            field_type: "geom_msgs/Twist".into(),
            field_name: "myname".into(),
        },
        match_vector_field("geom_msgs/Twist [  ]   myname").unwrap()
    );
}

#[test]
fn match_array_field_matches_legal_field() {
    assert_eq!(
        (
            FieldLine {
                field_type: "geom_msgs/Twist".into(),
                field_name: "myname".into(),
            },
            127,
        ),
        match_array_field("geom_msgs/Twist   [   127 ]   myname").unwrap()
    );
}

#[test]
fn match_const_string_matches_legal_field() {
    assert_eq!(
        (
            FieldLine {
                field_type: "string".into(),
                field_name: "myname".into(),
            },
            "this is # data".into(),
        ),
        match_const_string("string   myname  =  this is # data").unwrap()
    );
}

#[test]
fn match_const_numeric_matches_legal_field() {
    assert_eq!(
        (
            FieldLine {
                field_type: "mytype".into(),
                field_name: "myname".into(),
            },
            "-444".into(),
        ),
        match_const_numeric("mytype   myname  =  -444").unwrap()
    );
}

#[test]
fn match_line_works_on_legal_data() {
    assert!(match_line("#just a comment").is_none());
    assert!(match_line("#  YOLO !   ").is_none());
    assert!(match_line("      ").is_none());

    assert_eq!(
        FieldInfo::new("geom_msgs/Twist", "myname", FieldCase::Unit).unwrap(),
        match_line("  geom_msgs/Twist   myname    # this clearly should succeed")
            .unwrap()
            .unwrap()
    );

    assert_eq!(
        FieldInfo::new("geom_msgs/Twist", "myname", FieldCase::Vector).unwrap(),
        match_line("  geom_msgs/Twist [  ]   myname  # ...")
            .unwrap()
            .unwrap()
    );

    assert_eq!(
        FieldInfo::new("char", "myname", FieldCase::Array(127)).unwrap(),
        match_line("  char   [   127 ]   myname# comment")
            .unwrap()
            .unwrap()
    );
    assert_eq!(
        FieldInfo::new(
            "string",
            "myname",
            FieldCase::Const("this is # data".into()),
        )
        .unwrap(),
        match_line("  string  myname =   this is # data  ")
            .unwrap()
            .unwrap()
    );
    assert_eq!(
        FieldInfo::new("int16", "myname", FieldCase::Const("-444".into())).unwrap(),
        match_line("  int16  myname =   -444 # data  ")
            .unwrap()
            .unwrap()
    );
}

#[test]
fn match_lines_parses_real_messages() {
    let data = match_lines(include_str!(
        "../../../msg_examples/geometry_msgs/msg/TwistWithCovariance.msg"
    ))
    .unwrap();
    assert_eq!(
        vec![
            FieldInfo::new("Twist", "twist", FieldCase::Unit).unwrap(),
            FieldInfo::new("float64", "covariance", FieldCase::Array(36)).unwrap(),
        ],
        data
    );

    let data = match_lines(include_str!(
        "../../../msg_examples/geometry_msgs/msg/PoseStamped.msg"
    ))
    .unwrap();
    assert_eq!(
        vec![
            FieldInfo::new("std_msgs/Header", "header", FieldCase::Unit).unwrap(),
            FieldInfo::new("Pose", "pose", FieldCase::Unit).unwrap(),
        ],
        data
    );
}