use super::*;
#[test]
fn pointer_position_is_the_clamped_lens_center() {
let width = 100.0;
assert_eq!(segment_lens_left(50.0, width, 3), 0.0);
assert_eq!(segment_lens_left(150.0, width, 3), 100.0);
assert_eq!(segment_lens_left(250.0, width, 3), 200.0);
assert_eq!(segment_lens_left(-50.0, width, 3), 0.0);
assert_eq!(segment_lens_left(400.0, width, 3), 200.0);
}
#[test]
fn segmented_contact_matches_native_presentation_bounds() {
for (progress, width, height) in [(0.0, 96.0, 28.0), (0.5, 108.0, 36.0), (1.0, 120.0, 44.0)] {
let size = segmented_lens_base_size(100.0, 32.0, progress);
assert_eq!(size.width, width);
assert_eq!(size.height, height);
}
}
#[test]
fn a_scope_records_what_each_segment_announces() {
let drawn = Rc::new(std::cell::Cell::new(0u32));
let counted = Rc::clone(&drawn);
let segments = collect_segments(|scope| {
scope.segment("Sending");
scope.segment_content("Received", move |selected| {
counted.set(counted.get() + u32::from(selected));
});
});
assert_eq!(segments.len(), 2);
assert_eq!(segments[0].description(), "Sending");
assert_eq!(segments[1].description(), "Received");
assert_eq!(drawn.get(), 0);
let LiquidSegment::Content { content, .. } = &segments[1] else {
panic!("segment_content declares caller content");
};
content(true);
assert_eq!(drawn.get(), 1);
}
#[test]
fn a_control_with_no_segments_declares_none() {
assert!(collect_segments(|_| {}).is_empty());
}