#![cfg(test)]
use bevy_app::App;
use bevy_asset::{AssetPlugin, Assets, Handle};
use brink_runtime::{Context, Program};
use crate::asset::{BrinkStoryAsset, LineTablesAsset, ProgramAsset, fresh_context};
pub fn compile_test_story(source: &str) -> (Program, Vec<Vec<brink_format::LineEntry>>, Context) {
let output = brink_compiler::compile("test.ink", |path| {
if path == "test.ink" {
Ok(source.to_string())
} else {
Err(std::io::Error::new(
std::io::ErrorKind::NotFound,
format!("unexpected include: {path}"),
))
}
})
.expect("test fixture should compile");
let (program, tables) = brink_runtime::link(&output.data).expect("test fixture should link");
let initial_context = fresh_context(&program);
(program, tables, initial_context)
}
pub fn make_test_app() -> App {
let mut app = App::new();
app.add_plugins(AssetPlugin::default());
app.add_plugins(crate::BrinkPlugin::<()>::default());
app
}
pub fn add_story_assets(
app: &mut App,
program: Program,
tables: Vec<Vec<brink_format::LineEntry>>,
initial_context: Context,
) -> Handle<BrinkStoryAsset> {
let world = app.world_mut();
let program_handle = world
.resource_mut::<Assets<ProgramAsset>>()
.add(ProgramAsset {
program,
initial_context,
});
let tables_handle = world
.resource_mut::<Assets<LineTablesAsset>>()
.add(LineTablesAsset { tables });
world
.resource_mut::<Assets<BrinkStoryAsset>>()
.add(BrinkStoryAsset {
program: program_handle,
line_tables: tables_handle,
})
}