figtree 0.2.2

Figtree is a file format for human-useable configuration
Documentation
extern crate figtree;
use figtree::Figtree;

const SAMPLE: &'static str = "tests/resources/sample.ft";

#[test]
fn opening_a_file() {
    let mut figgy = Figtree::from_filename(SAMPLE).ok().expect("file does not exist");
    let config = figgy.parse().ok().expect("parsing error occurred");

    assert_eq!(config.node_count(), 1);
}

#[test]
fn getting_different_values() {
    let mut figgy = Figtree::from_filename(SAMPLE).ok().expect("file does not exist");
    let config = figgy.parse().ok().expect("parsing error occurred");

    let test_node = config.get_node("test").expect("node is not present");
    let test_value = test_node.get_attr("string").expect("key 'string' not found");
    let string = test_value.get_str().expect("value was not string type");

    assert_eq!(string, "value");

    let integer = config.get_node("test")
        .and_then(|node| node.get_attr("list"))
        .and_then(|list| list.get_list())
        .and_then(|list| list.get(2))
        .and_then(|val| val.get_int())
        .expect("could not obtain value");

    assert_eq!(integer, 3);
}

#[test]
fn getting_subnodes() {
    let mut figgy = Figtree::from_filename(SAMPLE).ok().expect("file does not exist");
    let config = figgy.parse().ok().expect("parsing error occurred");

    let test_node = config.get_node("test").expect("node is not present");
    let subnode = test_node.get_node("subtest").expect("subnode is not present");
    assert_eq!(subnode.node_count(), 0);
}

#[test]
fn using_dictionaries() {
    let mut figgy = Figtree::from_filename(SAMPLE).ok().expect("file does not exist");
    let config = figgy.parse().ok().expect("parsing error occurred");

    let identifier = config.get_node("test")
        .and_then(|node| node.get_node("subtest"))
        .and_then(|node| node.get_attr("dict"))
        .and_then(|dict| dict.get_dict())
        .and_then(|dict| dict.get("an identifier"))
        .and_then(|val| val.get_ident())
        .expect("could not obtain value");
    assert_eq!(identifier, "jello_shots");
}

#[test]
fn using_nulls() {
    let mut figgy = Figtree::from_filename(SAMPLE).ok().expect("file does not exist");
    let config = figgy.parse().ok().expect("parsing error occurred");

    let null_node = config.get_node("test")
        .and_then(|node| node.get_node("subtest"))
        .and_then(|node| node.get_attr("nonexistent"))
        .expect("attribute is not present");

    assert_eq!(null_node.get_int(), None);
    assert!(null_node.is_null());
}