chiark / gitweb /
wdt-hand: New test for interleaved drag and drop
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 4 Apr 2021 11:17:07 +0000 (12:17 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 5 Apr 2021 00:47:37 +0000 (01:47 +0100)
This is supposed to have failed until just now.  In fact, it needed
some souping up first...

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
wdriver/wdt-hand.rs

index 9a0014b982c68d6b3b672d0951943a214c9c41f2..6cf723429630031c797433fce15d47a38dcb0321 100644 (file)
@@ -14,6 +14,7 @@ usual_wanted_tests!{Ctx, su}
 
 const HAND: &str = "6v1";
 const PAWN: &str = "7v1";
+const PAWN2: &str = "8v1";
 const ALICE: &str = "1#1";
 
 #[throws(AE)]
@@ -133,6 +134,70 @@ impl Ctx {
       chk(&mut w, HAND, None)?;
     }
   }
+
+  #[throws(AE)]
+  fn ungrab_race(&mut self){
+    let su = &mut self.su;
+
+    const P_ALICE: &str = PAWN;
+    const P_BOB:   &str = PAWN2;
+    const DEST: Pos = PosC::new(50, 20);
+
+    {
+      let mut w = su.w(&self.alice)?;
+
+      w.action_chain()
+        .move_pc(&w, P_ALICE)?
+        .click_and_hold()
+        .move_w(&w, DEST)?
+        .perform()
+        .did("alice, drag pawn over target")?;
+      w.synch()?;
+    }
+
+    {
+      let mut w = su.w(&self.bob)?;
+
+      w.action_chain()
+        .move_pc(&w, P_BOB)?
+        .click_and_hold()
+        .move_w(&w, DEST)?
+        .release()
+        .perform()
+        .did("bob, drag pawn to target")?;
+      w.synch()?;
+    }
+
+    {
+      let mut w = su.w(&self.alice)?;
+
+      w.action_chain()
+        .release()
+        .perform()
+        .did("alice, drop pawn on target")?;
+      w.synch()?;
+    }
+
+    let mut chk_alice_on_top = |pl|{
+      let mut w = su.w(pl)?;
+      w.synch()?;
+      let pcs = w.pieces()?;
+      let find = |pc| {
+        let vpid = w.piece_vpid(pc).unwrap();
+        pcs.iter().enumerate()
+          .find_map(|(ix, wp)| if wp.piece == vpid { Some(ix) } else { None })
+          .unwrap()
+      };
+      assert!(
+        find(P_ALICE) > find(P_BOB)
+      );
+      Ok::<_,AE>(())
+    };
+
+
+    chk_alice_on_top(&self.alice).did("chk alice")?;
+    chk_alice_on_top(&self.bob  ).did("chk bob"  )?;
+  }
 }
 
 #[throws(AE)]
@@ -141,6 +206,8 @@ fn tests(UsualSetup { su, alice, bob, ..}: UsualSetup) {
 
   test!(c, "claim", c.claim()?);
 
+  test!(c, "ungrab-race", c.ungrab_race()?);
+
   debug!("finishing");
 }