use kataru::{Bookmark, Command, Dialogue, Line, LoadYaml, Runner, Story, Validator, Value};
#[macro_use]
extern crate linear_map;
#[test]
fn test_namespaces() {
let story: Story = Story::load_yml("./tests/data/namespaces").unwrap();
let mut bookmark: Bookmark = Bookmark::load_yml("./tests/data/bookmark.yml").unwrap();
bookmark.init_state(&story);
Validator::new(&story, &mut bookmark).validate().unwrap();
let mut runner = Runner::init(bookmark, story, true).unwrap();
let tests = vec![
(
"",
Line::Dialogue(Dialogue {
name: "GlobalCharacter".to_string(),
text: "Hello".to_string(),
..Dialogue::default()
}),
),
(
"",
Line::Command(Command {
name: "GlobalCharacter.GlobalMethod".to_string(),
params: linear_map! {"param".to_string() => Value::String("".to_string())},
}),
),
(
"",
Line::Command(Command {
name: "GlobalCharacter.GlobalMethod".to_string(),
params: linear_map! {"param".to_string() => Value::String("test".to_string())},
}),
),
(
"",
Line::Command(Command {
name: "GlobalCharacter.GlobalMethod".to_string(),
params: linear_map! {"param".to_string() => Value::String("test".to_string())},
}),
),
(
"",
Line::Command(Command {
name: "GlobalCommand".to_string(),
params: linear_map! {"param".to_string() => Value::Number(0.)},
}),
),
(
"",
Line::Command(Command {
name: "GlobalCommand".to_string(),
params: linear_map! {"param".to_string() => Value::Number(1.)},
}),
),
(
"",
Line::Command(Command {
name: "GlobalCommandNoParams".to_string(),
params: linear_map! {},
}),
),
(
"",
Line::Dialogue(Dialogue {
name: "namespace1:LocalCharacter".to_string(),
text: "Hello".to_string(),
..Dialogue::default()
}),
),
(
"",
Line::Dialogue(Dialogue {
name: "GlobalCharacter".to_string(),
text: "Hello".to_string(),
..Dialogue::default()
}),
),
(
"",
Line::Command(Command {
name: "namespace1:LocalCharacter.LocalCharacterMethod".to_string(),
params: linear_map! {"param1".to_string() => Value::Number(1.),
"param2".to_string() => Value::String("two".to_string()),
"param3".to_string() => Value::Bool(true)},
}),
),
(
"",
Line::Command(Command {
name: "namespace1:LocalCharacter.LocalCharacterMethod".to_string(),
params: linear_map! {"param1".to_string() => Value::Number(3.),
"param2".to_string() => Value::String("two".to_string()),
"param3".to_string() => Value::Bool(true)},
}),
),
(
"",
Line::Command(Command {
name: "namespace1:LocalCharacter.LocalCharacterMethod".to_string(),
params: linear_map! {"param1".to_string() => Value::Number(1.),
"param2".to_string() => Value::String("two".to_string()),
"param3".to_string() => Value::Bool(false)},
}),
),
(
"",
Line::Command(Command {
name: "namespace1:LocalCharacter.GlobalMethod".to_string(),
params: linear_map! {
"param".to_string() => Value::String("".to_string())},
}),
),
(
"",
Line::Command(Command {
name: "GlobalCharacter.GlobalMethod".to_string(),
params: linear_map! {
"param".to_string() => Value::String("".to_string())},
}),
),
(
"",
Line::Command(Command {
name: "namespace1:LocalCommand".to_string(),
params: linear_map! {
"param".to_string() => Value::Number(0.0)},
}),
),
(
"",
Line::Dialogue(Dialogue {
name: "namespace1:LocalCharacter".to_string(),
text: "Visited namespace2 start 1 time(s)".to_string(),
..Dialogue::default()
}),
),
(
"",
Line::Dialogue(Dialogue {
name: "namespace1:LocalCharacter".to_string(),
text: "Value of namespace1:var is false".to_string(),
..Dialogue::default()
}),
),
(
"",
Line::Command(Command {
name: "namespace1:LocalCommand".to_string(),
params: linear_map! {
"param".to_string() => Value::Number(0.0)},
}),
),
];
for (input, line) in &tests {
assert_eq!(&runner.next(input).unwrap(), line);
}
}