// SPDX-License-Identifier: LGPL-2.1-only // Copyright (C) 2026 Liberux Labs, S. L. use super::*; use crate::layout::spacer::spacer; use crate::render::Canvas; fn make_canvas() -> Canvas { Canvas::new( 800, 600 ) } #[ test ] fn new_defaults_are_unset_dimensions_and_no_fade() { let v = Viewport::<()>::new( spacer() ); assert!( v.width.is_none() ); assert!( v.height.is_none() ); assert_eq!( v.fade_bottom, 0.0 ); } #[ test ] fn width_builder_clamps_negative_to_zero() { let v = Viewport::<()>::new( spacer() ).width( -50.0 ); assert_eq!( v.width, Some( 0.0 ) ); } #[ test ] fn height_builder_clamps_negative_to_zero() { let v = Viewport::<()>::new( spacer() ).height( -10.0 ); assert_eq!( v.height, Some( 0.0 ) ); } #[ test ] fn fade_bottom_clamps_negative_to_zero() { let v = Viewport::<()>::new( spacer() ).fade_bottom( -1.0 ); assert_eq!( v.fade_bottom, 0.0 ); } #[ test ] fn fade_bottom_accepts_positive_pixel_count() { let v = Viewport::<()>::new( spacer() ).fade_bottom( 16.0 ); assert_eq!( v.fade_bottom, 16.0 ); } #[ test ] fn explicit_dimensions_override_child_intrinsic_size() { let v = Viewport::<()>::new( spacer().width( 99.0 ).height( 99.0 ) ) .width( 200.0 ) .height( 80.0 ); let canvas = make_canvas(); let ( w, h ) = v.preferred_size( 600.0, &canvas ); assert_eq!( w, 200.0 ); assert_eq!( h, 80.0 ); } #[ test ] fn unset_width_falls_through_to_max_width() { let v = Viewport::<()>::new( spacer().height( 40.0 ) ); let canvas = make_canvas(); let ( w, _ ) = v.preferred_size( 400.0, &canvas ); assert_eq!( w, 400.0 ); } #[ test ] fn unset_height_falls_through_to_child_intrinsic_height() { let v = Viewport::<()>::new( spacer().height( 75.0 ) ); let canvas = make_canvas(); let ( _, h ) = v.preferred_size( 400.0, &canvas ); assert_eq!( h, 75.0 ); }