buoyant 0.7.0

SwiftUI-like UIs in Rust for embedded devices
Documentation
use buoyant::{
    environment::DefaultEnvironment,
    font::CharacterBufferFont,
    primitives::{Dimensions, Size},
    view::prelude::*,
};

/// The greedy lower priority view with a non-zero min size results in a layout overflow
/// when paired with a greedy higher priority view.
#[test]
fn oversized_layout_vstack() {
    let view = VStack::new((
        Text::new("12345", &CharacterBufferFont),
        Rectangle.frame().with_height(2).priority(-1),
        Rectangle,
    ));
    let offer = Size::new(10, 10);
    let env = DefaultEnvironment::default();
    let mut state = view.build_state(&mut ());
    let layout = view.layout(&offer.into(), &env, &mut (), &mut state);
    assert_eq!(layout.resolved_size, Dimensions::new(10, 10));
    assert_eq!(
        layout.sublayouts.sublayouts.0.resolved_size,
        Dimensions::new(5, 1)
    );
    assert_eq!(
        layout.sublayouts.sublayouts.1.resolved_size,
        Dimensions::new(10, 2)
    );
    assert_eq!(
        layout.sublayouts.sublayouts.2.resolved_size,
        Dimensions::new(10, 9)
    );
}

/// The greedy lower priority view with a non-zero min size results in a layout overflow
/// when paired with a greedy higher priority view.
#[test]
fn oversized_layout_hstack() {
    let view = HStack::new((
        Text::new("12345", &CharacterBufferFont),
        Rectangle.frame().with_width(2).priority(-1),
        Rectangle,
    ));
    let offer = Size::new(10, 10);
    let env = DefaultEnvironment::default();
    let mut state = view.build_state(&mut ());
    let layout = view.layout(&offer.into(), &env, &mut (), &mut state);
    assert_eq!(layout.resolved_size, Dimensions::new(10, 10));
    assert_eq!(
        layout.sublayouts.sublayouts.0.resolved_size,
        Dimensions::new(5, 1)
    );
    assert_eq!(
        layout.sublayouts.sublayouts.1.resolved_size,
        Dimensions::new(2, 10)
    );
    assert_eq!(
        layout.sublayouts.sublayouts.2.resolved_size,
        Dimensions::new(5, 10)
    );
}