summaryrefslogtreecommitdiff
path: root/tests/integration/task_tests.rs
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2024-02-10 13:22:13 -0700
committerGitHub <noreply@github.com>2024-02-10 20:22:13 +0000
commitf5e46c9bf2f50d66a953fa133161fc829cecff06 (patch)
tree8faf2f5831c1c7b11d842cd9908d141082c869a5 /tests/integration/task_tests.rs
parentd2477f780630a812bfd65e3987b70c0d309385bb (diff)
chore: move cli/tests/ -> tests/ (#22369)
This looks like a massive PR, but it's only a move from cli/tests -> tests, and updates of relative paths for files. This is the first step towards aggregate all of the integration test files under tests/, which will lead to a set of integration tests that can run without the CLI binary being built. While we could leave these tests under `cli`, it would require us to keep a more complex directory structure for the various test runners. In addition, we have a lot of complexity to ignore various test files in the `cli` project itself (cargo publish exclusion rules, autotests = false, etc). And finally, the `tests/` folder will eventually house the `test_ffi`, `test_napi` and other testing code, reducing the size of the root repo directory. For easier review, the extremely large and noisy "move" is in the first commit (with no changes -- just a move), while the remainder of the changes to actual files is in the second commit.
Diffstat (limited to 'tests/integration/task_tests.rs')
-rw-r--r--tests/integration/task_tests.rs357
1 files changed, 357 insertions, 0 deletions
diff --git a/tests/integration/task_tests.rs b/tests/integration/task_tests.rs
new file mode 100644
index 000000000..c8531c13f
--- /dev/null
+++ b/tests/integration/task_tests.rs
@@ -0,0 +1,357 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+
+// Most of the tests for this are in deno_task_shell.
+// These tests are intended to only test integration.
+
+use deno_core::serde_json::json;
+use test_util::env_vars_for_npm_tests;
+use test_util::TestContext;
+use test_util::TestContextBuilder;
+
+itest!(task_no_args {
+ args: "task -q --config task/deno_json/deno.json",
+ output: "task/deno_json/task_no_args.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+ exit_code: 1,
+});
+
+itest!(task_cwd {
+ args: "task -q --config task/deno_json/deno.json --cwd .. echo_cwd",
+ output: "task/deno_json/task_cwd.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+ exit_code: 0,
+});
+
+itest!(task_init_cwd {
+ args: "task -q --config task/deno_json/deno.json --cwd .. echo_init_cwd",
+ output: "task/deno_json/task_init_cwd.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+ exit_code: 0,
+});
+
+itest!(task_init_cwd_already_set {
+ args: "task -q --config task/deno_json/deno.json echo_init_cwd",
+ output: "task/deno_json/task_init_cwd_already_set.out",
+ envs: vec![
+ ("NO_COLOR".to_string(), "1".to_string()),
+ ("INIT_CWD".to_string(), "HELLO".to_string())
+ ],
+ exit_code: 0,
+});
+
+itest!(task_cwd_resolves_config_from_specified_dir {
+ args: "task -q --cwd task/deno_json",
+ output: "task/deno_json/task_no_args.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+ exit_code: 1,
+});
+
+itest!(task_non_existent {
+ args: "task --config task/deno_json/deno.json non_existent",
+ output: "task/deno_json/task_non_existent.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+ exit_code: 1,
+});
+
+#[test]
+fn task_emoji() {
+ // this bug only appears when using a pty/tty
+ TestContext::default()
+ .new_command()
+ .args_vec(["task", "--config", "task/deno_json/deno.json", "echo_emoji"])
+ .with_pty(|mut console| {
+ console.expect("Task echo_emoji echo šŸ”„\r\nšŸ”„");
+ });
+}
+
+itest!(task_boolean_logic {
+ args: "task -q --config task/deno_json/deno.json boolean_logic",
+ output: "task/deno_json/task_boolean_logic.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+});
+
+itest!(task_exit_code_5 {
+ args: "task --config task/deno_json/deno.json exit_code_5",
+ output: "task/deno_json/task_exit_code_5.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+ exit_code: 5,
+});
+
+itest!(task_additional_args {
+ args: "task -q --config task/deno_json/deno.json echo 2",
+ output: "task/deno_json/task_additional_args.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+});
+
+itest!(task_additional_args_no_shell_expansion {
+ args_vec: vec![
+ "task",
+ "-q",
+ "--config",
+ "task/deno_json/deno.json",
+ "echo",
+ "$(echo 5)"
+ ],
+ output: "task/deno_json/task_additional_args_no_shell_expansion.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+});
+
+itest!(task_additional_args_nested_strings {
+ args_vec: vec![
+ "task",
+ "-q",
+ "--config",
+ "task/deno_json/deno.json",
+ "echo",
+ "string \"quoted string\""
+ ],
+ output: "task/deno_json/task_additional_args_nested_strings.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+});
+
+itest!(task_additional_args_no_logic {
+ args_vec: vec![
+ "task",
+ "-q",
+ "--config",
+ "task/deno_json/deno.json",
+ "echo",
+ "||",
+ "echo",
+ "5"
+ ],
+ output: "task/deno_json/task_additional_args_no_logic.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+});
+
+itest!(task_deno_exe_no_env {
+ args_vec: vec![
+ "task",
+ "-q",
+ "--config",
+ "task/deno_json/deno.json",
+ "deno_echo"
+ ],
+ output: "task/deno_json/task_deno_exe_no_env.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+ env_clear: true,
+});
+
+itest!(task_piped_stdin {
+ args_vec: vec![
+ "task",
+ "-q",
+ "--config",
+ "task/deno_json/deno.json",
+ "piped"
+ ],
+ output: "task/deno_json/task_piped_stdin.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+});
+
+itest!(task_package_json_no_arg {
+ args: "task",
+ cwd: Some("task/package_json/"),
+ output: "task/package_json/no_args.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+ exit_code: 1,
+});
+
+itest!(task_package_json_echo {
+ args: "task --quiet echo",
+ cwd: Some("task/package_json/"),
+ output: "task/package_json/echo.out",
+ // use a temp dir because the node_modules folder will be created
+ copy_temp_dir: Some("task/package_json/"),
+ envs: env_vars_for_npm_tests(),
+ exit_code: 0,
+ http_server: true,
+});
+
+itest!(task_package_json_npm_bin {
+ args: "task bin extra",
+ cwd: Some("task/package_json/"),
+ output: "task/package_json/bin.out",
+ copy_temp_dir: Some("task/package_json/"),
+ envs: env_vars_for_npm_tests(),
+ exit_code: 0,
+ http_server: true,
+});
+
+// should not auto-install the packages in the package.json
+// when using nodeModulesDir: false
+itest!(task_package_json_node_modules_dir_false {
+ args: "task echo",
+ cwd: Some("task/package_json_node_modules_dir_false/"),
+ output: "task/package_json_node_modules_dir_false/bin.out",
+ copy_temp_dir: Some("task/package_json_node_modules_dir_false/"),
+ envs: env_vars_for_npm_tests(),
+ exit_code: 0,
+ http_server: true,
+});
+
+itest!(task_both_no_arg {
+ args: "task",
+ cwd: Some("task/both/"),
+ output: "task/both/no_args.out",
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+ exit_code: 1,
+});
+
+itest!(task_both_deno_json_selected {
+ args: "task other",
+ cwd: Some("task/both/"),
+ output: "task/both/deno_selected.out",
+ copy_temp_dir: Some("task/both/"),
+ envs: env_vars_for_npm_tests(),
+ exit_code: 0,
+ http_server: true,
+});
+
+itest!(task_both_package_json_selected {
+ args: "task bin asdf",
+ cwd: Some("task/both/"),
+ output: "task/both/package_json_selected.out",
+ copy_temp_dir: Some("task/both/"),
+ envs: env_vars_for_npm_tests(),
+ exit_code: 0,
+ http_server: true,
+});
+
+itest!(task_both_prefers_deno {
+ args: "task output some text",
+ cwd: Some("task/both/"),
+ output: "task/both/prefers_deno.out",
+ copy_temp_dir: Some("task/both/"),
+ envs: env_vars_for_npm_tests(),
+ exit_code: 0,
+ http_server: true,
+});
+
+itest!(task_npx_non_existent {
+ args: "task non-existent",
+ cwd: Some("task/npx/"),
+ output: "task/npx/non_existent.out",
+ copy_temp_dir: Some("task/npx/"),
+ envs: env_vars_for_npm_tests(),
+ exit_code: 1,
+ http_server: true,
+});
+
+itest!(task_npx_on_own {
+ args: "task on-own",
+ cwd: Some("task/npx/"),
+ output: "task/npx/on_own.out",
+ copy_temp_dir: Some("task/npx/"),
+ envs: env_vars_for_npm_tests(),
+ exit_code: 1,
+ http_server: true,
+});
+
+itest!(task_pre_post {
+ args: "task test",
+ cwd: Some("task/package_json_pre_post/"),
+ output: "task/package_json_pre_post/bin.out",
+ copy_temp_dir: Some("task/package_json_pre_post/"),
+ exit_code: 0,
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+});
+
+itest!(task_pre {
+ args: "task test",
+ cwd: Some("task/package_json_pre/"),
+ output: "task/package_json_pre/bin.out",
+ copy_temp_dir: Some("task/package_json_pre/"),
+ exit_code: 0,
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+});
+
+itest!(task_post {
+ args: "task test",
+ cwd: Some("task/package_json_post/"),
+ output: "task/package_json_post/bin.out",
+ copy_temp_dir: Some("task/package_json_post/"),
+ exit_code: 0,
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+});
+
+itest!(task_post_only {
+ args: "task test",
+ cwd: Some("task/package_json_post_only/"),
+ output: "task/package_json_post_only/bin.out",
+ copy_temp_dir: Some("task/package_json_post_only/"),
+ exit_code: 1,
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+});
+
+itest!(task_pre_only {
+ args: "task test",
+ cwd: Some("task/package_json_pre_only/"),
+ output: "task/package_json_pre_only/bin.out",
+ copy_temp_dir: Some("task/package_json_pre_only/"),
+ exit_code: 1,
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+});
+
+itest!(task_deno_no_pre_post {
+ args: "task test",
+ cwd: Some("task/deno_json_pre_post/"),
+ output: "task/deno_json_pre_post/bin.out",
+ copy_temp_dir: Some("task/deno_json_pre_post/"),
+ exit_code: 0,
+ envs: vec![("NO_COLOR".to_string(), "1".to_string())],
+});
+
+#[test]
+fn task_byonm() {
+ let context = TestContextBuilder::for_npm().use_temp_cwd().build();
+ let temp_dir = context.temp_dir().path();
+ temp_dir.join("package.json").write_json(&json!({
+ "name": "example",
+ "scripts": {
+ "say": "cowsay 'do make say'",
+ "think": "cowthink think"
+ },
+ "dependencies": {
+ "cowsay": "*"
+ }
+ }));
+ temp_dir.join("deno.json").write_json(&json!({
+ "unstable": ["byonm"],
+ }));
+ context.run_npm("install");
+
+ context
+ .new_command()
+ .args_vec(["task", "say"])
+ .run()
+ .assert_matches_text(
+ r#"Task say cowsay 'do make say'
+ _____________
+< do make say >
+ -------------
+ \ ^__^
+ \ (oo)\_______
+ (__)\ )\/\
+ ||----w |
+ || ||
+"#,
+ );
+
+ context
+ .new_command()
+ .args_vec(["task", "think"])
+ .run()
+ .assert_matches_text(
+ r#"Task think cowthink think
+ _______
+( think )
+ -------
+ o ^__^
+ o (oo)\_______
+ (__)\ )\/\
+ ||----w |
+ || ||
+"#,
+ );
+}