make pretty printer tests understand revisions, and make them ignore the
should-fail annotation
This commit is contained in:
parent
9601e6f252
commit
aa19b41f25
2 changed files with 32 additions and 20 deletions
|
@ -355,15 +355,24 @@ pub fn is_test(config: &Config, testfile: &Path) -> bool {
|
|||
|
||||
pub fn make_test(config: &Config, testpaths: &TestPaths) -> test::TestDescAndFn {
|
||||
let early_props = header::early_props(config, &testpaths.file);
|
||||
|
||||
// The `should-fail` annotation doesn't apply to pretty tests,
|
||||
// since we run the pretty printer across all tests by default.
|
||||
// If desired, we could add a `should-fail-pretty` annotation.
|
||||
let should_panic = match config.mode {
|
||||
Pretty => test::ShouldPanic::No,
|
||||
_ => if early_props.should_fail {
|
||||
test::ShouldPanic::Yes
|
||||
} else {
|
||||
test::ShouldPanic::No
|
||||
}
|
||||
};
|
||||
|
||||
test::TestDescAndFn {
|
||||
desc: test::TestDesc {
|
||||
name: make_test_name(config, testpaths),
|
||||
ignore: early_props.ignore,
|
||||
should_panic: if early_props.should_fail {
|
||||
test::ShouldPanic::Yes
|
||||
} else {
|
||||
test::ShouldPanic::No
|
||||
},
|
||||
should_panic: should_panic,
|
||||
},
|
||||
testfn: make_test_closure(config, testpaths),
|
||||
}
|
||||
|
|
|
@ -213,12 +213,13 @@ fn run_valgrind_test(config: &Config, props: &TestProps, testpaths: &TestPaths)
|
|||
}
|
||||
|
||||
fn run_pretty_test(config: &Config, props: &TestProps, testpaths: &TestPaths) {
|
||||
// Note: because we run the --pretty tests on the code in run-pass etc,
|
||||
// we may see a list of revisions -- but we can just ignore them.
|
||||
// We cannot assert that the list is empty as we do elsewhere.
|
||||
//
|
||||
// assert!(props.revisions.is_empty(), "revisions not relevant here");
|
||||
for_each_revision(config, props, testpaths, run_pretty_test_revision);
|
||||
}
|
||||
|
||||
fn run_pretty_test_revision(config: &Config,
|
||||
props: &TestProps,
|
||||
testpaths: &TestPaths,
|
||||
revision: Option<&str>) {
|
||||
if props.pp_exact.is_some() {
|
||||
logv(config, "testing for exact pretty-printing".to_owned());
|
||||
} else {
|
||||
|
@ -234,7 +235,8 @@ fn run_pretty_test(config: &Config, props: &TestProps, testpaths: &TestPaths) {
|
|||
|
||||
let mut round = 0;
|
||||
while round < rounds {
|
||||
logv(config, format!("pretty-printing round {}", round));
|
||||
logv(config, format!("pretty-printing round {} revision {:?}",
|
||||
round, revision));
|
||||
let proc_res = print_source(config,
|
||||
props,
|
||||
testpaths,
|
||||
|
@ -242,8 +244,9 @@ fn run_pretty_test(config: &Config, props: &TestProps, testpaths: &TestPaths) {
|
|||
&props.pretty_mode);
|
||||
|
||||
if !proc_res.status.success() {
|
||||
fatal_proc_rec(None,
|
||||
&format!("pretty-printing failed in round {}", round),
|
||||
fatal_proc_rec(revision,
|
||||
&format!("pretty-printing failed in round {} revision {:?}",
|
||||
round, revision),
|
||||
&proc_res);
|
||||
}
|
||||
|
||||
|
@ -270,30 +273,30 @@ fn run_pretty_test(config: &Config, props: &TestProps, testpaths: &TestPaths) {
|
|||
expected = expected.replace(&cr, "").to_owned();
|
||||
}
|
||||
|
||||
compare_source(&expected, &actual);
|
||||
compare_source(revision, &expected, &actual);
|
||||
|
||||
// If we're only making sure that the output matches then just stop here
|
||||
if props.pretty_compare_only { return; }
|
||||
|
||||
// Finally, let's make sure it actually appears to remain valid code
|
||||
let proc_res = typecheck_source(config, props, testpaths, actual);
|
||||
|
||||
if !proc_res.status.success() {
|
||||
fatal_proc_rec(None, "pretty-printed source does not typecheck", &proc_res);
|
||||
fatal_proc_rec(revision, "pretty-printed source does not typecheck", &proc_res);
|
||||
}
|
||||
|
||||
if !props.pretty_expanded { return }
|
||||
|
||||
// additionally, run `--pretty expanded` and try to build it.
|
||||
let proc_res = print_source(config, props, testpaths, srcs[round].clone(), "expanded");
|
||||
if !proc_res.status.success() {
|
||||
fatal_proc_rec(None, "pretty-printing (expanded) failed", &proc_res);
|
||||
fatal_proc_rec(revision, "pretty-printing (expanded) failed", &proc_res);
|
||||
}
|
||||
|
||||
let ProcRes{ stdout: expanded_src, .. } = proc_res;
|
||||
let proc_res = typecheck_source(config, props, testpaths, expanded_src);
|
||||
if !proc_res.status.success() {
|
||||
fatal_proc_rec(
|
||||
None,
|
||||
revision,
|
||||
"pretty-printed source (expanded) does not typecheck",
|
||||
&proc_res);
|
||||
}
|
||||
|
@ -339,9 +342,9 @@ fn run_pretty_test(config: &Config, props: &TestProps, testpaths: &TestPaths) {
|
|||
};
|
||||
}
|
||||
|
||||
fn compare_source(expected: &str, actual: &str) {
|
||||
fn compare_source(revision: Option<&str>, expected: &str, actual: &str) {
|
||||
if expected != actual {
|
||||
error(None, "pretty-printed source does not match expected source");
|
||||
error(revision, "pretty-printed source does not match expected source");
|
||||
println!("\n\
|
||||
expected:\n\
|
||||
------------------------------------------\n\
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue