chiark / gitweb /
wdt: Break out w.piece_held()
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 28 Jan 2021 17:45:25 +0000 (17:45 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 28 Jan 2021 17:58:12 +0000 (17:58 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
wdriver.rs
wdriver/wdt-simple.rs

index 2c3704335edcc6af192d150c017f3b75ad71dc5d..3ac7379abcc60e2a8e9c3c091e511c4607a5a488 100644 (file)
@@ -800,6 +800,21 @@ impl<'g> WindowGuard<'g> {
     }
   }
 
+  #[throws(AE)]
+  pub fn piece_held(&'g self, pc: &'g str) -> Option<String> {
+    let held = self.execute_script(&format!(r##"
+        let pc = pieces['{}'];
+        return pc.held;
+                       "##, &pc))?;
+    let held = held.value();
+    dbg!(held);
+    match held {
+      serde_json::Value::Null => None,
+      serde_json::Value::String(s) => Some(s.to_owned()),
+      _ => Err(anyhow!("held check script gave {:?}", held))?,
+    }
+  }
+
   #[throws(AE)]
   pub fn posg2posw(&'g self, posg: Pos) -> WebPos {
     let mat = self.matrix.get_or_try_init(||{
index cd0caeee46576bd8ec80ada645480fee2a01da22..15a72a72eb58b5afe6d78737d9477ed09aa5fed6 100644 (file)
@@ -132,13 +132,8 @@ impl Ctx {
     let su = &mut self.su;
 
     let chk = |w: &WindowGuard<'_>| {
-      let held = w.execute_script(&format!(r##"
-        let pc = pieces['{}'];
-        return pc.held;
-                       "##, &pc))?;
-      let held = held.value();
-      dbg!(held);
-      ensure_eq!(held, &serde_json::Value::Null);
+      let held = w.piece_held(pc)?;
+      ensure_eq!(held, None);
       Ok::<_,AE>(())
     };