freya-core 0.5.0-rc.2

Reactivity runtime, tree management, accessibility integration, rendering pipeline and more, for Freya
Documentation
use std::time::Duration;

use freya::prelude::*;
use freya_testing::prelude::*;

#[test]
fn future_restarts_when_subscribed_state_changes() {
    fn app() -> impl IntoElement {
        let mut value = use_state(|| 1);
        let future = use_future(move || {
            let value = value();
            async move { value * 2 }
        });

        rect()
            .width(Size::fill())
            .height(Size::fill())
            .on_mouse_up(move |_| value.set(value() + 1))
            .child(match &*future.state() {
                FutureState::Fulfilled(doubled) => doubled.to_string(),
                _ => "loading".to_string(),
            })
    }

    let mut test = launch_test(app);
    test.poll(Duration::from_millis(1), Duration::from_millis(30));

    assert!(
        test.find(|_, element| Label::try_downcast(element).filter(|l| l.text.as_ref() == "2"))
            .is_some()
    );

    test.click_cursor((50.0, 50.0));
    test.poll(Duration::from_millis(1), Duration::from_millis(30));

    assert!(
        test.find(|_, element| Label::try_downcast(element).filter(|l| l.text.as_ref() == "4"))
            .is_some()
    );
}