Fold rustfix tests back into the UI test suite
This commit is contained in:
parent
a563027cb8
commit
6f2d023028
29 changed files with 223 additions and 80 deletions
|
@ -326,7 +326,7 @@ impl<'a> Builder<'a> {
|
|||
test::TheBook, test::UnstableBook, test::RustcBook,
|
||||
test::Rustfmt, test::Miri, test::Clippy, test::RustdocJS, test::RustdocTheme,
|
||||
// Run run-make last, since these won't pass without make on Windows
|
||||
test::RunMake, test::RustdocUi, test::Rustfix),
|
||||
test::RunMake, test::RustdocUi),
|
||||
Kind::Bench => describe!(test::Crate, test::CrateLibrustc),
|
||||
Kind::Doc => describe!(doc::UnstableBook, doc::UnstableBookGen, doc::TheBook,
|
||||
doc::Standalone, doc::Std, doc::Test, doc::WhitelistedRustc, doc::Rustc,
|
||||
|
|
|
@ -716,12 +716,6 @@ default_test!(RunFail {
|
|||
suite: "run-fail"
|
||||
});
|
||||
|
||||
default_test!(Rustfix {
|
||||
path: "src/test/rustfix",
|
||||
mode: "rustfix",
|
||||
suite: "rustfix"
|
||||
});
|
||||
|
||||
default_test!(RunPassValgrind {
|
||||
path: "src/test/run-pass-valgrind",
|
||||
mode: "run-pass-valgrind",
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
// Point at the captured immutable outer variable
|
||||
|
||||
fn foo(mut f: Box<FnMut()>) {
|
||||
f();
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut y = true;
|
||||
foo(Box::new(move || y = false) as Box<_>); //~ ERROR cannot assign to captured outer variable
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
// Point at the captured immutable outer variable
|
||||
|
||||
fn foo(mut f: Box<FnMut()>) {
|
||||
f();
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let y = true;
|
||||
foo(Box::new(move || y = false) as Box<_>); //~ ERROR cannot assign to captured outer variable
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
error[E0594]: cannot assign to immutable item `y`
|
||||
--> $DIR/closure-immutable-outer-variable.rs:19:26
|
||||
--> $DIR/closure-immutable-outer-variable.rs:21:26
|
||||
|
|
||||
LL | foo(Box::new(move || y = false) as Box<_>); //~ ERROR cannot assign to captured outer variable
|
||||
| ^^^^^^^^^ cannot mutate
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
// Point at the captured immutable outer variable
|
||||
|
||||
fn foo(mut f: Box<FnMut()>) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error[E0594]: cannot assign to captured outer variable in an `FnMut` closure
|
||||
--> $DIR/closure-immutable-outer-variable.rs:19:26
|
||||
--> $DIR/closure-immutable-outer-variable.rs:21:26
|
||||
|
|
||||
LL | let y = true;
|
||||
| - help: consider making `y` mutable: `mut y`
|
||||
|
|
16
src/test/ui/suggestions/issue-45562.fixed
Normal file
16
src/test/ui/suggestions/issue-45562.fixed
Normal file
|
@ -0,0 +1,16 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
#[no_mangle] pub static RAH: usize = 5;
|
||||
//~^ ERROR const items should never be #[no_mangle]
|
||||
|
||||
fn main() {}
|
|
@ -8,6 +8,8 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
#[no_mangle] pub const RAH: usize = 5;
|
||||
//~^ ERROR const items should never be #[no_mangle]
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error: const items should never be #[no_mangle]
|
||||
--> $DIR/issue-45562.rs:11:14
|
||||
--> $DIR/issue-45562.rs:13:14
|
||||
|
|
||||
LL | #[no_mangle] pub const RAH: usize = 5;
|
||||
| ---------^^^^^^^^^^^^^^^^
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
extern crate std as other_std;
|
||||
fn main() {}
|
||||
//~^^ ERROR the name `std` is defined multiple times [E0259]
|
|
@ -8,6 +8,8 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
extern crate std;
|
||||
fn main() {}
|
||||
//~^^ ERROR the name `std` is defined multiple times [E0259]
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error[E0259]: the name `std` is defined multiple times
|
||||
--> $DIR/issue-45799-bad-extern-crate-rename-suggestion-formatting.rs:11:1
|
||||
--> $DIR/issue-45799-bad-extern-crate-rename-suggestion-formatting.rs:13:1
|
||||
|
|
||||
LL | extern crate std;
|
||||
| ^^^^^^^^^^^^^^^^^ `std` reimported here
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
#![allow(unused)]
|
||||
|
||||
fn light_flows_our_war_of_mocking_words(and_yet: &usize) -> usize {
|
||||
and_yet + 1
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let behold: isize = 2;
|
||||
let with_tears: usize = 3;
|
||||
light_flows_our_war_of_mocking_words(&(behold as usize));
|
||||
//~^ ERROR mismatched types [E0308]
|
||||
light_flows_our_war_of_mocking_words(&(with_tears + 4));
|
||||
//~^ ERROR mismatched types [E0308]
|
||||
}
|
|
@ -8,6 +8,8 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
#![allow(unused)]
|
||||
|
||||
fn light_flows_our_war_of_mocking_words(and_yet: &usize) -> usize {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-46756-consider-borrowing-cast-or-binexpr.rs:20:42
|
||||
--> $DIR/issue-46756-consider-borrowing-cast-or-binexpr.rs:22:42
|
||||
|
|
||||
LL | light_flows_our_war_of_mocking_words(behold as usize);
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
@ -11,7 +11,7 @@ LL | light_flows_our_war_of_mocking_words(behold as usize);
|
|||
found type `usize`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-46756-consider-borrowing-cast-or-binexpr.rs:22:42
|
||||
--> $DIR/issue-46756-consider-borrowing-cast-or-binexpr.rs:24:42
|
||||
|
|
||||
LL | light_flows_our_war_of_mocking_words(with_tears + 4);
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
21
src/test/ui/suggestions/missing-comma-in-match.fixed
Normal file
21
src/test/ui/suggestions/missing-comma-in-match.fixed
Normal file
|
@ -0,0 +1,21 @@
|
|||
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
fn main() {
|
||||
match &Some(3) {
|
||||
&None => 1,
|
||||
&Some(2) => { 3 }
|
||||
//~^ ERROR expected one of `,`, `.`, `?`, `}`, or an operator, found `=>`
|
||||
//~| NOTE expected one of `,`, `.`, `?`, `}`, or an operator here
|
||||
_ => 2
|
||||
};
|
||||
}
|
|
@ -8,6 +8,8 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
fn main() {
|
||||
match &Some(3) {
|
||||
&None => 1
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error: expected one of `,`, `.`, `?`, `}`, or an operator, found `=>`
|
||||
--> $DIR/missing-comma-in-match.rs:14:18
|
||||
--> $DIR/missing-comma-in-match.rs:16:18
|
||||
|
|
||||
LL | &None => 1
|
||||
| - help: missing a comma here to end this `match` arm
|
||||
|
|
16
src/test/ui/suggestions/str-as-char.fixed
Normal file
16
src/test/ui/suggestions/str-as-char.fixed
Normal file
|
@ -0,0 +1,16 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
fn main() {
|
||||
println!("●●");
|
||||
//~^ ERROR character literal may only contain one codepoint
|
||||
}
|
|
@ -8,6 +8,8 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
|
||||
fn main() {
|
||||
println!('●●');
|
||||
//~^ ERROR character literal may only contain one codepoint
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error: character literal may only contain one codepoint
|
||||
--> $DIR/str-as-char.rs:12:14
|
||||
--> $DIR/str-as-char.rs:14:14
|
||||
|
|
||||
LL | println!('●●');
|
||||
| ^^^^
|
||||
|
|
16
src/test/ui/suggestions/tuple-float-index.fixed
Normal file
16
src/test/ui/suggestions/tuple-float-index.fixed
Normal file
|
@ -0,0 +1,16 @@
|
|||
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
// compile-flags: -Z parse-only
|
||||
|
||||
fn main () {
|
||||
((1, (2, 3)).1).1; //~ ERROR unexpected token: `1.1`
|
||||
}
|
|
@ -8,6 +8,7 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// run-rustfix
|
||||
// compile-flags: -Z parse-only
|
||||
|
||||
fn main () {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
error: unexpected token: `1.1`
|
||||
--> $DIR/tuple-float-index.rs:14:17
|
||||
--> $DIR/tuple-float-index.rs:15:17
|
||||
|
|
||||
LL | (1, (2, 3)).1.1; //~ ERROR unexpected token: `1.1`
|
||||
| ------------^^^
|
||||
|
|
|
@ -26,7 +26,6 @@ if [[ "$1" == "--help" || "$1" == "-h" || "$1" == "" || "$2" == "" ]]; then
|
|||
echo " $0 ../../../build/x86_64-apple-darwin/test/ui *.rs */*.rs"
|
||||
fi
|
||||
|
||||
MYDIR=$(dirname $0)
|
||||
|
||||
BUILD_DIR="$1"
|
||||
shift
|
||||
|
@ -34,7 +33,8 @@ shift
|
|||
shopt -s nullglob
|
||||
|
||||
while [[ "$1" != "" ]]; do
|
||||
for EXT in "stderr" "stdout"; do
|
||||
MYDIR=$(dirname $1)
|
||||
for EXT in "stderr" "stdout" "fixed"; do
|
||||
for OUT_NAME in $BUILD_DIR/${1%.rs}.*$EXT; do
|
||||
OUT_BASE=`basename "$OUT_NAME"`
|
||||
if ! (diff $OUT_NAME $MYDIR/$OUT_BASE >& /dev/null); then
|
||||
|
|
|
@ -32,7 +32,6 @@ pub enum Mode {
|
|||
RunMake,
|
||||
Ui,
|
||||
MirOpt,
|
||||
Rustfix,
|
||||
}
|
||||
|
||||
impl Mode {
|
||||
|
@ -68,7 +67,6 @@ impl FromStr for Mode {
|
|||
"run-make" => Ok(RunMake),
|
||||
"ui" => Ok(Ui),
|
||||
"mir-opt" => Ok(MirOpt),
|
||||
"rustfix" => Ok(Rustfix),
|
||||
_ => Err(()),
|
||||
}
|
||||
}
|
||||
|
@ -92,7 +90,6 @@ impl fmt::Display for Mode {
|
|||
RunMake => "run-make",
|
||||
Ui => "ui",
|
||||
MirOpt => "mir-opt",
|
||||
Rustfix => "rustfix",
|
||||
};
|
||||
fmt::Display::fmt(s, f)
|
||||
}
|
||||
|
|
|
@ -236,6 +236,7 @@ pub struct TestProps {
|
|||
pub normalize_stdout: Vec<(String, String)>,
|
||||
pub normalize_stderr: Vec<(String, String)>,
|
||||
pub failure_status: i32,
|
||||
pub run_rustfix: bool,
|
||||
}
|
||||
|
||||
impl TestProps {
|
||||
|
@ -267,6 +268,7 @@ impl TestProps {
|
|||
normalize_stdout: vec![],
|
||||
normalize_stderr: vec![],
|
||||
failure_status: 101,
|
||||
run_rustfix: false,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -403,6 +405,10 @@ impl TestProps {
|
|||
if let Some(code) = config.parse_failure_status(ln) {
|
||||
self.failure_status = code;
|
||||
}
|
||||
|
||||
if !self.run_rustfix {
|
||||
self.run_rustfix = config.parse_run_rustfix(ln);
|
||||
}
|
||||
});
|
||||
|
||||
for key in &["RUST_TEST_NOCAPTURE", "RUST_TEST_THREADS"] {
|
||||
|
@ -642,6 +648,10 @@ impl Config {
|
|||
|
||||
None
|
||||
}
|
||||
|
||||
fn parse_run_rustfix(&self, line: &str) -> bool {
|
||||
self.parse_name_directive(line, "run-rustfix")
|
||||
}
|
||||
}
|
||||
|
||||
pub fn lldb_version_to_int(version_string: &str) -> isize {
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
use common::{Config, TestPaths};
|
||||
use common::{CompileFail, ParseFail, Pretty, RunFail, RunPass, RunPassValgrind};
|
||||
use common::{Codegen, CodegenUnits, DebugInfoGdb, DebugInfoLldb, Rustdoc};
|
||||
use common::{Incremental, MirOpt, RunMake, Ui, Rustfix};
|
||||
use common::{Incremental, MirOpt, RunMake, Ui};
|
||||
use common::{expected_output_path, UI_STDERR, UI_STDOUT, UI_FIXED};
|
||||
use common::CompareMode;
|
||||
use diff;
|
||||
|
@ -242,7 +242,6 @@ impl<'test> TestCx<'test> {
|
|||
CodegenUnits => self.run_codegen_units_test(),
|
||||
Incremental => self.run_incremental_test(),
|
||||
RunMake => self.run_rmake_test(),
|
||||
Rustfix => self.run_rustfix_test(),
|
||||
Ui => self.run_ui_test(),
|
||||
MirOpt => self.run_mir_opt_test(),
|
||||
}
|
||||
|
@ -1689,7 +1688,6 @@ impl<'test> TestCx<'test> {
|
|||
|
||||
rustc.arg(dir_opt);
|
||||
}
|
||||
Rustfix |
|
||||
RunPass |
|
||||
RunFail |
|
||||
RunPassValgrind |
|
||||
|
@ -2555,6 +2553,7 @@ impl<'test> TestCx<'test> {
|
|||
|
||||
let expected_stderr = self.load_expected_output(UI_STDERR);
|
||||
let expected_stdout = self.load_expected_output(UI_STDOUT);
|
||||
let expected_fixed = self.load_expected_output(UI_FIXED);
|
||||
|
||||
let normalized_stdout =
|
||||
self.normalize_output(&proc_res.stdout, &self.props.normalize_stdout);
|
||||
|
@ -2571,6 +2570,21 @@ impl<'test> TestCx<'test> {
|
|||
errors += self.compare_output("stdout", &normalized_stdout, &expected_stdout);
|
||||
errors += self.compare_output("stderr", &normalized_stderr, &expected_stderr);
|
||||
|
||||
if self.config.compare_mode.is_some() {
|
||||
// don't test rustfix with nll right now
|
||||
} else if self.props.run_rustfix {
|
||||
// Apply suggestions from rustc to the code itself
|
||||
let unfixed_code = self.load_expected_output_from_path(&self.testpaths.file)
|
||||
.unwrap();
|
||||
let suggestions = get_suggestions_from_json(&proc_res.stderr, &HashSet::new()).unwrap();
|
||||
let fixed_code = apply_suggestions(&unfixed_code, &suggestions);
|
||||
|
||||
errors += self.compare_output("fixed", &fixed_code, &expected_fixed);
|
||||
} else if !expected_fixed.is_empty() {
|
||||
panic!("the `// run-rustfix` directive wasn't found but a `*.fixed` \
|
||||
file was found");
|
||||
}
|
||||
|
||||
if errors > 0 {
|
||||
println!("To update references, run this command from build directory:");
|
||||
let relative_path_to_file = self.testpaths
|
||||
|
@ -2606,6 +2620,23 @@ impl<'test> TestCx<'test> {
|
|||
self.check_error_patterns(&proc_res.stderr, &proc_res);
|
||||
}
|
||||
}
|
||||
|
||||
if self.props.run_rustfix && self.config.compare_mode.is_none() {
|
||||
// And finally, compile the fixed code and make sure it both
|
||||
// succeeds and has no diagnostics.
|
||||
let mut rustc = self.make_compile_args(
|
||||
&self.testpaths.file.with_extension(UI_FIXED),
|
||||
TargetLocation::ThisFile(self.make_exe_name()),
|
||||
);
|
||||
rustc.arg("-L").arg(&self.aux_output_dir_name());
|
||||
let res = self.compose_and_run_compiler(rustc, None);
|
||||
if !res.status.success() {
|
||||
self.fatal_proc_rec("failed to compile fixed code", &res);
|
||||
}
|
||||
if !res.stderr.is_empty() {
|
||||
self.fatal_proc_rec("fixed code is still producing diagnostics", &res);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn run_mir_opt_test(&self) {
|
||||
|
@ -2930,62 +2961,6 @@ impl<'test> TestCx<'test> {
|
|||
println!("Actual {} saved to {}", kind, output_file.display());
|
||||
1
|
||||
}
|
||||
|
||||
fn run_rustfix_test(&self) {
|
||||
// First up, compile the test with --error-format=json
|
||||
let mut rustc = self.make_compile_args(
|
||||
&self.testpaths.file,
|
||||
TargetLocation::ThisFile(self.make_exe_name()),
|
||||
);
|
||||
rustc.arg("--error-format").arg("json")
|
||||
.arg("-L").arg(&self.aux_output_dir_name());
|
||||
let proc_res = self.compose_and_run_compiler(rustc, None);
|
||||
|
||||
// Now apply suggestions from rustc to the code itself
|
||||
let unfixed_code = self.load_expected_output_from_path(&self.testpaths.file)
|
||||
.unwrap();
|
||||
let suggestions = get_suggestions_from_json(&proc_res.stderr, &HashSet::new()).unwrap();
|
||||
let fixed_code = apply_suggestions(&unfixed_code, &suggestions);
|
||||
|
||||
// Load up what the expected result of fixing should be
|
||||
let fixture_path = expected_output_path(&self.testpaths, None, &None, UI_FIXED);
|
||||
let expected_fixed = self.load_expected_output_from_path(&fixture_path)
|
||||
.unwrap_or(String::new());
|
||||
|
||||
// Make sure our fixed code is the same as what we're expecting
|
||||
let errors = self.compare_output(UI_FIXED, &fixed_code, &expected_fixed);
|
||||
if errors > 0 {
|
||||
println!("To update references, run this command from build directory:");
|
||||
let relative_path_to_file = self.testpaths
|
||||
.relative_dir
|
||||
.join(self.testpaths.file.file_name().unwrap());
|
||||
println!(
|
||||
"{}/update-references.sh '{}' '{}'",
|
||||
self.config.src_base.display(),
|
||||
self.config.build_base.display(),
|
||||
relative_path_to_file.display()
|
||||
);
|
||||
self.fatal_proc_rec(
|
||||
&format!("{} errors occurred comparing output.", errors),
|
||||
&proc_res,
|
||||
);
|
||||
}
|
||||
|
||||
// And finally, compile the fixed code and make sure it both succeeds
|
||||
// and has no diagnostics.
|
||||
let mut rustc = self.make_compile_args(
|
||||
&self.testpaths.file.with_extension(UI_FIXED),
|
||||
TargetLocation::ThisFile(self.make_exe_name()),
|
||||
);
|
||||
rustc.arg("-L").arg(&self.aux_output_dir_name());
|
||||
let res = self.compose_and_run_compiler(rustc, None);
|
||||
if !res.status.success() {
|
||||
self.fatal_proc_rec("failed to compile fixed code", &res);
|
||||
}
|
||||
if !res.stderr.is_empty() {
|
||||
self.fatal_proc_rec("fixed code is still producing diagnostics", &res);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ProcArgs {
|
||||
|
|
Loading…
Add table
Reference in a new issue