#![allow(dead_code)]
use bubbles::{DialogueEvent, HashMapStorage, Runner, compile};
mod assertions;
pub fn play(source: &str, start_node: &str) -> Vec<DialogueEvent> {
let prog = compile(source).expect("compile failed");
let mut runner = Runner::new(prog, HashMapStorage::new());
runner.start(start_node).expect("start failed");
drain(&mut runner)
}
pub fn play_fixture(name: &str, start_node: &str) -> Vec<DialogueEvent> {
let path = format!("tests/fixtures/{name}.bub");
let source =
std::fs::read_to_string(&path).unwrap_or_else(|_| panic!("fixture not found: {path}"));
play(&source, start_node)
}
pub fn drain(runner: &mut Runner<HashMapStorage>) -> Vec<DialogueEvent> {
let mut events = Vec::new();
while let Some(ev) = runner
.next_event()
.unwrap_or_else(|e| panic!("runtime error: {e}"))
{
events.push(ev);
}
events
}