use freya::prelude::*;
use freya_testing::prelude::*;
use crate::use_focus;
#[tokio::test]
pub async fn track_focus() {
#[allow(non_snake_case)]
fn OtherChild() -> Element {
let mut focus_manager = use_focus();
let a11y_id = focus_manager.attribute();
rsx!(
rect {
width: "100%",
height: "50%",
a11y_id,
onclick: move |_| focus_manager.request_focus(),
label {
"{focus_manager.is_focused()}"
}
}
)
}
fn use_focus_app() -> Element {
rsx!(
rect {
width: "100%",
height: "100%",
OtherChild {}
OtherChild {}
}
)
}
let mut utils = launch_test_with_config(
use_focus_app,
TestingConfig::<()> {
size: (100.0, 100.0).into(),
..TestingConfig::default()
},
);
utils.wait_for_update().await;
let root = utils.root().get(0);
assert_eq!(root.get(0).get(0).get(0).text(), Some("false"));
assert_eq!(root.get(1).get(0).get(0).text(), Some("false"));
utils.click_cursor((5., 5.)).await;
utils.wait_for_update().await;
assert_eq!(root.get(0).get(0).get(0).text(), Some("true"));
assert_eq!(root.get(1).get(0).get(0).text(), Some("false"));
utils.click_cursor((5., 75.)).await;
utils.wait_for_update().await;
assert_eq!(root.get(0).get(0).get(0).text(), Some("false"));
assert_eq!(root.get(1).get(0).get(0).text(), Some("true"));
}
#[tokio::test]
pub async fn block_focus() {
#[allow(non_snake_case)]
fn Child() -> Element {
let mut focus_manager = use_focus();
rsx!(
rect {
a11y_id: focus_manager.attribute(),
width: "100%",
height: "50%",
onclick: move |_| focus_manager.request_focus(),
label {
"{focus_manager.is_focused()}"
}
}
)
}
#[allow(non_snake_case)]
fn BlockingChild() -> Element {
let mut focus_manager = use_focus();
rsx!(
rect {
a11y_id: focus_manager.attribute(),
width: "100%",
height: "50%",
onkeydown: move |_| {
focus_manager.prevent_navigation();
},
onclick: move |_| focus_manager.request_focus(),
label {
"{focus_manager.is_focused()}"
}
}
)
}
fn use_focus_app() -> Element {
rsx!(
rect {
width: "100%",
height: "100%",
Child {}
BlockingChild {}
}
)
}
let mut utils = launch_test_with_config(
use_focus_app,
TestingConfig::<()> {
size: (100.0, 100.0).into(),
..TestingConfig::default()
},
);
let root = utils.root().get(0);
assert_eq!(root.get(0).get(0).get(0).text(), Some("false"));
assert_eq!(root.get(1).get(0).get(0).text(), Some("false"));
utils.click_cursor((5., 5.)).await;
utils.wait_for_update().await;
assert_eq!(root.get(0).get(0).get(0).text(), Some("true"));
assert_eq!(root.get(1).get(0).get(0).text(), Some("false"));
utils.push_event(TestEvent::Keyboard {
name: EventName::KeyDown,
key: Key::Tab,
code: Code::Tab,
modifiers: Modifiers::default(),
});
utils.wait_for_update().await;
utils.wait_for_update().await;
assert_eq!(root.get(0).get(0).get(0).text(), Some("false"));
assert_eq!(root.get(1).get(0).get(0).text(), Some("true"));
utils.push_event(TestEvent::Keyboard {
name: EventName::KeyDown,
key: Key::Tab,
code: Code::Tab,
modifiers: Modifiers::default(),
});
utils.wait_for_update().await;
utils.wait_for_update().await;
assert_eq!(root.get(0).get(0).get(0).text(), Some("false"));
assert_eq!(root.get(1).get(0).get(0).text(), Some("true"));
}