Rollup merge of #38289 - bluss:mir-verbose-test-fail, r=michaelwoerister

A more verbose matching failure for mir tests

This makes it easier to work with mir test failures during development.

- Show which expected line was not found
- Show full expected output
- Show full actual output
This commit is contained in:
Alex Crichton 2016-12-20 11:16:30 -08:00 committed by GitHub
commit dfa9948d76

View file

@ -2294,7 +2294,18 @@ actual:\n\
};
}
if !found {
panic!("ran out of mir dump output to match against");
let normalize_all = dumped_string.lines()
.map(nocomment_mir_line)
.filter(|l| !l.is_empty())
.collect::<Vec<_>>()
.join("\n");
panic!("ran out of mir dump output to match against.\n\
Did not find expected line: {:?}\n\
Expected:\n{}\n\
Actual:\n{}",
expected_line,
expected_content.join("\n"),
normalize_all);
}
}
}
@ -2439,11 +2450,14 @@ enum TargetLocation {
}
fn normalize_mir_line(line: &str) -> String {
let no_comments = if let Some(idx) = line.find("//") {
nocomment_mir_line(line).replace(char::is_whitespace, "")
}
fn nocomment_mir_line(line: &str) -> &str {
if let Some(idx) = line.find("//") {
let (l, _) = line.split_at(idx);
l
l.trim_right()
} else {
line
};
no_comments.replace(char::is_whitespace, "")
}
}