[go: up one dir, main page]

ron 0.4.1

Rusty Object Notation
Documentation
extern crate ron;
#[macro_use]
extern crate serde;

use std::collections::BTreeMap;

use ron::value::{Number, Value};

#[test]
fn bool() {
    assert_eq!(Value::from_str("true"), Ok(Value::Bool(true)));
    assert_eq!(Value::from_str("false"), Ok(Value::Bool(false)));
}

#[test]
fn char() {
    assert_eq!(Value::from_str("'a'"), Ok(Value::Char('a')));
}

#[test]
fn map() {
    let mut map = BTreeMap::new();
    map.insert(Value::Char('a'), Value::Number(Number::new(1f64)));
    map.insert(Value::Char('b'), Value::Number(Number::new(2f64)));
    assert_eq!(Value::from_str("{ 'a': 1, 'b': 2 }"), Ok(Value::Map(map)));
}

#[test]
fn number() {
    assert_eq!(Value::from_str("42"), Ok(Value::Number(Number::new(42f64))));
    assert_eq!(Value::from_str("3.1415"), Ok(Value::Number(Number::new(3.1415f64))));
}

#[test]
fn option() {
    let opt = Some(Box::new(Value::Char('c')));
    assert_eq!(Value::from_str("Some('c')"), Ok(Value::Option(opt)));
}

#[test]
fn string() {
    let normal = "\"String\"";
    assert_eq!(Value::from_str(normal), Ok(Value::String("String".into())));

    let raw = "r\"Raw String\"";
    assert_eq!(Value::from_str(raw), Ok(Value::String("Raw String".into())));

    let raw_hashes = "r#\"Raw String\"#";
    assert_eq!(Value::from_str(raw_hashes), Ok(Value::String("Raw String".into())));

    let raw_escaped = "r##\"Contains \"#\"##";
    assert_eq!(Value::from_str(raw_escaped), Ok(Value::String("Contains \"#".into())));

    let raw_multi_line = "r\"Multi\nLine\"";
    assert_eq!(Value::from_str(raw_multi_line), Ok(Value::String("Multi\nLine".into())));
}

#[test]
fn seq() {
    let seq = vec![Value::Number(Number::new(1f64)), Value::Number(Number::new(2f64))];
    assert_eq!(Value::from_str("[1, 2]"), Ok(Value::Seq(seq)));
}

#[test]
fn unit() {
    use ron::de::{Error, ParseError, Position};

    assert_eq!(Value::from_str("()"), Ok(Value::Unit));
    assert_eq!(Value::from_str("Foo"), Ok(Value::Unit));

    assert_eq!(Value::from_str(""), Err(Error::Parser(
        ParseError::Eof,
        Position { col: 1, line: 1 }
    )));
}

#[derive(Serialize)]
struct Scene(Option<(u32, u32)>);

#[derive(Serialize)]
struct Scene2 {
    foo: Option<(u32, u32)>,
}

#[test]
fn roundtrip() {
    use ron::ser::to_string;
    use ron::de::from_str;

    {
        let s = to_string(&Scene2 { foo: Some((122, 13)) }).unwrap();
        println!("{}", s);
        let scene: Value = from_str(&s).unwrap();
        println!("{:?}", scene);
    }
    {
        let s = to_string(&Scene( Some((13, 122)) )).unwrap();
        println!("{}", s);
        let scene: Value = from_str(&s).unwrap();
        println!("{:?}", scene);
    }
}