use super::super::{ShellState, render};
use super::fixture::world;
use super::input;
use super::wire::wired;
use crate::AppModel;
use crate::alert::{Announced, announce};
use crate::boundary::Query;
use crate::boundary::reply::Reply;
use crate::cli_outbound::Cli;
#[test]
fn a_focused_frame_absorbs_what_needs_the_operator_and_tells_the_desktop_nothing() {
let mut world = world();
let (lernie, bl, bz) = (Cli::new("lernie"), Cli::new("bl"), Cli::new("bz"));
let ctx = egui::Context::default();
let deps = world.model.boundary_deps(&lernie, &bl);
let Ok(Reply::Attention(queue)) = world.model.answer(&deps, &Query::Attention, 0) else {
panic!("attention answers attention");
};
assert!(
!queue.is_empty(),
"the fixture must have something waiting, else this drives nothing"
);
assert!(announce(&mut world.state.alerts, &[], false, true).is_empty());
let mut paint = |model: &mut AppModel, state: &mut ShellState| {
let _ = ctx.run(input(), |ctx| {
render(ctx, model, state, &lernie, &bl, &bz);
});
String::new()
};
let _ = wired(&mut world, &mut paint);
assert!(
announce(&mut world.state.alerts, &queue, false, true).is_empty(),
"a frame the operator was looking at has already witnessed its asks"
);
let mut fresh = Announced::default();
assert!(announce(&mut fresh, &queue, false, true).is_empty());
}
#[test]
fn an_unanswered_frame_leaves_the_baseline_exactly_where_it_was() {
let mut world = world();
let (lernie, bl, bz) = (Cli::new("lernie"), Cli::new("bl"), Cli::new("bz"));
let ctx = egui::Context::default();
let deps = world.model.boundary_deps(&lernie, &bl);
let Ok(Reply::Attention(queue)) = world.model.answer(&deps, &Query::Attention, 0) else {
panic!("attention answers attention");
};
assert!(!queue.is_empty(), "the fixture must have something waiting");
assert!(announce(&mut world.state.alerts, &[], false, true).is_empty());
for _ in 0..3 {
let _ = ctx.run(input(), |ctx| {
render(ctx, &mut world.model, &mut world.state, &lernie, &bl, &bz);
});
}
assert!(
!announce(&mut world.state.alerts, &queue, false, true).is_empty(),
"a frame the wire never answered witnessed nothing, so these still arrive"
);
}