chiark / gitweb /
wdt-simple: Break out check()
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 5 Apr 2021 16:37:44 +0000 (17:37 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 5 Apr 2021 16:37:44 +0000 (17:37 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
wdriver/wdt-simple.rs

index 9730c578765090ece92365263ff8cd26f2670881..b40699dc80e16daf10f3e176b80cc5708ce7b60c 100644 (file)
@@ -204,25 +204,6 @@ impl Ctx {
 
     dbg!(&sides);
 
-    let paused = su.pause_otter()?;
-
-    for side in &sides {
-      let w = su.w(side.window)?;
-
-      w.action_chain()
-        .move_w(&w, side.start)?
-        .click()
-        .release()
-
-        .click_and_hold()
-        .move_w(&w, side.try_end)?
-        .release()
-
-        .perform()
-        .did("conflicting drag")?;
-    }
-
-    paused.resume()?;
 
     #[derive(Debug)]
     struct Got<'s> {
@@ -238,33 +219,61 @@ impl Ctx {
       fn deref<'t>(&'t self) -> &'t Side<'s> { &self.side }
     }
 
-    let gots = sides.iter().map(|side|{
-      let mut w = su.w(side.window)?;
-      w.synch()?;
-      let p = w.find_piece(pc)?;
-      let now = p.posg()?;
+    let check = |su: &mut Setup|{
+
+      let gots = sides.iter().map(|side|{
+        let mut w = su.w(side.window)?;
+        w.synch()?;
+        let p = w.find_piece(pc)?;
+        let now = p.posg()?;
+
+        let log = w.retrieve_log(Html::lit("black knight"))?;
+        let held = w.piece_held(&pc)?;
+        let client = w.client()?;
+        let yes = held.as_ref() == Some(&client);
 
-      let log = w.retrieve_log(Html::lit("black knight"))?;
-      let held = w.piece_held(&pc)?;
-      let client = w.client()?;
-      let yes = held.as_ref() == Some(&client);
+        Ok::<_,AE>(Got { side, now, log, held, client, yes })
+      }).collect::<Result<Vec<_>,AE>>()?;
 
-      Ok::<_,AE>(Got { side, now, log, held, client, yes })
-    }).collect::<Result<Vec<_>,AE>>()?;
+      dbg!(&gots);
 
-    dbg!(&gots);
+      let y = gots.iter().filter(|got|  got.yes).next().expect("y");
+      let n = gots.iter().filter(|got| !got.yes).next().expect("n");
+      assert_eq!(y.now, y.try_end);
+      assert_eq!(n.now, y.try_end);
+      assert_eq!(n.now, y.try_end);
+      assert_eq!(n.held, y.held);
 
-    let y = gots.iter().filter(|got|  got.yes).next().expect("y");
-    let n = gots.iter().filter(|got| !got.yes).next().expect("n");
-    assert_eq!(y.now, y.try_end);
-    assert_eq!(n.now, y.try_end);
-    assert_eq!(n.now, y.try_end);
-    assert_eq!(n.held, y.held);
+      for got in &gots {
+        let conflict = got.log.find_conflict().is_some();
+        assert_eq!(conflict, !got.yes);
+      }
 
-    for got in &gots {
-      let conflict = got.log.find_conflict().is_some();
-      assert_eq!(conflict, !got.yes);
+      Ok::<_,AE>(())
+    };
+
+
+    let paused = su.pause_otter()?;
+
+    for side in &sides {
+      let w = su.w(side.window)?;
+
+      w.action_chain()
+        .move_w(&w, side.start)?
+        .click()
+        .release()
+
+        .click_and_hold()
+        .move_w(&w, side.try_end)?
+        .release()
+
+        .perform()
+        .did("conflicting drag")?;
     }
+
+    paused.resume()?;
+
+    check(su).did("conflicting drag, check")?;
   }
 }