use mirui::ecs::{Entity, World};
use mirui::ui::builder::WidgetBuilder;
use mirui::ui::widgets::Text;
use mirui::ui::{IdMap, Parent, UiScope, ViewRegistry};
use mirui::{compose, ui};
#[compose]
fn hello_only() {
ui! {
Text("scoped hello") {}
};
}
#[test]
fn ui_scope_alone_spawns_widget_under_cx_parent() {
let mut world = World::new();
world.insert_resource(IdMap::new());
world.insert_resource(ViewRegistry::default());
let root = WidgetBuilder::new(&mut world).id();
let mut cx = UiScope::new(&mut world, root);
hello_only(&mut cx);
let texts: Vec<Entity> = world.query::<Text>().collect();
assert_eq!(texts.len(), 1);
assert_eq!(world.get::<Parent>(texts[0]).unwrap().0, root);
}
#[compose]
fn call_helper() {
ui!(hello_only());
ui!(hello_only());
}
#[test]
fn ui_fn_call_form_injects_cx() {
let mut world = World::new();
world.insert_resource(IdMap::new());
world.insert_resource(ViewRegistry::default());
let root = WidgetBuilder::new(&mut world).id();
let mut cx = UiScope::new(&mut world, root);
call_helper(&mut cx);
let texts: Vec<Entity> = world.query::<Text>().collect();
assert_eq!(
texts.len(),
2,
"each ui!(hello_only()) invocation spawned one Text"
);
for &t in &texts {
assert_eq!(world.get::<Parent>(t).unwrap().0, root);
}
}
#[test]
fn ui_bang_still_accepts_explicit_header() {
let mut world = World::new();
world.insert_resource(IdMap::new());
world.insert_resource(ViewRegistry::default());
let root = WidgetBuilder::new(&mut world).id();
ui! {
:(
parent: root
world: &mut world
:)
Text("legacy header") {}
};
let texts: Vec<Entity> = world.query::<Text>().collect();
assert_eq!(texts.len(), 1);
let bytes = world.get::<Text>(texts[0]).unwrap().resolve(&world);
assert_eq!(&*bytes, "legacy header");
}