1
0
Fork 0
forked from wry/wry

Test retained spawn-out animation frames

This commit is contained in:
atagen 2026-05-21 17:22:04 +10:00
parent cf61c080b6
commit 501c508839

View file

@ -642,6 +642,27 @@ fn cubic_bezier_point(x1: f32, y1: f32, x2: f32, y2: f32, t: f32) -> CurvePoint
mod tests {
use super::*;
use crate::cmm::cmm_manager::ColorManager;
fn retained_for_tests() -> Rc<RetainedToplevel> {
let color_manager = ColorManager::new();
Rc::new(RetainedToplevel {
offset: (0, 0),
surface: RetainedSurface {
offset: (0, 0),
size: (100, 100),
content: RetainedContent::Color {
color: Color::SOLID_BLACK,
alpha: None,
color_description: color_manager.srgb_gamma22().clone(),
render_intent: RenderIntent::Perceptual,
},
below: vec![],
above: vec![],
},
})
}
#[test]
fn linear_rect_interpolation_is_symmetric() {
let a = Rect::new_sized_saturating(0, 0, 100, 100);
@ -669,6 +690,36 @@ mod tests {
assert!(AnimationCurve::from_cubic_bezier(0.0, f32::NAN, 0.58, 1.0).is_none());
}
#[test]
fn spawn_out_frames_shrink_linearly_and_expire() {
let state = AnimationState::default();
let retained = retained_for_tests();
let from = Rect::new_sized_saturating(10, 20, 100, 80);
let to = spawn_in_start_rect(from);
assert!(state.set_spawn_out(
from,
2,
retained.clone(),
true,
RetainedExitLayer::Floating,
0,
160
));
let start = state.exit_frames(0);
assert_eq!(start.len(), 1);
assert_eq!(start[0].rect, from);
assert_eq!(start[0].source_body_size, (96, 76));
assert!(start[0].active);
assert_eq!(start[0].layer, RetainedExitLayer::Floating);
assert!(Rc::ptr_eq(&start[0].retained, &retained));
let middle = state.exit_frames(80_000_000);
assert_eq!(middle.len(), 1);
assert_eq!(middle[0].rect, lerp_rect(from, to, 0.5));
assert!(state.exit_frames(160_000_000).is_empty());
}
#[test]
fn unchanged_target_does_not_restart() {
let state = AnimationState::default();