iced-cube 0.0.7

Themeable application components for the iced GUI library, with Lucide icons
Documentation
#![cfg(all(feature = "stack", feature = "button"))]

use iced::Element;
use iced::widget::text;
use iced_cube::layout::stack::Gap;
use iced_cube::{button, hstack, vstack};
use iced_test::simulator;

#[derive(Debug, Clone, PartialEq)]
enum Message {
    Left,
    Right,
}

#[test]
fn every_gap_renders_all_children() {
    for gap in Gap::ALL {
        let element: Element<'_, Message> = vstack([text("Top").into(), text("Bottom").into()])
            .gap(gap)
            .push(
                hstack([text("Left").into(), text("Right").into()])
                    .gap(gap)
                    .wrap(),
            )
            .into();
        let mut ui = simulator(element);
        for label in ["Top", "Bottom", "Left", "Right"] {
            assert!(ui.find(label).is_ok(), "{gap:?} {label}");
        }
    }
}

#[test]
fn children_keep_their_messages() {
    let element: Element<'_, Message> = hstack([
        button("Left").on_press(Message::Left).into(),
        button("Right").on_press(Message::Right).into(),
    ])
    .into();
    let mut ui = simulator(element);
    ui.click("Right").expect("Right is rendered");
    ui.click("Left").expect("Left is rendered");

    let messages: Vec<_> = ui.into_messages().collect();
    assert_eq!(messages, vec![Message::Right, Message::Left]);
}