First commit. Version 0.1.0
This commit is contained in:
95
tests/tree_lookup.rs
Normal file
95
tests/tree_lookup.rs
Normal file
@@ -0,0 +1,95 @@
|
||||
mod common;
|
||||
use common::{ lw_none, lw_button, rect };
|
||||
|
||||
use ltk::test_support::{ find_widget_at, find_widget, find_handlers, WidgetHandlers };
|
||||
use ltk::Point;
|
||||
|
||||
fn pt( x: f32, y: f32 ) -> Point
|
||||
{
|
||||
Point { x, y }
|
||||
}
|
||||
|
||||
// ── find_widget_at ────────────────────────────────────────────────────────────
|
||||
|
||||
#[ test ]
|
||||
fn hit_test_misses_when_empty()
|
||||
{
|
||||
let widgets: Vec<_> = vec![];
|
||||
assert_eq!( find_widget_at::<()>( &widgets, pt( 10.0, 10.0 ) ), None );
|
||||
}
|
||||
|
||||
#[ test ]
|
||||
fn hit_test_misses_outside_all_rects()
|
||||
{
|
||||
let widgets = vec![
|
||||
lw_none( 1, rect( 0.0, 0.0, 50.0, 50.0 ) ),
|
||||
lw_none( 2, rect( 100.0, 100.0, 50.0, 50.0 ) ),
|
||||
];
|
||||
assert_eq!( find_widget_at( &widgets, pt( 75.0, 75.0 ) ), None );
|
||||
}
|
||||
|
||||
#[ test ]
|
||||
fn hit_test_returns_widget_under_point()
|
||||
{
|
||||
let widgets = vec![
|
||||
lw_none( 7, rect( 0.0, 0.0, 100.0, 100.0 ) ),
|
||||
lw_none( 8, rect( 200.0, 0.0, 100.0, 100.0 ) ),
|
||||
];
|
||||
assert_eq!( find_widget_at( &widgets, pt( 50.0, 50.0 ) ), Some( 7 ) );
|
||||
assert_eq!( find_widget_at( &widgets, pt( 250.0, 50.0 ) ), Some( 8 ) );
|
||||
}
|
||||
|
||||
#[ test ]
|
||||
fn hit_test_returns_topmost_when_overlapping()
|
||||
{
|
||||
// Topmost wins. Layout pushes parents before children, so iteration in
|
||||
// reverse must return the child (drawn last, last in the slice).
|
||||
let widgets = vec![
|
||||
lw_none( 1, rect( 0.0, 0.0, 200.0, 200.0 ) ),
|
||||
lw_none( 2, rect( 50.0, 50.0, 100.0, 100.0 ) ),
|
||||
];
|
||||
assert_eq!( find_widget_at( &widgets, pt( 100.0, 100.0 ) ), Some( 2 ) );
|
||||
assert_eq!( find_widget_at( &widgets, pt( 10.0, 10.0 ) ), Some( 1 ) );
|
||||
}
|
||||
|
||||
// ── find_widget ───────────────────────────────────────────────────────────────
|
||||
|
||||
#[ test ]
|
||||
fn find_widget_returns_match_by_flat_idx()
|
||||
{
|
||||
let widgets = vec![
|
||||
lw_none( 10, rect( 0.0, 0.0, 10.0, 10.0 ) ),
|
||||
lw_none( 20, rect( 0.0, 0.0, 10.0, 10.0 ) ),
|
||||
lw_none( 30, rect( 0.0, 0.0, 10.0, 10.0 ) ),
|
||||
];
|
||||
let w = find_widget( &widgets, 20 ).expect( "widget 20 should be found" );
|
||||
assert_eq!( w.flat_idx, 20 );
|
||||
}
|
||||
|
||||
#[ test ]
|
||||
fn find_widget_returns_none_for_missing_idx()
|
||||
{
|
||||
let widgets = vec![ lw_none( 1, rect( 0.0, 0.0, 10.0, 10.0 ) ) ];
|
||||
assert!( find_widget( &widgets, 999 ).is_none() );
|
||||
}
|
||||
|
||||
// ── find_handlers ─────────────────────────────────────────────────────────────
|
||||
|
||||
#[ test ]
|
||||
fn find_handlers_returns_button_handler()
|
||||
{
|
||||
let widgets = vec![
|
||||
lw_button( 5, rect( 0.0, 0.0, 10.0, 10.0 ) ),
|
||||
];
|
||||
let h = find_handlers( &widgets, 5 ).expect( "handler should be present" );
|
||||
assert!( matches!( h, WidgetHandlers::Button { on_press: Some( () ), .. } ) );
|
||||
}
|
||||
|
||||
#[ test ]
|
||||
fn find_handlers_returns_none_for_missing_idx()
|
||||
{
|
||||
let widgets = vec![
|
||||
lw_button( 5, rect( 0.0, 0.0, 10.0, 10.0 ) ),
|
||||
];
|
||||
assert!( find_handlers( &widgets, 6 ).is_none() );
|
||||
}
|
||||
Reference in New Issue
Block a user