diff options
Diffstat (limited to 'tests/integration/task_tests.rs')
-rw-r--r-- | tests/integration/task_tests.rs | 357 |
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 | + || || +"#, + ); +} |