use js_sys::Error;
use wasm_bindgen::prelude::*;
pub struct Worker {}
#[wasm_bindgen]
extern "C" {
type WorkerError;
#[wasm_bindgen(method, getter, structural)]
fn stack(this: &WorkerError) -> JsValue;
#[wasm_bindgen(js_name = "__wbg_test_output_writeln")]
fn write_output_line(data: JsValue);
}
impl Worker {
pub fn new() -> Worker {
Worker {}
}
}
impl super::Formatter for Worker {
fn writeln(&self, line: &str) {
write_output_line(JsValue::from(String::from(line)));
}
fn log_test(&self, name: &str, result: &Result<(), JsValue>) {
let s = if result.is_ok() { "ok" } else { "FAIL" };
self.writeln(&format!("test {} ... {}", name, s));
}
fn stringify_error(&self, err: &JsValue) -> String {
let error = Error::from(err.clone());
let name = String::from(error.name());
let message = String::from(error.message());
let err = WorkerError::from(err.clone());
let stack = err.stack();
let header = format!("{}: {}", name, message);
let stack = match stack.as_string() {
Some(stack) => stack,
None => return header,
};
if stack.contains(&header) {
return stack;
}
format!("{}\n{}", header, stack)
}
}