chiark / gitweb /
wip console logging
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 29 Dec 2020 01:05:11 +0000 (01:05 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Tue, 29 Dec 2020 01:05:11 +0000 (01:05 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Cargo.lock.example
wdriver.rs
wdriver/Cargo.toml

index 1630ec4cdf66c18c4654107fcf9725d92172cb2f..765eaa91a3f10a381e441861c6b2c23b25c06d27 100644 (file)
@@ -1588,6 +1588,8 @@ dependencies = [
  "otter",
  "parking_lot",
  "regex",
+ "serde",
+ "serde_json",
  "structopt",
  "strum",
  "thirtyfour_sync",
index 3030b2c36e0efff05efeb2b581063d1eacca4173..f800141f3f4ce8702b72abb39e2313c28be03637 100644 (file)
@@ -15,6 +15,7 @@ pub use nix::unistd::LinkatFlags;
 pub use num_derive::FromPrimitive;
 pub use parking_lot::{Mutex, MutexGuard};
 pub use regex::{Captures, Regex};
+pub use serde::{Serialize, Deserialize};
 pub use structopt::StructOpt;
 pub use strum::{EnumIter, EnumProperty, IntoEnumIterator, IntoStaticStr};
 pub use thirtyfour_sync as t4;
@@ -669,17 +670,19 @@ fn prepare_thirtyfour() -> (T4d, ScreenShotCount, Vec<String>) {
         var saved = [ ];
         var new_console = { saved: saved};
         for (k of ['log','error','warn','info']) {
-            var orig = orig_console[k];
-            new_console[k] = function() {
-                saved.push([k, arguments]);
-                orig.apply(orig_console, arguments);
-            }
+            (function(k){
+                var orig = orig_console[k];
+                new_console[k] = function() {
+                    saved.push([k, arguments]);
+                    orig.apply(orig_console, arguments);
+                }
+            })(k);
         }
         return new_console;
     })();
 
     console.log('wdriver.rs console log starts');
-"#)?;
+  "#)?;
 
   let cons = driver.execute_script(r#"return window.console.saved;"#)?;
   eprintln!("{:?}", &cons.value());
@@ -774,6 +777,35 @@ impl<'g> Deref for WindowGuard<'g> {
   fn deref(&self) -> &T4d { &self.su.driver }
 }
 
+impl<'g> Drop for WindowGuard<'g> {
+  fn drop(&mut self) {
+    (||{
+      let got = self.su.driver.execute_script(r#"
+        var returning = window.console.saved;
+        window.console.saved = [];
+        return returning;
+      "#).context("get log")?;
+
+      for ent in got.value().as_array()
+        .ok_or(anyhow!("saved isn't an array?"))?
+      {
+        #[derive(Deserialize)]
+        struct LogEnt(String, Vec<serde_json::Value>);
+
+        let ent: LogEnt = serde_json::from_value(ent.clone())
+          .context("parse log entry")?;
+        eprint!("JS {} {}:", &self.w.name, &ent.0);
+        for a in ent.1 { eprint!(" {}", a); }
+        eprintln!("");
+      }
+      Ok::<_,AE>(())
+    })()
+      .with_context(|| self.w.name.clone())
+      .context("update log")
+      .just_warn();
+  }
+}
+
 pub trait Screenshottable {
   fn screenshot(&mut self, slug: &str) -> Result<(),AE>;
 }
index 56ff362a3c9e196e0c59fd83957ac2bfe45cb09a..4564bb76b5c1237d5b47dabb2b54d4badaaddac7 100644 (file)
@@ -26,6 +26,8 @@ num-derive = "0.3"
 num-traits = "0.2"
 parking_lot = "0.11"
 regex = "1"
+serde = { version = "1", features = ["derive","rc"] }
+serde_json = "1"
 structopt = "0.3"
 strum = { version = "0.20", features = ['derive'] }
 thirtyfour_sync = "0.21"