xflow 0.1.1

XFlow implementation
Documentation
extern crate xflow;
use xflow::*;

#[cfg(test)]

mod helper;

fn read_json_file(filename: &str) -> String {
    helper::read_json_file(filename)
}

fn build_dispatcher<'a>() -> Dispatcher<'a> {
    let mut dispatcher = Dispatcher::new();
    let flow_dispatcher = flow::Flow::new();
    dispatcher.register_dispatcher("flow", flow_dispatcher);
    dispatcher
}

#[test]
fn test_run_10_steps() {
    let json_string = read_json_file("data/flows/10_steps.json");
    let xfs = XFlowStruct::from_json(&json_string);
    assert_eq!(xfs.nodes.len(), 10);

    let dispatcher = build_dispatcher();
    let mut xfrunner = XFlowRunner::new(&xfs, &dispatcher);

    assert_eq!(xfrunner.can_run(), true);

    let mut i = 1;

    loop {
        if !xfrunner.step() {
            break;
        }
        i = i + 1;
    }

    assert_eq!(i, xfs.nodes.len());
}

#[test]
fn test_run_simple_branch() {
    let json_string = read_json_file("data/flows/branch_boolean.json");
    let xfs = XFlowStruct::from_json(&json_string);
    assert_eq!(xfs.nodes.len(), 4);
    assert_eq!(xfs.edges.len(), 3);
    assert_eq!(xfs.branches.len(), 2);

    let dispatcher = build_dispatcher();
    let mut xfrunner = XFlowRunner::new(&xfs, &dispatcher);

    assert_eq!(xfrunner.can_run(), true);

    xfrunner.run();

    assert_eq!(xfrunner.is_completed_ok(), true);
}