diff options
Diffstat (limited to 'cli/tests/integration/fmt_tests.rs')
-rw-r--r-- | cli/tests/integration/fmt_tests.rs | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/cli/tests/integration/fmt_tests.rs b/cli/tests/integration/fmt_tests.rs new file mode 100644 index 000000000..5c21b2b7d --- /dev/null +++ b/cli/tests/integration/fmt_tests.rs @@ -0,0 +1,247 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. + +use test_util as util; +use test_util::TempDir; + +#[test] +fn fmt_test() { + let t = TempDir::new(); + let testdata_fmt_dir = util::testdata_path().join("fmt"); + let fixed_js = testdata_fmt_dir.join("badly_formatted_fixed.js"); + let badly_formatted_original_js = + testdata_fmt_dir.join("badly_formatted.mjs"); + let badly_formatted_js = t.path().join("badly_formatted.js"); + let badly_formatted_js_str = badly_formatted_js.to_str().unwrap(); + std::fs::copy(badly_formatted_original_js, &badly_formatted_js).unwrap(); + + let fixed_md = testdata_fmt_dir.join("badly_formatted_fixed.md"); + let badly_formatted_original_md = testdata_fmt_dir.join("badly_formatted.md"); + let badly_formatted_md = t.path().join("badly_formatted.md"); + let badly_formatted_md_str = badly_formatted_md.to_str().unwrap(); + std::fs::copy(badly_formatted_original_md, &badly_formatted_md).unwrap(); + + let fixed_json = testdata_fmt_dir.join("badly_formatted_fixed.json"); + let badly_formatted_original_json = + testdata_fmt_dir.join("badly_formatted.json"); + let badly_formatted_json = t.path().join("badly_formatted.json"); + let badly_formatted_json_str = badly_formatted_json.to_str().unwrap(); + std::fs::copy(badly_formatted_original_json, &badly_formatted_json).unwrap(); + // First, check formatting by ignoring the badly formatted file. + let status = util::deno_cmd() + .current_dir(&testdata_fmt_dir) + .arg("fmt") + .arg(format!( + "--ignore={},{},{}", + badly_formatted_js_str, badly_formatted_md_str, badly_formatted_json_str + )) + .arg("--check") + .arg(badly_formatted_js_str) + .arg(badly_formatted_md_str) + .arg(badly_formatted_json_str) + .spawn() + .unwrap() + .wait() + .unwrap(); + // No target files found + assert!(!status.success()); + + // Check without ignore. + let status = util::deno_cmd() + .current_dir(&testdata_fmt_dir) + .arg("fmt") + .arg("--check") + .arg(badly_formatted_js_str) + .arg(badly_formatted_md_str) + .arg(badly_formatted_json_str) + .spawn() + .unwrap() + .wait() + .unwrap(); + assert!(!status.success()); + + // Format the source file. + let status = util::deno_cmd() + .current_dir(&testdata_fmt_dir) + .arg("fmt") + .arg(badly_formatted_js_str) + .arg(badly_formatted_md_str) + .arg(badly_formatted_json_str) + .spawn() + .unwrap() + .wait() + .unwrap(); + assert!(status.success()); + let expected_js = std::fs::read_to_string(fixed_js).unwrap(); + let expected_md = std::fs::read_to_string(fixed_md).unwrap(); + let expected_json = std::fs::read_to_string(fixed_json).unwrap(); + let actual_js = std::fs::read_to_string(badly_formatted_js).unwrap(); + let actual_md = std::fs::read_to_string(badly_formatted_md).unwrap(); + let actual_json = std::fs::read_to_string(badly_formatted_json).unwrap(); + assert_eq!(expected_js, actual_js); + assert_eq!(expected_md, actual_md); + assert_eq!(expected_json, actual_json); +} + +#[test] +fn fmt_stdin_error() { + use std::io::Write; + let mut deno = util::deno_cmd() + .current_dir(util::testdata_path()) + .arg("fmt") + .arg("-") + .stdin(std::process::Stdio::piped()) + .stdout(std::process::Stdio::piped()) + .stderr(std::process::Stdio::piped()) + .spawn() + .unwrap(); + let stdin = deno.stdin.as_mut().unwrap(); + let invalid_js = b"import { example }"; + stdin.write_all(invalid_js).unwrap(); + let output = deno.wait_with_output().unwrap(); + // Error message might change. Just check stdout empty, stderr not. + assert!(output.stdout.is_empty()); + assert!(!output.stderr.is_empty()); + assert!(!output.status.success()); +} + +#[test] +fn fmt_ignore_unexplicit_files() { + let output = util::deno_cmd() + .current_dir(util::testdata_path()) + .env("NO_COLOR", "1") + .arg("fmt") + .arg("--check") + .arg("--ignore=./") + .stderr(std::process::Stdio::piped()) + .spawn() + .unwrap() + .wait_with_output() + .unwrap(); + assert!(!output.status.success()); + assert_eq!( + String::from_utf8_lossy(&output.stderr), + "error: No target files found.\n" + ); +} + +#[test] +fn fmt_auto_ignore_git_and_node_modules() { + use std::fs::{create_dir_all, File}; + use std::io::Write; + use std::path::PathBuf; + fn create_bad_json(t: PathBuf) { + let bad_json_path = t.join("bad.json"); + let mut bad_json_file = File::create(bad_json_path).unwrap(); + writeln!(bad_json_file, "bad json").unwrap(); + } + let temp_dir = TempDir::new(); + let t = temp_dir.path().join("target"); + let nest_git = t.join("nest").join(".git"); + let git_dir = t.join(".git"); + let nest_node_modules = t.join("nest").join("node_modules"); + let node_modules_dir = t.join("node_modules"); + create_dir_all(&nest_git).unwrap(); + create_dir_all(&git_dir).unwrap(); + create_dir_all(&nest_node_modules).unwrap(); + create_dir_all(&node_modules_dir).unwrap(); + create_bad_json(nest_git); + create_bad_json(git_dir); + create_bad_json(nest_node_modules); + create_bad_json(node_modules_dir); + let output = util::deno_cmd() + .current_dir(t) + .env("NO_COLOR", "1") + .arg("fmt") + .stderr(std::process::Stdio::piped()) + .spawn() + .unwrap() + .wait_with_output() + .unwrap(); + assert!(!output.status.success()); + assert_eq!( + String::from_utf8_lossy(&output.stderr), + "error: No target files found.\n" + ); +} + +itest!(fmt_quiet_check_fmt_dir { + args: "fmt --check --quiet fmt/regular/", + output_str: Some(""), + exit_code: 0, +}); + +itest!(fmt_check_formatted_files { + args: "fmt --check fmt/regular/formatted1.js fmt/regular/formatted2.ts fmt/regular/formatted3.markdown fmt/regular/formatted4.jsonc", + output: "fmt/expected_fmt_check_formatted_files.out", + exit_code: 0, +}); + +itest!(fmt_check_ignore { + args: "fmt --check --ignore=fmt/regular/formatted1.js fmt/regular/", + output: "fmt/expected_fmt_check_ignore.out", + exit_code: 0, +}); + +itest!(fmt_check_parse_error { + args: "fmt --check fmt/parse_error/parse_error.ts", + output: "fmt/fmt_check_parse_error.out", + exit_code: 1, +}); + +itest!(fmt_stdin { + args: "fmt -", + input: Some("const a = 1\n"), + output_str: Some("const a = 1;\n"), +}); + +itest!(fmt_stdin_markdown { + args: "fmt --ext=md -", + input: Some("# Hello Markdown\n```ts\nconsole.log( \"text\")\n```\n\n```cts\nconsole.log( 5 )\n```"), + output_str: Some("# Hello Markdown\n\n```ts\nconsole.log(\"text\");\n```\n\n```cts\nconsole.log(5);\n```\n"), +}); + +itest!(fmt_stdin_json { + args: "fmt --ext=json -", + input: Some("{ \"key\": \"value\"}"), + output_str: Some("{ \"key\": \"value\" }\n"), +}); + +itest!(fmt_stdin_check_formatted { + args: "fmt --check -", + input: Some("const a = 1;\n"), + output_str: Some(""), +}); + +itest!(fmt_stdin_check_not_formatted { + args: "fmt --check -", + input: Some("const a = 1\n"), + output_str: Some("Not formatted stdin\n"), +}); + +itest!(fmt_with_config { + args: "fmt --config fmt/with_config/deno.jsonc fmt/with_config/subdir", + output: "fmt/fmt_with_config.out", +}); + +itest!(fmt_with_config_default { + args: "fmt fmt/with_config/subdir", + output: "fmt/fmt_with_config.out", +}); + +// Check if CLI flags take precedence +itest!(fmt_with_config_and_flags { + args: "fmt --config fmt/with_config/deno.jsonc --ignore=fmt/with_config/subdir/a.ts,fmt/with_config/subdir/b.ts", + output: "fmt/fmt_with_config_and_flags.out", +}); + +itest!(fmt_with_malformed_config { + args: "fmt --config fmt/deno.malformed.jsonc", + output: "fmt/fmt_with_malformed_config.out", + exit_code: 1, +}); + +itest!(fmt_with_malformed_config2 { + args: "fmt --config fmt/deno.malformed2.jsonc", + output: "fmt/fmt_with_malformed_config2.out", + exit_code: 1, +}); |