mod common;
use common::*;
use std::sync::Arc;
#[tokio::test]
async fn test_non_aligned_scroll_positions() -> Result<(), anyhow::Error> {
let ctx = durable_sled_setup().await?;
let heights = [50, 75, 100, 125, 150];
create_messages(&ctx, (0..60).map(|i| (1000 + i, heights[(i as usize) % 5]))).await?;
let sm = Arc::new(ScrollManager::<TestMessageView>::new(
&ctx,
"true",
"timestamp DESC",
50, 2.0,
500,
)?);
let mut r = MockRenderer::new(sm.clone(), 500);
tokio::spawn({
let sm = sm.clone();
async move { sm.start().await }
});
let vs = r.next_render().await?;
r.assert(&vs, 30, 1030..=1059, None, true, false, true, 1055, 1059);
assert_eq!(r.scroll_offset, 2500);
r.up_no_render(37, 1054, 1059).await;
assert_eq!(r.scroll_offset, 2463);
r.up_no_render(123, 1053, 1058).await;
assert_eq!(r.scroll_offset, 2340);
r.up_no_render(289, 1051, 1056).await;
assert_eq!(r.scroll_offset, 2051);
r.up_no_render(551, 1045, 1049).await;
assert_eq!(r.scroll_offset, 1500);
r.up_no_render(173, 1043, 1048).await;
assert_eq!(r.scroll_offset, 1327);
r.up_no_render(227, 1041, 1046).await;
assert_eq!(r.scroll_offset, 1100);
r.scroll_up_and_expect(
51, 40, 1020..=1059, Some(1045),
true, true, false, 1041, 1045, 2050,
"TRUE AND \"timestamp\" <= 1059 ORDER BY timestamp DESC LIMIT 41",
).await?;
assert_eq!(sm.mode(), ankurah_virtual_scroll::ScrollMode::Backward);
Ok(())
}
#[tokio::test]
async fn test_partial_visibility_at_edges() -> Result<(), anyhow::Error> {
let ctx = durable_sled_setup().await?;
create_messages(&ctx, (0..60).map(|i| (1000 + i, 100))).await?;
let sm = Arc::new(ScrollManager::<TestMessageView>::new(
&ctx,
"true",
"timestamp DESC",
50, 2.0,
500,
)?);
let mut r = MockRenderer::new(sm.clone(), 500);
tokio::spawn({
let sm = sm.clone();
async move { sm.start().await }
});
let vs = r.next_render().await?;
r.assert(&vs, 30, 1030..=1059, None, true, false, true, 1055, 1059);
assert_eq!(r.scroll_offset, 2500);
r.up_no_render(50, 1054, 1059).await;
assert_eq!(r.scroll_offset, 2450);
r.up_no_render(49, 1054, 1059).await;
assert_eq!(r.scroll_offset, 2401);
r.up_no_render(1, 1054, 1058).await;
assert_eq!(r.scroll_offset, 2400);
r.up_no_render(1, 1053, 1058).await;
assert_eq!(r.scroll_offset, 2399);
Ok(())
}