From: Ian Jackson Date: Mon, 4 Jan 2021 00:00:43 +0000 (+0000) Subject: wip links, new test fails X-Git-Tag: otter-0.2.0~34 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=9bb8d6d1865c22727dec60a8640ff0955d1968c5;p=otter.git wip links, new test fails Signed-off-by: Ian Jackson --- diff --git a/specs/test.table.toml b/specs/test.table.toml index 3e1f0122..8e69939d 100644 --- a/specs/test.table.toml +++ b/specs/test.table.toml @@ -6,6 +6,9 @@ timezone = "Europe/London" #players = [ { account_glob = "server:*" } ] +[links] +Voice = "https://jitsi.example.com/initial" + [[players]] account_glob = "server:*" diff --git a/wdriver.rs b/wdriver.rs index a9b97460..30b6ef90 100644 --- a/wdriver.rs +++ b/wdriver.rs @@ -5,7 +5,7 @@ #![feature(unboxed_closures)] #![feature(fn_traits)] -pub use anyhow::{anyhow, Context}; +pub use anyhow::{anyhow, ensure, Context}; pub use boolinator::Boolinator; pub use fehler::{throw, throws}; pub use if_chain::if_chain; diff --git a/wdriver/wdt-altergame.rs b/wdriver/wdt-altergame.rs new file mode 100644 index 00000000..a2c3b47e --- /dev/null +++ b/wdriver/wdt-altergame.rs @@ -0,0 +1,58 @@ +// Copyright 2020 Ian Jackson +// SPDX-License-Identifier: AGPL-3.0-or-later +// There is NO WARRANTY. + +use otter_webdriver_tests::*; + +use otter::spec::LinkKind; + +struct Context { + su: Setup, + alice: Window, +} + +impl Context { + #[throws(AE)] + fn check_link(&mut self, desc: &str, url: Option<&str>) { + let mut w = self.su.w(&self.alice)?; + w.synch()?; + let container = w.find_element(By::Id("links"))?; + let relevant = container + .find_elements(By::Tag("a"))?; + let relevant : Vec<_> = relevant + .iter() + .map(|e| Ok::<_,AE>((e, e.text()?))) + .collect::,AE>>()?; + let relevant : Vec<_> = relevant + .iter() + .filter(|(_e, txt)| txt == desc) + .collect(); + ensure!(relevant.len() == url.iter().len()); + if let Some(url) = url { + ensure!(relevant[0].0.get_attribute("href")? + .as_ref().map(|s| s.as_str()) == Some(url)); + } + } + + #[throws(AE)] + fn test_link(&mut self, kind: LinkKind, desc: &str, url: &str) { + self.su.ds.otter(&["set-link", &kind.to_string(), url])?; + self.check_link(desc, Some(url))?; + } +} + +#[throws(AE)] +fn main(){ + let (mut su, inst) = setup(module_path!()).always_context("setup")?; + let [alice, _] : [Window; 2] = + su.setup_static_users(&inst)?.try_into().unwrap(); + debug!("ok {:?}", alice); + + let mut c = Context { su, alice }; + + c.check_link("Info", None)?; + c.check_link("Voice", Some("https://jitsi.example.com/initial"))?; + c.test_link(LinkKind::Info, "Info", "https://www.example.org/newinfo")?; + + info!("ok"); +}