rustact 0.1.0

Async terminal UI framework inspired by React, built on top of ratatui and tokio.
Documentation
use tokio::sync::mpsc;

use super::super::dispatcher::{AppMessage, Dispatcher};
use crate::events::{EventBus, FrameworkEvent};

#[test]
fn request_render_queues_app_message() {
    let (tx, mut rx) = mpsc::channel(1);
    let dispatcher = Dispatcher::new(tx, EventBus::new(2));

    dispatcher.request_render();

    match rx.try_recv().expect("render request enqueued") {
        AppMessage::RequestRender => {}
        other => panic!("unexpected message: {other:?}"),
    }
}

#[test]
fn events_accessor_returns_shared_bus() {
    let (tx, _) = mpsc::channel(1);
    let bus = EventBus::new(2);
    let dispatcher = Dispatcher::new(tx, bus.clone());
    let mut subscriber = dispatcher.events().subscribe();

    bus.publish(FrameworkEvent::Tick);

    match subscriber.try_recv().expect("event broadcasted") {
        FrameworkEvent::Tick => {}
        other => panic!("unexpected event: {other:?}"),
    }
}