tests.rs
raw
use super::*;
use crate::clipboard::NoClipboard;
use crate::event::Modifiers;
fn key(stepper: &mut Stepper, key: Key) -> bool {
stepper.on_key(
&KeyInput {
key,
modifiers: Modifiers::default(),
pressed: true,
},
&mut TextContext::hermetic([]),
&mut NoClipboard,
)
}
#[test]
fn a_programmatic_set_is_silent() {
let mut stepper = Stepper::new();
stepper.set_value(5.0);
assert_eq!(stepper.get_value(), 5.0);
assert!(stepper.take_emitted().is_empty());
}
#[test]
fn arrows_step_by_the_step_and_stop_at_the_range() {
let mut stepper = Stepper::new();
stepper.set_min(0.0);
stepper.set_max(10.0);
stepper.set_step(3.0);
assert!(key(&mut stepper, Key::Up));
assert_eq!(stepper.get_value(), 3.0);
assert!(matches!(
stepper.take_emitted().as_slice(),
[EventData::ValueChanged(v)] if *v == 3.0
));
for _ in 0..5 {
key(&mut stepper, Key::Up);
}
assert_eq!(stepper.get_value(), 10.0, "clamped to the maximum");
let _ = stepper.take_emitted();
assert!(
!key(&mut stepper, Key::Up),
"a key that moves nothing is not consumed"
);
}
/// A step of zero would make the arrows do nothing for ever, so it is read as
/// the sensible default rather than taken literally.
#[test]
fn a_zero_step_is_read_as_one() {
let mut stepper = Stepper::new();
stepper.set_step(0.0);
key(&mut stepper, Key::Up);
assert_eq!(stepper.get_value(), 1.0);
}
#[test]
fn it_announces_its_range_and_its_text() {
let mut stepper = Stepper::new();
stepper.set_min(2.0);
stepper.set_max(8.0);
stepper.set_value(5.0);
let mut node = accesskit::Node::new(accesskit::Role::SpinButton);
stepper.accessibility(&mut node);
assert_eq!(node.numeric_value(), Some(5.0));
assert_eq!(node.min_numeric_value(), Some(2.0));
assert_eq!(node.max_numeric_value(), Some(8.0));
assert_eq!(node.value(), Some("5"), "a whole number reads as one");
assert_eq!(stepper.role(), accesskit::Role::SpinButton);
}