diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-05-23 03:39:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-23 03:39:59 +0200 |
commit | 5874fc3d0aaf1b0453fb916656187503d8619ccd (patch) | |
tree | 16bdea5734546c04a95a119e139542f83bed2d8a /cli/tests/integration | |
parent | bb37dfb5b79c0e5ae18d34f01313cb1f39d7a2dd (diff) |
feat: add support for globs in the config file and CLI arguments for files (#19102)
Follow up to https://github.com/denoland/deno/pull/19084.
This commit adds support for globs in the configuration file as well
as CLI arguments for files.
With this change users can now use glob syntax for "include" and
"exclude" fields, like so:
```json
{
"lint": {
"include": [
"directory/test*.ts",
"other_dir/"
],
"exclude": [
"other_dir/foo*.ts",
"nested/nested2/*"
]
},
"test": {
"include": [
"data/test*.ts",
"nested/",
"tests/test[1-9].ts"
],
"exclude": [
"nested/foo?.ts",
"nested/nested2/*"
]
}
}
```
Or in CLI args like so:
```
// notice quotes here; these values will be passed to Deno verbatim
// and deno will perform glob expansion
$ deno fmt --ignore="data/*.ts"
$ deno lint "data/**/*.ts"
```
Closes https://github.com/denoland/deno/issues/17971
Closes https://github.com/denoland/deno/issues/6365
Diffstat (limited to 'cli/tests/integration')
-rw-r--r-- | cli/tests/integration/fmt_tests.rs | 92 | ||||
-rw-r--r-- | cli/tests/integration/lint_tests.rs | 95 | ||||
-rw-r--r-- | cli/tests/integration/test_tests.rs | 58 |
3 files changed, 245 insertions, 0 deletions
diff --git a/cli/tests/integration/fmt_tests.rs b/cli/tests/integration/fmt_tests.rs index e47311cf0..e674f4a52 100644 --- a/cli/tests/integration/fmt_tests.rs +++ b/cli/tests/integration/fmt_tests.rs @@ -2,7 +2,9 @@ use test_util as util; use test_util::TempDir; +use util::assert_contains; use util::TestContext; +use util::TestContextBuilder; #[test] fn fmt_test() { @@ -257,3 +259,93 @@ itest!(fmt_with_malformed_config2 { output: "fmt/fmt_with_malformed_config2.out", exit_code: 1, }); + +#[test] +fn fmt_with_glob_config() { + let context = TestContextBuilder::new().cwd("fmt").build(); + + let cmd_output = context + .new_command() + .args("fmt --check --config deno.glob.json") + .run(); + + cmd_output.assert_exit_code(1); + + let output = cmd_output.combined_output(); + if cfg!(windows) { + assert_contains!(output, r#"glob\nested\fizz\fizz.ts"#); + assert_contains!(output, r#"glob\pages\[id].ts"#); + assert_contains!(output, r#"glob\nested\fizz\bar.ts"#); + assert_contains!(output, r#"glob\nested\foo\foo.ts"#); + assert_contains!(output, r#"glob\data\test1.js"#); + assert_contains!(output, r#"glob\nested\foo\bar.ts"#); + assert_contains!(output, r#"glob\nested\foo\fizz.ts"#); + assert_contains!(output, r#"glob\nested\fizz\foo.ts"#); + assert_contains!(output, r#"glob\data\test1.ts"#); + } else { + assert_contains!(output, "glob/nested/fizz/fizz.ts"); + assert_contains!(output, "glob/pages/[id].ts"); + assert_contains!(output, "glob/nested/fizz/bar.ts"); + assert_contains!(output, "glob/nested/foo/foo.ts"); + assert_contains!(output, "glob/data/test1.js"); + assert_contains!(output, "glob/nested/foo/bar.ts"); + assert_contains!(output, "glob/nested/foo/fizz.ts"); + assert_contains!(output, "glob/nested/fizz/foo.ts"); + assert_contains!(output, "glob/data/test1.ts"); + } + + assert_contains!(output, "Found 9 not formatted files in 9 files"); +} + +#[test] +fn fmt_with_glob_config_and_flags() { + let context = TestContextBuilder::new().cwd("fmt").build(); + + let cmd_output = context + .new_command() + .args("fmt --check --config deno.glob.json --ignore=glob/nested/**/bar.ts") + .run(); + + cmd_output.assert_exit_code(1); + + let output = cmd_output.combined_output(); + if cfg!(windows) { + assert_contains!(output, r#"glob\nested\fizz\fizz.ts"#); + assert_contains!(output, r#"glob\pages\[id].ts"#); + assert_contains!(output, r#"glob\nested\fizz\bazz.ts"#); + assert_contains!(output, r#"glob\nested\foo\foo.ts"#); + assert_contains!(output, r#"glob\data\test1.js"#); + assert_contains!(output, r#"glob\nested\foo\bazz.ts"#); + assert_contains!(output, r#"glob\nested\foo\fizz.ts"#); + assert_contains!(output, r#"glob\nested\fizz\foo.ts"#); + assert_contains!(output, r#"glob\data\test1.ts"#); + } else { + assert_contains!(output, "glob/nested/fizz/fizz.ts"); + assert_contains!(output, "glob/pages/[id].ts"); + assert_contains!(output, "glob/nested/fizz/bazz.ts"); + assert_contains!(output, "glob/nested/foo/foo.ts"); + assert_contains!(output, "glob/data/test1.js"); + assert_contains!(output, "glob/nested/foo/bazz.ts"); + assert_contains!(output, "glob/nested/foo/fizz.ts"); + assert_contains!(output, "glob/nested/fizz/foo.ts"); + assert_contains!(output, "glob/data/test1.ts"); + } + assert_contains!(output, "Found 9 not formatted files in 9 files"); + let cmd_output = context + .new_command() + .args("fmt --check --config deno.glob.json glob/data/test1.?s") + .run(); + + cmd_output.assert_exit_code(1); + + let output = cmd_output.combined_output(); + if cfg!(windows) { + assert_contains!(output, r#"glob\data\test1.js"#); + assert_contains!(output, r#"glob\data\test1.ts"#); + } else { + assert_contains!(output, "glob/data/test1.js"); + assert_contains!(output, "glob/data/test1.ts"); + } + + assert_contains!(output, "Found 2 not formatted files in 2 files"); +} diff --git a/cli/tests/integration/lint_tests.rs b/cli/tests/integration/lint_tests.rs index 8bf35ed8f..6fef3c000 100644 --- a/cli/tests/integration/lint_tests.rs +++ b/cli/tests/integration/lint_tests.rs @@ -1,5 +1,8 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +use test_util::assert_contains; +use test_util::TestContextBuilder; + itest!(ignore_unexplicit_files { args: "lint --unstable --ignore=./", output_str: Some("error: No target files found.\n"), @@ -114,3 +117,95 @@ itest!(lint_with_malformed_config2 { output: "lint/with_malformed_config2.out", exit_code: 1, }); + +#[test] +fn lint_with_glob_config() { + let context = TestContextBuilder::new().cwd("lint").build(); + + let cmd_output = context + .new_command() + .args("lint --config deno.glob.json") + .run(); + + cmd_output.assert_exit_code(1); + + let output = cmd_output.combined_output(); + if cfg!(windows) { + assert_contains!(output, r#"glob\nested\fizz\fizz.ts:1:10"#); + assert_contains!(output, r#"glob\pages\[id].ts:1:10"#); + assert_contains!(output, r#"glob\nested\fizz\bar.ts:1:10"#); + assert_contains!(output, r#"glob\nested\foo\foo.ts:1:10"#); + assert_contains!(output, r#"glob\data\test1.js:1:10"#); + assert_contains!(output, r#"glob\nested\foo\bar.ts:1:10"#); + assert_contains!(output, r#"glob\nested\foo\fizz.ts:1:10"#); + assert_contains!(output, r#"glob\nested\fizz\foo.ts:1:10"#); + assert_contains!(output, r#"glob\data\test1.ts:1:10"#); + } else { + assert_contains!(output, "glob/nested/fizz/fizz.ts:1:10"); + assert_contains!(output, "glob/pages/[id].ts:1:10"); + assert_contains!(output, "glob/nested/fizz/bar.ts:1:10"); + assert_contains!(output, "glob/nested/foo/foo.ts:1:10"); + assert_contains!(output, "glob/data/test1.js:1:10"); + assert_contains!(output, "glob/nested/foo/bar.ts:1:10"); + assert_contains!(output, "glob/nested/foo/fizz.ts:1:10"); + assert_contains!(output, "glob/nested/fizz/foo.ts:1:10"); + assert_contains!(output, "glob/data/test1.ts:1:10"); + } + assert_contains!(output, "Found 9 problems"); + assert_contains!(output, "Checked 9 files"); +} + +#[test] +fn lint_with_glob_config_and_flags() { + let context = TestContextBuilder::new().cwd("lint").build(); + + let cmd_output = context + .new_command() + .args("lint --config deno.glob.json --ignore=glob/nested/**/bar.ts") + .run(); + + cmd_output.assert_exit_code(1); + + let output = cmd_output.combined_output(); + if cfg!(windows) { + assert_contains!(output, r#"glob\nested\fizz\fizz.ts:1:10"#); + assert_contains!(output, r#"glob\pages\[id].ts:1:10"#); + assert_contains!(output, r#"glob\nested\fizz\bazz.ts:1:10"#); + assert_contains!(output, r#"glob\nested\foo\foo.ts:1:10"#); + assert_contains!(output, r#"glob\data\test1.js:1:10"#); + assert_contains!(output, r#"glob\nested\foo\bazz.ts:1:10"#); + assert_contains!(output, r#"glob\nested\foo\fizz.ts:1:10"#); + assert_contains!(output, r#"glob\nested\fizz\foo.ts:1:10"#); + assert_contains!(output, r#"glob\data\test1.ts:1:10"#); + } else { + assert_contains!(output, "glob/nested/fizz/fizz.ts:1:10"); + assert_contains!(output, "glob/pages/[id].ts:1:10"); + assert_contains!(output, "glob/nested/fizz/bazz.ts:1:10"); + assert_contains!(output, "glob/nested/foo/foo.ts:1:10"); + assert_contains!(output, "glob/data/test1.js:1:10"); + assert_contains!(output, "glob/nested/foo/bazz.ts:1:10"); + assert_contains!(output, "glob/nested/foo/fizz.ts:1:10"); + assert_contains!(output, "glob/nested/fizz/foo.ts:1:10"); + assert_contains!(output, "glob/data/test1.ts:1:10"); + } + assert_contains!(output, "Found 9 problems"); + assert_contains!(output, "Checked 9 files"); + + let cmd_output = context + .new_command() + .args("lint --config deno.glob.json glob/data/test1.?s") + .run(); + + cmd_output.assert_exit_code(1); + + let output = cmd_output.combined_output(); + if cfg!(windows) { + assert_contains!(output, r#"glob\data\test1.js:1:10"#); + assert_contains!(output, r#"glob\data\test1.ts:1:10"#); + } else { + assert_contains!(output, "glob/data/test1.js:1:10"); + assert_contains!(output, "glob/data/test1.ts:1:10"); + } + assert_contains!(output, "Found 2 problems"); + assert_contains!(output, "Checked 2 files"); +} diff --git a/cli/tests/integration/test_tests.rs b/cli/tests/integration/test_tests.rs index 04966f4ee..4dd29528f 100644 --- a/cli/tests/integration/test_tests.rs +++ b/cli/tests/integration/test_tests.rs @@ -6,6 +6,7 @@ use util::assert_contains; use util::env_vars_for_npm_tests; use util::wildcard_match; use util::TestContext; +use util::TestContextBuilder; #[test] fn no_color() { @@ -508,3 +509,60 @@ itest!(test_no_lock { cwd: Some("lockfile/basic"), output: "lockfile/basic/test.nolock.out", }); + +#[test] +fn test_with_glob_config() { + let context = TestContextBuilder::new().cwd("test").build(); + + let cmd_output = context + .new_command() + .args("test --config deno.glob.json") + .run(); + + cmd_output.assert_exit_code(0); + + let output = cmd_output.combined_output(); + assert_contains!(output, "glob/nested/fizz/fizz.ts"); + assert_contains!(output, "glob/pages/[id].ts"); + assert_contains!(output, "glob/nested/fizz/bar.ts"); + assert_contains!(output, "glob/nested/foo/foo.ts"); + assert_contains!(output, "glob/data/test1.js"); + assert_contains!(output, "glob/nested/foo/bar.ts"); + assert_contains!(output, "glob/nested/foo/fizz.ts"); + assert_contains!(output, "glob/nested/fizz/foo.ts"); + assert_contains!(output, "glob/data/test1.ts"); +} + +#[test] +fn test_with_glob_config_and_flags() { + let context = TestContextBuilder::new().cwd("test").build(); + + let cmd_output = context + .new_command() + .args("test --config deno.glob.json --ignore=glob/nested/**/bar.ts") + .run(); + + cmd_output.assert_exit_code(0); + + let output = cmd_output.combined_output(); + assert_contains!(output, "glob/nested/fizz/fizz.ts"); + assert_contains!(output, "glob/pages/[id].ts"); + assert_contains!(output, "glob/nested/fizz/bazz.ts"); + assert_contains!(output, "glob/nested/foo/foo.ts"); + assert_contains!(output, "glob/data/test1.js"); + assert_contains!(output, "glob/nested/foo/bazz.ts"); + assert_contains!(output, "glob/nested/foo/fizz.ts"); + assert_contains!(output, "glob/nested/fizz/foo.ts"); + assert_contains!(output, "glob/data/test1.ts"); + + let cmd_output = context + .new_command() + .args("test --config deno.glob.json glob/data/test1.?s") + .run(); + + cmd_output.assert_exit_code(0); + + let output = cmd_output.combined_output(); + assert_contains!(output, "glob/data/test1.js"); + assert_contains!(output, "glob/data/test1.ts"); +} |