use iced::Center; use iced::widget::{Column, button, column, text}; pub fn main() -> iced::Result { iced::run("A cool counter", Counter::update, Counter::view) } #[derive(Default)] struct Counter { value: i64, } #[derive(Debug, Clone, Copy)] enum Message { Increment, Decrement, } impl Counter { fn update(&mut self, message: Message) { match message { Message::Increment => { self.value += 1; } Message::Decrement => { self.value -= 1; } } } fn view(&self) -> Column { column![ button("Increment").on_press(Message::Increment), text(self.value).size(50), button("Decrement").on_press(Message::Decrement) ] .padding(20) .align_x(Center) } } #[cfg(test)] mod tests { use super::*; use iced_test::selector::text; use iced_test::{Error, simulator}; #[test] fn it_counts() -> Result<(), Error> { let mut counter = Counter { value: 0 }; let mut ui = simulator(counter.view()); let _ = ui.click(text("Increment"))?; let _ = ui.click(text("Increment"))?; let _ = ui.click(text("Decrement"))?; for message in ui.into_messages() { counter.update(message); } assert_eq!(counter.value, 1); let mut ui = simulator(counter.view()); assert!(ui.find(text("1")).is_ok(), "Counter should display 1!"); Ok(()) } }