use freya::prelude::*;
use freya_testing::prelude::*;
#[test]
pub fn slider_mouse_drag_horizontal() {
fn slider_app() -> impl IntoElement {
let mut value = use_state(|| 0.0);
rect()
.child(label().text(format!("Value: {}", value() as i32)))
.child(
Slider::new(move |v| value.set(v))
.value(value())
.size(Size::px(200.)),
)
}
let mut test = launch_test(slider_app);
test.sync_and_update();
let label = test
.find(|node, element| {
Label::try_downcast(element)
.filter(|l| l.text.starts_with("Value:"))
.map(|_| node)
})
.unwrap();
assert_eq!(
Label::try_downcast(&*label.element()).unwrap().text,
"Value: 0"
);
test.click_cursor((105.0, 30.0));
test.sync_and_update();
let label = test
.find(|node, element| {
Label::try_downcast(element)
.filter(|l| l.text.starts_with("Value:"))
.map(|_| node)
})
.unwrap();
let value_text = Label::try_downcast(&*label.element()).unwrap().text;
let value: f64 = value_text.replace("Value: ", "").parse().unwrap();
assert!((40..60).contains(&(value as i32)));
test.move_cursor((150.0, 30.0));
test.sync_and_update();
test.press_cursor((150.0, 30.0));
test.sync_and_update();
test.move_cursor((175.0, 30.0));
test.sync_and_update();
test.release_cursor((175.0, 30.0));
test.sync_and_update();
let label = test
.find(|node, element| {
Label::try_downcast(element)
.filter(|l| l.text.starts_with("Value:"))
.map(|_| node)
})
.unwrap();
let value_text = Label::try_downcast(&*label.element()).unwrap().text;
let value: f64 = value_text.replace("Value: ", "").parse().unwrap();
assert!((value - 87.0).abs() < 10.0);
}
#[test]
pub fn slider_keyboard_horizontal() {
fn slider_app() -> impl IntoElement {
let mut value = use_state(|| 50.0);
rect()
.child(label().text(format!("Value: {}", value() as i32)))
.child(
Slider::new(move |v| value.set(v))
.value(value())
.size(Size::px(200.)),
)
}
let mut test = launch_test(slider_app);
test.sync_and_update();
test.click_cursor((100.0, 30.0));
for _ in 0..5 {
test.press_key(Key::Named(NamedKey::ArrowRight));
}
let label = test
.find(|node, element| {
Label::try_downcast(element)
.filter(|l| l.text.starts_with("Value:"))
.map(|_| node)
})
.unwrap();
let value_text = Label::try_downcast(&*label.element()).unwrap().text;
let value: f64 = value_text.replace("Value: ", "").parse().unwrap();
assert!((40..70).contains(&(value as i32)));
for _ in 0..3 {
test.press_key(Key::Named(NamedKey::ArrowLeft));
}
let label = test
.find(|node, element| {
Label::try_downcast(element)
.filter(|l| l.text.starts_with("Value:"))
.map(|_| node)
})
.unwrap();
let value_text = Label::try_downcast(&*label.element()).unwrap().text;
let value: f64 = value_text.replace("Value: ", "").parse().unwrap();
assert!((value - 58.0).abs() < 10.0);
}
#[test]
pub fn slider_vertical() {
fn slider_app() -> impl IntoElement {
let mut value = use_state(|| 0.0);
rect()
.child(label().text(format!("Value: {}", value() as i32)))
.child(
Slider::new(move |v| value.set(v))
.value(value())
.direction(Direction::Vertical)
.size(Size::px(200.)),
)
}
let mut test = launch_test(slider_app);
test.sync_and_update();
test.click_cursor((20.0, 105.0));
let label = test
.find(|node, element| {
Label::try_downcast(element)
.filter(|l| l.text.starts_with("Value:"))
.map(|_| node)
})
.unwrap();
let value_text = Label::try_downcast(&*label.element()).unwrap().text;
let value: f64 = value_text.replace("Value: ", "").parse().unwrap();
assert!((value - 50.0).abs() < 10.0);
}
#[test]
pub fn slider_keyboard_vertical() {
fn slider_app() -> impl IntoElement {
let mut value = use_state(|| 50.0);
rect()
.child(label().text(format!("Value: {}", value() as i32)))
.child(
Slider::new(move |v| value.set(v))
.value(value())
.direction(Direction::Vertical)
.size(Size::px(200.)),
)
}
let mut test = launch_test(slider_app);
test.sync_and_update();
test.click_cursor((20.0, 105.0));
for _ in 0..5 {
test.press_key(Key::Named(NamedKey::ArrowUp));
}
let label = test
.find(|node, element| {
Label::try_downcast(element)
.filter(|l| l.text.starts_with("Value:"))
.map(|_| node)
})
.unwrap();
let value_text = Label::try_downcast(&*label.element()).unwrap().text;
let value: f64 = value_text.replace("Value: ", "").parse().unwrap();
assert!((value - 70.0).abs() < 10.0);
for _ in 0..3 {
test.press_key(Key::Named(NamedKey::ArrowDown));
}
let label = test
.find(|node, element| {
Label::try_downcast(element)
.filter(|l| l.text.starts_with("Value:"))
.map(|_| node)
})
.unwrap();
let value_text = Label::try_downcast(&*label.element()).unwrap().text;
let value: f64 = value_text.replace("Value: ", "").parse().unwrap();
assert!((value - 58.0).abs() < 10.0);
}
#[test]
pub fn slider_wheel() {
fn slider_app() -> impl IntoElement {
let mut value = use_state(|| 50.0);
rect()
.child(label().text(format!("Value: {}", value() as i32)))
.child(
Slider::new(move |v| value.set(v))
.value(value())
.size(Size::px(200.)),
)
}
let mut test = launch_test(slider_app);
test.sync_and_update();
test.scroll((100.0, 30.0), (0.0, 5300.0));
let label = test
.find(|node, element| {
Label::try_downcast(element)
.filter(|l| l.text.starts_with("Value:"))
.map(|_| node)
})
.unwrap();
let value_text = Label::try_downcast(&*label.element()).unwrap().text;
let value: f64 = value_text.replace("Value: ", "").parse().unwrap();
assert_eq!(value, 100.0);
test.scroll((100.0, 30.0), (0.0, -5300.0));
let label = test
.find(|node, element| {
Label::try_downcast(element)
.filter(|l| l.text.starts_with("Value:"))
.map(|_| node)
})
.unwrap();
let value_text = Label::try_downcast(&*label.element()).unwrap().text;
let value: f64 = value_text.replace("Value: ", "").parse().unwrap();
assert_eq!(value, 0.0);
}
#[test]
pub fn slider_disabled() {
fn slider_app() -> impl IntoElement {
let mut value = use_state(|| 50.0);
rect()
.child(label().text(format!("Value: {}", value() as i32)))
.child(
Slider::new(move |v| value.set(v))
.value(value())
.enabled(false)
.size(Size::px(200.)),
)
}
let mut test = launch_test(slider_app);
test.sync_and_update();
test.click_cursor((150.0, 30.0));
let label = test
.find(|node, element| {
Label::try_downcast(element)
.filter(|l| l.text.starts_with("Value:"))
.map(|_| node)
})
.unwrap();
let value_text = Label::try_downcast(&*label.element()).unwrap().text;
let value: f64 = value_text.replace("Value: ", "").parse().unwrap();
assert_eq!(value, 50.0);
test.press_key(Key::Named(NamedKey::ArrowRight));
let label = test
.find(|node, element| {
Label::try_downcast(element)
.filter(|l| l.text.starts_with("Value:"))
.map(|_| node)
})
.unwrap();
let value_text = Label::try_downcast(&*label.element()).unwrap().text;
let value: f64 = value_text.replace("Value: ", "").parse().unwrap();
assert_eq!(value, 50.0);
}