iced-yoda/examples/counter/src/main.rs

68 lines
1.4 KiB
Rust
Raw Normal View History

use iced::Center;
2025-02-21 01:28:47 +01:00
use iced::widget::{Column, button, column, text};
2019-11-26 22:31:46 +01:00
pub fn main() -> iced::Result {
iced::run(Counter::update, Counter::view)
2019-11-26 22:31:46 +01:00
}
2024-03-16 05:33:47 +01:00
#[derive(Default)]
2019-11-26 22:31:46 +01:00
struct Counter {
2024-03-16 05:33:47 +01:00
value: i64,
2019-11-26 22:31:46 +01:00
}
#[derive(Debug, Clone, Copy)]
enum Message {
2024-03-16 05:33:47 +01:00
Increment,
Decrement,
2019-11-26 22:31:46 +01:00
}
2024-03-16 05:33:47 +01:00
impl Counter {
2019-11-26 22:31:46 +01:00
fn update(&mut self, message: Message) {
match message {
2024-03-16 05:33:47 +01:00
Message::Increment => {
2019-11-26 22:31:46 +01:00
self.value += 1;
}
2024-03-16 05:33:47 +01:00
Message::Decrement => {
2019-11-26 22:31:46 +01:00
self.value -= 1;
}
}
}
fn view(&self) -> Column<'_, Message> {
column![
2024-03-16 05:33:47 +01:00
button("Increment").on_press(Message::Increment),
text(self.value).size(50),
2024-03-16 05:33:47 +01:00
button("Decrement").on_press(Message::Decrement)
]
.padding(20)
.align_x(Center)
2019-11-26 22:31:46 +01:00
}
}
2024-12-17 04:13:19 +01:00
#[cfg(test)]
mod tests {
use super::*;
2025-02-21 01:28:47 +01:00
use iced_test::{Error, simulator};
2024-12-17 04:13:19 +01:00
#[test]
fn it_counts() -> Result<(), Error> {
let mut counter = Counter { value: 0 };
let mut ui = simulator(counter.view());
let _ = ui.click("Increment")?;
let _ = ui.click("Increment")?;
let _ = ui.click("Decrement")?;
2024-12-17 04:13:19 +01:00
for message in ui.into_messages() {
counter.update(message);
}
assert_eq!(counter.value, 1);
let mut ui = simulator(counter.view());
assert!(ui.find("1").is_ok(), "Counter should display 1!");
2024-12-17 04:13:19 +01:00
Ok(())
}
}