summaryrefslogtreecommitdiffstats
path: root/examples/todos
diff options
context:
space:
mode:
authorLibravatar Héctor <hector@hecrj.dev>2024-12-17 17:28:46 +0100
committerLibravatar GitHub <noreply@github.com>2024-12-17 17:28:46 +0100
commitf2c9b6b2ffc50d67d9789e77cb55eeb2a0ebe470 (patch)
tree4941905adf134468acc079610bb6f25d7461d543 /examples/todos
parenta687a837653a576cb0599f7bc8ecd9c6054213a9 (diff)
parente5545aaa579f428e45853d125ac86155d8395104 (diff)
downloadiced-f2c9b6b2ffc50d67d9789e77cb55eeb2a0ebe470.tar.gz
iced-f2c9b6b2ffc50d67d9789e77cb55eeb2a0ebe470.tar.bz2
iced-f2c9b6b2ffc50d67d9789e77cb55eeb2a0ebe470.zip
Merge pull request #2698 from iced-rs/feature/test-crate
Headless Mode Testing
Diffstat (limited to 'examples/todos')
-rw-r--r--examples/todos/Cargo.toml5
-rw-r--r--examples/todos/snapshots/creates_a_new_task.sha2561
-rw-r--r--examples/todos/src/main.rs53
3 files changed, 55 insertions, 4 deletions
diff --git a/examples/todos/Cargo.toml b/examples/todos/Cargo.toml
index 0d72be86..16f4fdd2 100644
--- a/examples/todos/Cargo.toml
+++ b/examples/todos/Cargo.toml
@@ -20,12 +20,15 @@ tracing-subscriber = "0.3"
[target.'cfg(target_arch = "wasm32")'.dependencies]
iced.workspace = true
-iced.features = ["debug", "webgl"]
+iced.features = ["debug", "webgl", "fira-sans"]
uuid = { version = "1.0", features = ["js"] }
web-sys = { workspace = true, features = ["Window", "Storage"] }
wasm-timer.workspace = true
+[dev-dependencies]
+iced_test.workspace = true
+
[package.metadata.deb]
assets = [
["target/release-opt/todos", "usr/bin/iced-todos", "755"],
diff --git a/examples/todos/snapshots/creates_a_new_task.sha256 b/examples/todos/snapshots/creates_a_new_task.sha256
new file mode 100644
index 00000000..193132c5
--- /dev/null
+++ b/examples/todos/snapshots/creates_a_new_task.sha256
@@ -0,0 +1 @@
+3160686067cb7c738802009cdf2f3c5f5a5bd8c89ada70517388b7adbe64c313 \ No newline at end of file
diff --git a/examples/todos/src/main.rs b/examples/todos/src/main.rs
index 25e3ead2..a5bca235 100644
--- a/examples/todos/src/main.rs
+++ b/examples/todos/src/main.rs
@@ -15,7 +15,7 @@ pub fn main() -> iced::Result {
iced::application(Todos::title, Todos::update, Todos::view)
.subscription(Todos::subscription)
- .font(include_bytes!("../fonts/icons.ttf").as_slice())
+ .font(Todos::ICON_FONT)
.window_size((500.0, 800.0))
.run_with(Todos::new)
}
@@ -48,6 +48,8 @@ enum Message {
}
impl Todos {
+ const ICON_FONT: &'static [u8] = include_bytes!("../fonts/icons.ttf");
+
fn new() -> (Self, Command<Message>) {
(
Self::Loading,
@@ -449,11 +451,10 @@ fn empty_message(message: &str) -> Element<'_, Message> {
}
// Fonts
-const ICONS: Font = Font::with_name("Iced-Todos-Icons");
fn icon(unicode: char) -> Text<'static> {
text(unicode.to_string())
- .font(ICONS)
+ .font(Font::with_name("Iced-Todos-Icons"))
.width(20)
.align_x(Center)
}
@@ -584,3 +585,49 @@ impl SavedState {
Ok(())
}
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ use iced::{Settings, Theme};
+ use iced_test::selector::text;
+ use iced_test::{Error, Simulator};
+
+ fn simulator(todos: &Todos) -> Simulator<Message> {
+ Simulator::with_settings(
+ Settings {
+ fonts: vec![Todos::ICON_FONT.into()],
+ ..Settings::default()
+ },
+ todos.view(),
+ )
+ }
+
+ #[test]
+ fn it_creates_a_new_task() -> Result<(), Error> {
+ let (mut todos, _command) = Todos::new();
+ let _command = todos.update(Message::Loaded(Err(LoadError::File)));
+
+ let mut ui = simulator(&todos);
+ let _input = ui.click("new-task")?;
+
+ let _ = ui.typewrite("Create the universe");
+ let _ = ui.tap_key(keyboard::key::Named::Enter);
+
+ for message in ui.into_messages() {
+ let _command = todos.update(message);
+ }
+
+ let mut ui = simulator(&todos);
+ let _ = ui.find(text("Create the universe"))?;
+
+ let snapshot = ui.snapshot(&Theme::Dark)?;
+ assert!(
+ snapshot.matches_hash("snapshots/creates_a_new_task")?,
+ "snapshots should match!"
+ );
+
+ Ok(())
+ }
+}