diff --git a/tests/coverage-source/comments.rs b/tests/coverage/source/comments.rs similarity index 84% rename from tests/coverage-source/comments.rs rename to tests/coverage/source/comments.rs index 379e8e5820e..e79557af713 100644 --- a/tests/coverage-source/comments.rs +++ b/tests/coverage/source/comments.rs @@ -1,3 +1,4 @@ +// rustfmt-write_mode: coverage /// Here's a doc comment! fn main() { // foo is bar diff --git a/tests/coverage-target/comments.rs b/tests/coverage/target/comments.rs similarity index 84% rename from tests/coverage-target/comments.rs rename to tests/coverage/target/comments.rs index 74d17bffd15..8f9c223aef2 100644 --- a/tests/coverage-target/comments.rs +++ b/tests/coverage/target/comments.rs @@ -1,3 +1,4 @@ +XX XXXXXXXXXXXXXXXXXXX XXXXXXXX /// Here's a doc comment! fn main() { XX XXX XX XXX diff --git a/tests/system.rs b/tests/system.rs index 96a9d9b7f92..ef3486b0bdc 100644 --- a/tests/system.rs +++ b/tests/system.rs @@ -20,7 +20,7 @@ use std::path::{Path, PathBuf}; use rustfmt::*; use rustfmt::filemap::{write_system_newlines, FileMap}; -use rustfmt::config::{Config, ReportTactic, WriteMode}; +use rustfmt::config::{Config, ReportTactic}; use rustfmt::rustfmt_diff::*; const DIFF_CONTEXT_SIZE: usize = 3; @@ -44,7 +44,7 @@ fn system_tests() { // Turn a DirEntry into a String that represents the relative path to the // file. let files = files.map(get_path_string); - let (_reports, count, fails) = check_files(files, None); + let (_reports, count, fails) = check_files(files); // Display results. println!("Ran {} system tests.", count); @@ -55,9 +55,9 @@ fn system_tests() { // the only difference is the coverage mode #[test] fn coverage_tests() { - let files = fs::read_dir("tests/coverage-source").expect("Couldn't read source dir"); + let files = fs::read_dir("tests/coverage/source").expect("Couldn't read source dir"); let files = files.map(get_path_string); - let (_reports, count, fails) = check_files(files, Some(WriteMode::Coverage)); + let (_reports, count, fails) = check_files(files); println!("Ran {} tests in coverage mode.", count); assert!(fails == 0, "{} tests failed", fails); @@ -65,16 +65,16 @@ fn coverage_tests() { #[test] fn checkstyle_test() { - let filename = "tests/source/fn-single-line.rs"; - let expected_filename = "tests/writemode/checkstyle.xml"; - assert_output(filename, expected_filename, Some(WriteMode::Checkstyle)); + let filename = "tests/writemode/source/fn-single-line.rs"; + let expected_filename = "tests/writemode/target/checkstyle.xml"; + assert_output(filename, expected_filename); } // Helper function for comparing the results of rustfmt // to a known output file generated by one of the write modes. -fn assert_output(source: &str, expected_filename: &str, write_mode: Option) { - let config = read_config(&source, write_mode); +fn assert_output(source: &str, expected_filename: &str) { + let config = read_config(&source); let (file_map, _report) = format_file(source, &config); // Populate output by writing to a vec. @@ -104,7 +104,7 @@ fn idempotence_tests() { let files = fs::read_dir("tests/target") .expect("Couldn't read target dir") .map(get_path_string); - let (_reports, count, fails) = check_files(files, None); + let (_reports, count, fails) = check_files(files); // Display results. println!("Ran {} idempotent tests.", count); @@ -122,7 +122,7 @@ fn self_tests() { // Hack because there's no `IntoIterator` impl for `[T; N]`. let files = files.chain(Some("src/lib.rs".to_owned()).into_iter()); - let (reports, count, fails) = check_files(files, None); + let (reports, count, fails) = check_files(files); let mut warnings = 0; // Display results. @@ -141,7 +141,7 @@ fn self_tests() { // For each file, run rustfmt and collect the output. // Returns the number of files checked and the number of failures. -fn check_files(files: I, write_mode: Option) -> (Vec, u32, u32) +fn check_files(files: I) -> (Vec, u32, u32) where I: Iterator { let mut count = 0; @@ -151,7 +151,7 @@ fn check_files(files: I, write_mode: Option) -> (Vec for file_name in files.filter(|f| f.ends_with(".rs")) { println!("Testing '{}'...", file_name); - match idempotent_check(file_name, write_mode) { + match idempotent_check(file_name) { Ok(report) => reports.push(report), Err(msg) => { print_mismatches(msg); @@ -176,7 +176,7 @@ fn print_mismatches(result: HashMap>) { assert!(t.reset().unwrap()); } -fn read_config(filename: &str, write_mode: Option) -> Config { +fn read_config(filename: &str) -> Config { let sig_comments = read_significant_comments(&filename); let mut config = get_config(sig_comments.get("config").map(|x| &(*x)[..])); @@ -189,10 +189,6 @@ fn read_config(filename: &str, write_mode: Option) -> Config { // Don't generate warnings for to-do items. config.report_todo = ReportTactic::Never; - if let Some(mode) = write_mode { - config.write_mode = mode - } - config } @@ -201,11 +197,9 @@ fn format_file>(filename: P, config: &Config) -> (FileMap, Form format_input(input, &config) } -pub fn idempotent_check(filename: String, - write_mode: Option) - -> Result>> { +pub fn idempotent_check(filename: String) -> Result>> { let sig_comments = read_significant_comments(&filename); - let config = read_config(&filename, write_mode); + let config = read_config(&filename); let (file_map, format_report) = format_file(filename, &config); let mut write_result = HashMap::new(); @@ -220,7 +214,7 @@ pub fn idempotent_check(filename: String, let target = sig_comments.get("target").map(|x| &(*x)[..]); - handle_result(write_result, target, write_mode).map(|_| format_report) + handle_result(write_result, target).map(|_| format_report) } // Reads test config file from comments and reads its contents. @@ -268,14 +262,13 @@ fn read_significant_comments(file_name: &str) -> HashMap { // Compare output to input. // TODO: needs a better name, more explanation. fn handle_result(result: HashMap, - target: Option<&str>, - write_mode: Option) + target: Option<&str>) -> Result<(), HashMap>> { let mut failures = HashMap::new(); for (file_name, fmt_text) in result { // If file is in tests/source, compare to file with same name in tests/target. - let target = get_target(&file_name, target, write_mode); + let target = get_target(&file_name, target); let mut f = fs::File::open(&target).expect("Couldn't open target"); let mut text = String::new(); @@ -297,29 +290,20 @@ fn handle_result(result: HashMap, } // Map source file paths to their target paths. -fn get_target(file_name: &str, target: Option<&str>, write_mode: Option) -> String { - let file_path = Path::new(file_name); - let (source_path_prefix, target_path_prefix) = match write_mode { - Some(WriteMode::Coverage) => { - (Path::new("tests/coverage-source/"), "tests/coverage-target/") +fn get_target(file_name: &str, target: Option<&str>) -> String { + if file_name.contains("source") { + let target_file_name = file_name.replace("source", "target"); + if let Some(replace_name) = target { + Path::new(&target_file_name) + .with_file_name(replace_name) + .into_os_string() + .into_string() + .unwrap() + } else { + target_file_name } - _ => (Path::new("tests/source/"), "tests/target/"), - }; - - if file_path.starts_with(source_path_prefix) { - let mut components = file_path.components(); - // Can't skip(2) as the resulting iterator can't as_path() - components.next(); - components.next(); - - let new_target = match components.as_path().to_str() { - Some(string) => string, - None => file_name, - }; - let base = target.unwrap_or(new_target); - - format!("{}{}", target_path_prefix, base) } else { + // This is either and idempotence check or a self check file_name.to_owned() } } diff --git a/tests/writemode/checkstyle.xml b/tests/writemode/checkstyle.xml deleted file mode 100644 index 12c7dd9fdf1..00000000000 --- a/tests/writemode/checkstyle.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/tests/writemode/source/fn-single-line.rs b/tests/writemode/source/fn-single-line.rs new file mode 100644 index 00000000000..289dd9aa093 --- /dev/null +++ b/tests/writemode/source/fn-single-line.rs @@ -0,0 +1,80 @@ +// rustfmt-fn_single_line: true +// rustfmt-write_mode: checkstyle +// Test single-line functions. + +fn foo_expr() { + 1 +} + +fn foo_stmt() { + foo(); +} + +fn foo_decl_local() { + let z = 5; + } + +fn foo_decl_item(x: &mut i32) { + x = 3; +} + + fn empty() { + +} + +fn foo_return() -> String { + "yay" +} + +fn foo_where() -> T where T: Sync { + let x = 2; +} + +fn fooblock() { + { + "inner-block" + } +} + +fn fooblock2(x: i32) { + let z = match x { + _ => 2, + }; +} + +fn comment() { + // this is a test comment + 1 +} + +fn comment2() { + // multi-line comment + let z = 2; + 1 +} + +fn only_comment() { + // Keep this here +} + +fn aaaaaaaaaaaaaaaaa_looooooooooooooooooooooong_name() { + let z = "aaaaaaawwwwwwwwwwwwwwwwwwwwwwwwwwww"; +} + +fn lots_of_space () { + 1 +} + +fn mac() -> Vec { vec![] } + +trait CoolTypes { + fn dummy(&self) { + } +} + +trait CoolerTypes { fn dummy(&self) { +} +} + +fn Foo() where T: Bar { +} diff --git a/tests/writemode/target/checkstyle.xml b/tests/writemode/target/checkstyle.xml new file mode 100644 index 00000000000..b59d81b29c8 --- /dev/null +++ b/tests/writemode/target/checkstyle.xml @@ -0,0 +1,2 @@ + +