/ tests / e2e / src / main.rs
main.rs
 1  #![allow(dead_code)]
 2  
 3  mod actor;
 4  mod locators;
 5  mod scenarios;
 6  mod tasks;
 7  
 8  use actor::Actor;
 9  use playwright_rs::{BrowserContextOptions, LaunchOptions, Playwright};
10  use tasks::Navigate;
11  
12  macro_rules! scenario {
13      ($actor:expr, $name:expr, $run:path, $p:expr, $f:expr) => {{
14          match $run(&$actor).await {
15              Ok(()) => {
16                  $p += 1;
17                  println!("  ✓ {}", $name);
18              }
19              Err(e) => {
20                  $f += 1;
21                  eprintln!("  ✗ {}: {e}", $name);
22              }
23          }
24      }};
25  }
26  
27  #[tokio::main]
28  async fn main() {
29      let playwright = Playwright::launch().await.expect("launch playwright");
30      let browser = playwright
31          .chromium()
32          .launch_with_options(LaunchOptions::default().headless(false))
33          .await
34          .expect("launch browser");
35  
36      let context = browser
37          .new_context_with_options(
38              BrowserContextOptions::builder()
39                  .permissions(vec![
40                      "clipboard-read".into(),
41                      "clipboard-write".into(),
42                      "notifications".into(),
43                  ])
44                  .build(),
45          )
46          .await
47          .expect("create context");
48      let page = context.new_page().await.expect("new page");
49      let actor = Actor::new(page);
50      actor.attempts_to(Navigate::to("/")).await.expect("navigate to app");
51  
52      let mut passed = 0u32;
53      let mut failed = 0u32;
54  
55      scenario!(actor, "navigation", scenarios::navigation::run, passed, failed);
56      scenario!(actor, "layout", scenarios::layout::run, passed, failed);
57      scenario!(actor, "connected home", scenarios::connected_home::run, passed, failed);
58      scenario!(actor, "status badge", scenarios::status_badge::run, passed, failed);
59      scenario!(actor, "network sheet", scenarios::network_sheet::run, passed, failed);
60      scenario!(actor, "command palette", scenarios::command_palette::run, passed, failed);
61      scenario!(actor, "sleep panel", scenarios::sleep_panel::run, passed, failed);
62      scenario!(actor, "filesystem panel", scenarios::filesystem_panel::run, passed, failed);
63      scenario!(actor, "measurement panel", scenarios::measurement_panel::run, passed, failed);
64      scenario!(actor, "flash panel", scenarios::flash_panel::run, passed, failed);
65      scenario!(actor, "not found", scenarios::not_found::run, passed, failed);
66  
67      context.close().await.ok();
68      browser.close().await.ok();
69  
70      println!("\n{passed} passed, {failed} failed");
71      if failed > 0 {
72          std::process::exit(1);
73      }
74  }