inkling 0.12.5

Limited implementation of the Ink markup language.
Documentation
use inkling::error::ReadError;
use inkling::*;

#[test]
fn knot_names_in_diverts_are_validated() {
    let content = "

== duckburg
-> bin

== money_bin
-> END

";

    match read_story_from_string(content) {
        Err(ReadError::ValidationError(..)) => (),
        _ => panic!(),
    }
}

#[test]
fn stitch_names_in_diverts_are_validated() {
    let content = "

-> duckburg.bin

== duckburg
= money_bin
-> END

";

    match read_story_from_string(content) {
        Err(ReadError::ValidationError(..)) => (),
        _ => panic!(),
    }
}

#[test]
fn stitch_names_to_relative_addresses_are_validated() {
    let content = "

== duckburg
Welcome to Duck Burg!
-> bin

= money_bin
-> END

";

    match read_story_from_string(content) {
        Err(ReadError::ValidationError(..)) => (),
        _ => panic!(),
    }
}

#[test]
fn diverts_in_choice_text_are_validated() {
    let content = "

== duckburg
Welcome to Duck Burg!
*   [Money bin] -> bin

= money_bin
-> END

";

    match read_story_from_string(content) {
        Err(ReadError::ValidationError(..)) => (),
        _ => panic!(),
    }
}

#[test]
fn diverts_in_alternative_sequences_are_validated() {
    let content = "

== duckburg
Welcome to Duck Burg! {We live here.|We headed to Uncle Scrooge's money bin. -> bin}

== money_bin
-> END

";

    match read_story_from_string(content) {
        Err(ReadError::ValidationError(..)) => (),
        _ => panic!(),
    }
}

#[test]
fn diverts_in_nested_branches_are_validated() {
    let content = "

== duckburg
*   Money bin
    We headed to the money bin. -> bin

== money_bin
-> END

";

    match read_story_from_string(content) {
        Err(ReadError::ValidationError(..)) => (),
        _ => panic!(),
    }
}

#[test]
fn condition_addresses_are_validated() {
    let content = "

== duckburg
*   {bin} But we had already visited the money bin.
*   -> END

== money_bin
-> END

";

    match read_story_from_string(content) {
        Err(ReadError::ValidationError(..)) => (),
        _ => panic!(),
    }
}

#[test]
fn addresses_in_choices_are_validated() {
    let content = "

VAR variable = 0

*   This {variable} must not fail [] Nor this {variable}
*   Diverts should be the same -> knot
*   As should {variable == 0: addresses in conditions}

== knot
Empty knot.

";

    let story = read_story_from_string(content).unwrap();

    let buffer = format!("{:?}", &story);

    assert!(!buffer.contains("Raw("));
}