use freya::prelude::*;
use freya_testing::prelude::*;
#[tokio::test]
async fn no_state() {
fn no_state_app() -> Element {
rsx!(
label {
"Hello"
}
)
}
let utils = launch_test(no_state_app);
assert_eq!(utils.root().get(0).get(0).text(), Some("Hello"));
}
#[tokio::test]
async fn with_state() {
fn stateful_app() -> Element {
let mut state = use_signal(|| false);
use_effect(move || {
state.set(true);
});
rsx!(
label {
"Is enabled? {state}"
}
)
}
let mut utils = launch_test(stateful_app);
let label = utils.root().get(0);
assert_eq!(label.get(0).text(), Some("Is enabled? false"));
utils.wait_for_update().await;
assert_eq!(label.get(0).text(), Some("Is enabled? true"));
}
#[tokio::test]
async fn check_size() {
fn stateful_app() -> Element {
rsx!(rect {
width: "50%",
height: "calc(100% - 70)"
})
}
let mut utils = launch_test(stateful_app);
utils.wait_for_update().await;
let rect = utils.root().get(0);
assert_eq!(rect.area().unwrap().width(), 250.0);
assert_eq!(rect.area().unwrap().height(), 430.0);
}
#[tokio::test]
async fn simulate_events() {
fn stateful_app() -> Element {
let mut enabled = use_signal(|| false);
rsx!(
rect {
overflow: "clip",
width: "100%",
height: "100%",
background: "red",
onclick: move |_| {
enabled.set(true);
},
label {
"Is enabled? {enabled}"
}
}
)
}
let mut utils = launch_test(stateful_app);
let rect = utils.root().get(0);
let label = rect.get(0);
utils.wait_for_update().await;
let text = label.get(0);
assert_eq!(text.text(), Some("Is enabled? false"));
utils.click_cursor((5., 5.)).await;
let text = label.get(0);
assert_eq!(text.text(), Some("Is enabled? true"));
}
#[tokio::test]
async fn match_by_text() {
fn app() -> Element {
rsx!(
label {
"Hello, World!"
}
rect {
label {
"Hello, Rust!"
}
}
)
}
let utils = launch_test(app);
assert_eq!(
utils.root().get_by_text("Hello, World!").unwrap().text(),
Some("Hello, World!")
);
assert!(utils.root().get_by_text("Blabla").is_none());
assert_eq!(
utils.root().get_by_text("Hello, Rust!").unwrap().text(),
Some("Hello, Rust!")
);
}