summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/typeset.rs29
1 files changed, 21 insertions, 8 deletions
diff --git a/tests/typeset.rs b/tests/typeset.rs
index 620e11a6..cd58bdab 100644
--- a/tests/typeset.rs
+++ b/tests/typeset.rs
@@ -184,8 +184,9 @@ fn test_part(src: &str, i: usize, lines: u32, env: &mut Env) -> (bool, Vec<Frame
let (compare_ref, ref_diags) = parse_metadata(src, &map);
let mut scope = library::new();
- let panicked = Rc::new(RefCell::new(false));
- register_helpers(&mut scope, Rc::clone(&panicked));
+
+ let panics = Rc::new(RefCell::new(vec![]));
+ register_helpers(&mut scope, Rc::clone(&panics));
// We want to have "unbounded" pages, so we allow them to be infinitely
// large and fit them to match their content.
@@ -206,7 +207,16 @@ fn test_part(src: &str, i: usize, lines: u32, env: &mut Env) -> (bool, Vec<Frame
diags.sort_by_key(|d| d.span);
let mut ok = true;
- if *panicked.borrow() {
+
+ for panic in &*panics.borrow() {
+ let line = map.location(panic.pos).unwrap().line;
+ println!(" Assertion failed in line {} ❌", lines + line);
+ if let (Some(lhs), Some(rhs)) = (&panic.lhs, &panic.rhs) {
+ println!(" Left: {:?}", lhs);
+ println!(" Right: {:?}", rhs);
+ } else {
+ println!(" Missing argument.");
+ }
ok = false;
}
@@ -268,7 +278,13 @@ fn parse_metadata(src: &str, map: &LineMap) -> (bool, SpanVec<Diag>) {
(compare_ref, diags)
}
-fn register_helpers(scope: &mut Scope, panicked: Rc<RefCell<bool>>) {
+struct Panic {
+ pos: Pos,
+ lhs: Option<Value>,
+ rhs: Option<Value>,
+}
+
+fn register_helpers(scope: &mut Scope, panics: Rc<RefCell<Vec<Panic>>>) {
pub fn f(_: &mut EvalContext, args: &mut Args) -> Value {
let (array, dict) = args.drain();
let iter = array
@@ -294,10 +310,7 @@ fn register_helpers(scope: &mut Scope, panicked: Rc<RefCell<bool>>) {
let lhs = args.require::<Value>(ctx, "left-hand side");
let rhs = args.require::<Value>(ctx, "right-hand side");
if lhs != rhs {
- *panicked.borrow_mut() = true;
- println!(" Assertion failed ❌");
- println!(" left: {:?}", lhs);
- println!(" right: {:?}", rhs);
+ panics.borrow_mut().push(Panic { pos: args.span.start, lhs, rhs });
Value::Str(format!("(panic)"))
} else {
Value::None