forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix print-config minimal option (rust-lang#3687)
- Loading branch information
1 parent
0e6896b
commit 6487422
Showing
2 changed files
with
141 additions
and
45 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
//! Integration tests for rustfmt. | ||
use std::env; | ||
use std::fs::remove_file; | ||
use std::path::Path; | ||
use std::process::Command; | ||
|
||
/// Run the rustfmt executable and return its output. | ||
fn rustfmt(args: &[&str]) -> (String, String) { | ||
let mut bin_dir = env::current_exe().unwrap(); | ||
bin_dir.pop(); // chop off test exe name | ||
if bin_dir.ends_with("deps") { | ||
bin_dir.pop(); | ||
} | ||
let cmd = bin_dir.join(format!("rustfmt{}", env::consts::EXE_SUFFIX)); | ||
|
||
// Ensure the rustfmt binary runs from the local target dir. | ||
let path = env::var_os("PATH").unwrap_or_default(); | ||
let mut paths = env::split_paths(&path).collect::<Vec<_>>(); | ||
paths.insert(0, bin_dir); | ||
let new_path = env::join_paths(paths).unwrap(); | ||
|
||
match Command::new(&cmd).args(args).env("PATH", new_path).output() { | ||
Ok(output) => ( | ||
String::from_utf8(output.stdout).expect("utf-8"), | ||
String::from_utf8(output.stderr).expect("utf-8"), | ||
), | ||
Err(e) => panic!("failed to run `{:?} {:?}`: {}", cmd, args, e), | ||
} | ||
} | ||
|
||
macro_rules! assert_that { | ||
($args:expr, $check:ident $check_args:tt) => { | ||
let (stdout, stderr) = rustfmt($args); | ||
if !stdout.$check$check_args && !stderr.$check$check_args { | ||
panic!( | ||
"Output not expected for rustfmt {:?}\n\ | ||
expected: {}{}\n\ | ||
actual stdout:\n{}\n\ | ||
actual stderr:\n{}", | ||
$args, | ||
stringify!($check), | ||
stringify!($check_args), | ||
stdout, | ||
stderr | ||
); | ||
} | ||
}; | ||
} | ||
|
||
#[test] | ||
fn print_config() { | ||
assert_that!( | ||
&["--print-config", "unknown"], | ||
starts_with("Unknown print-config option") | ||
); | ||
assert_that!(&["--print-config", "default"], contains("max_width = 100")); | ||
assert_that!(&["--print-config", "minimal"], contains("PATH required")); | ||
assert_that!( | ||
&["--print-config", "minimal", "minimal-config"], | ||
contains("doesn't work with standard input.") | ||
); | ||
|
||
let (stdout, stderr) = rustfmt(&[ | ||
"--print-config", | ||
"minimal", | ||
"minimal-config", | ||
"src/shape.rs", | ||
]); | ||
assert!( | ||
Path::new("minimal-config").exists(), | ||
"stdout:\n{}\nstderr:\n{}", | ||
stdout, | ||
stderr | ||
); | ||
remove_file("minimal-config").unwrap(); | ||
} |