diff --git a/examples/test/.taurignore b/examples/test/.taurignore new file mode 100644 index 0000000..1ebdc6d --- /dev/null +++ b/examples/test/.taurignore @@ -0,0 +1,3 @@ +/src +/public +/Cargo.toml \ No newline at end of file diff --git a/examples/test/src/dialog.rs b/examples/test/src/dialog.rs new file mode 100644 index 0000000..c852a77 --- /dev/null +++ b/examples/test/src/dialog.rs @@ -0,0 +1,97 @@ +use anyhow::ensure; +use tauri_sys::dialog::{FileDialogBuilder, MessageDialogBuilder, MessageDialogType}; + +pub async fn ask() -> anyhow::Result<()> { + let mut builder = MessageDialogBuilder::new(); + builder.set_title("Tauri"); + builder.set_type(MessageDialogType::Warning); + + let works = builder + .ask("Does this work? \n Click Yes to mark this test as passing") + .await?; + + ensure!(works); + + Ok(()) +} + +pub async fn confirm() -> anyhow::Result<()> { + let mut builder = MessageDialogBuilder::new(); + builder.set_title("Tauri"); + builder.set_type(MessageDialogType::Warning); + + let works = builder + .confirm("Does this work? \n Click Ok to mark this test as passing") + .await?; + + ensure!(works); + + Ok(()) +} + +pub async fn message() -> anyhow::Result<()> { + let mut builder = MessageDialogBuilder::new(); + builder.set_title("Tauri"); + builder.set_type(MessageDialogType::Warning); + + builder.message("This is a message just for you!").await?; + + Ok(()) +} + +pub async fn pick_file() -> anyhow::Result<()> { + let mut builder = FileDialogBuilder::new(); + builder.set_title("Select a file to mark this test as passing"); + + let file = builder.pick_file().await?; + + ensure!(file.is_some()); + + Ok(()) +} + +pub async fn pick_files() -> anyhow::Result<()> { + let mut builder = FileDialogBuilder::new(); + builder.set_title("Select a multiple files to mark this test as passing"); + + let file = builder.pick_files().await?; + + ensure!(file.is_some()); + ensure!(file.unwrap().len() > 1); + + Ok(()) +} + +pub async fn pick_folder() -> anyhow::Result<()> { + let mut builder = FileDialogBuilder::new(); + builder.set_title("Select a folder to mark this test as passing"); + + let file = builder.pick_folder().await?; + + ensure!(file.is_some()); + + Ok(()) +} + +pub async fn pick_folders() -> anyhow::Result<()> { + let mut builder = FileDialogBuilder::new(); + builder.set_title("Select a multiple folders to mark this test as passing"); + + let file = builder.pick_folders().await?; + + ensure!(file.is_some()); + ensure!(file.unwrap().len() > 1); + + Ok(()) +} + +pub async fn save() -> anyhow::Result<()> { + let mut builder = FileDialogBuilder::new(); + builder.set_title("Select a file to mark this test as passing"); + + let file = builder.save().await?; + + ensure!(file.is_some()); + + Ok(()) +} \ No newline at end of file diff --git a/examples/test/src/main.rs b/examples/test/src/main.rs index eaff250..e4ff326 100644 --- a/examples/test/src/main.rs +++ b/examples/test/src/main.rs @@ -2,6 +2,7 @@ mod app; mod clipboard; mod event; mod window; +mod dialog; extern crate console_error_panic_hook; use std::future::Future; @@ -58,6 +59,72 @@ where } } +#[cfg(not(feature = "ci"))] +#[component] +pub async fn InteractiveTest<'a, G: Html, F>(cx: Scope<'a>, props: TestProps<'a, F>) -> View +where + F: Future> + 'a, +{ + let mut test = Some(props.test); + let render_test = create_signal(cx, false); + + let run_test = |_| { + render_test.set(true); + }; + + view! { cx, + (if *render_test.get() { + let test = test.take().unwrap(); + + let fallback = view! { cx, + tr { + td { code { (props.name.to_string()) } } + td { + "Running Test..." + } + } + }; + + view! { cx, + Suspense(fallback=fallback) { + Test(name=props.name, test=test) + } + } + } else { + view! { cx, + tr { + td { code { (props.name.to_string()) } } + td { + button(on:click=run_test) { "Run Interactive Test"} + } + } + } + }) + } +} + +#[cfg(feature = "ci")] +#[component] +pub async fn InteractiveTest<'a, G: Html, F>(cx: Scope<'a>, _props: TestProps<'a, F>) -> View +where + F: Future> + 'a, +{ + view! { cx, "Interactive tests are not run in CI mode" } +} + +#[component] +pub async fn Terminate<'a, G: Html>(cx: Scope<'a>) -> View { + #[cfg(feature = "ci")] + sycamore::suspense::await_suspense(cx, async { + tauri_sys::process::exit(0).await; + }) + .await; + + view! { + cx, + } +} + fn main() { wasm_logger::init(wasm_logger::Config::default()); @@ -69,11 +136,6 @@ fn main() { })); sycamore::render(|cx| { - #[cfg(feature = "ci")] - sycamore::suspense::await_suspense(cx, async { - tauri_sys::process::exit(0).await; - }); - view! { cx, table { tbody { @@ -83,7 +145,18 @@ fn main() { Test(name="app::get_tauri_version",test=app::get_tauri_version()) Test(name="clipboard::read_text | clipboard::write_text",test=clipboard::test()) Test(name="event::emit",test=event::emit()) + InteractiveTest(name="dialog::message",test=dialog::message()) + InteractiveTest(name="dialog::ask",test=dialog::ask()) + InteractiveTest(name="dialog::confirm",test=dialog::confirm()) + InteractiveTest(name="dialog::pick_file",test=dialog::pick_file()) + InteractiveTest(name="dialog::pick_files",test=dialog::pick_files()) + InteractiveTest(name="dialog::pick_folder",test=dialog::pick_folder()) + InteractiveTest(name="dialog::pick_folders",test=dialog::pick_folders()) + InteractiveTest(name="dialog::save",test=dialog::save()) + // Test(name="window::WebviewWindow::new",test=window::create_window()) + + Terminate } } }