diff options
Diffstat (limited to 'cli/tests/integration/install_tests.rs')
-rw-r--r-- | cli/tests/integration/install_tests.rs | 241 |
1 files changed, 124 insertions, 117 deletions
diff --git a/cli/tests/integration/install_tests.rs b/cli/tests/integration/install_tests.rs index 0756d460c..d9a7a4fb6 100644 --- a/cli/tests/integration/install_tests.rs +++ b/cli/tests/integration/install_tests.rs @@ -1,38 +1,33 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -use std::fs; -use std::process::Command; use test_util as util; use test_util::assert_contains; -use test_util::assert_ends_with; -use test_util::TempDir; +use util::TestContext; +use util::TestContextBuilder; #[test] fn install_basic() { - let _guard = util::http_server(); - let temp_dir = TempDir::new(); + let context = TestContextBuilder::new() + .use_http_server() + .use_temp_cwd() + .build(); + let temp_dir = context.temp_dir(); let temp_dir_str = temp_dir.path().to_string(); // ensure a lockfile doesn't get created or updated locally temp_dir.write("deno.json", "{}"); - let status = util::deno_cmd() - .current_dir(temp_dir.path()) - .arg("install") - .arg("--check") - .arg("--name") - .arg("echo_test") - .arg("http://localhost:4545/echo.ts") + context + .new_command() + .args("install --check --name echo_test http://localhost:4545/echo.ts") .envs([ ("HOME", temp_dir_str.as_str()), ("USERPROFILE", temp_dir_str.as_str()), ("DENO_INSTALL_ROOT", ""), ]) - .spawn() - .unwrap() - .wait() - .unwrap(); - assert!(status.success()); + .run() + .skip_output_check() + .assert_exit_code(0); // no lockfile should be created locally assert!(!temp_dir.path().join("deno.lock").exists()); @@ -62,20 +57,17 @@ fn install_basic() { } // now uninstall - let status = util::deno_cmd() - .current_dir(temp_dir.path()) - .arg("uninstall") - .arg("echo_test") + context + .new_command() + .args("uninstall echo_test") .envs([ ("HOME", temp_dir_str.as_str()), ("USERPROFILE", temp_dir_str.as_str()), ("DENO_INSTALL_ROOT", ""), ]) - .spawn() - .unwrap() - .wait() - .unwrap(); - assert!(status.success()); + .run() + .skip_output_check() + .assert_exit_code(0); // ensure local lockfile still doesn't exist assert!(!temp_dir.path().join("deno.lock").exists()); @@ -85,27 +77,22 @@ fn install_basic() { #[test] fn install_custom_dir_env_var() { - let _guard = util::http_server(); - let temp_dir = TempDir::new(); + let context = TestContext::with_http_server(); + let temp_dir = context.temp_dir(); let temp_dir_str = temp_dir.path().to_string(); - let status = util::deno_cmd() - .current_dir(util::root_path()) // different cwd - .arg("install") - .arg("--check") - .arg("--name") - .arg("echo_test") - .arg("http://localhost:4545/echo.ts") + context + .new_command() + .cwd(util::root_path()) // different cwd + .args("install --check --name echo_test http://localhost:4545/echo.ts") .envs([ ("HOME", temp_dir_str.as_str()), ("USERPROFILE", temp_dir_str.as_str()), ("DENO_INSTALL_ROOT", temp_dir_str.as_str()), ]) - .spawn() - .unwrap() - .wait() - .unwrap(); - assert!(status.success()); + .run() + .skip_output_check() + .assert_exit_code(0); let mut file_path = temp_dir.path().join("bin/echo_test"); assert!(file_path.exists()); @@ -114,7 +101,7 @@ fn install_custom_dir_env_var() { file_path = file_path.with_extension("cmd"); } - let content = fs::read_to_string(file_path).unwrap(); + let content = file_path.read_to_string(); if cfg!(windows) { assert_contains!( content, @@ -130,114 +117,134 @@ fn install_custom_dir_env_var() { #[test] fn installer_test_local_module_run() { - let temp_dir = TempDir::new(); + let context = TestContext::with_http_server(); + let temp_dir = context.temp_dir(); + let temp_dir_str = temp_dir.path().to_string(); + let echo_ts_str = util::testdata_path().join("echo.ts").to_string(); + + context + .new_command() + .cwd(util::root_path()) + .args_vec([ + "install", + "--name", + "echo_test", + "--root", + temp_dir_str.as_str(), + echo_ts_str.as_str(), + "hello", + ]) + .envs([ + ("HOME", temp_dir_str.as_str()), + ("USERPROFILE", temp_dir_str.as_str()), + ("DENO_INSTALL_ROOT", ""), + ]) + .run() + .skip_output_check() + .assert_exit_code(0); + let bin_dir = temp_dir.path().join("bin"); - std::fs::create_dir(&bin_dir).unwrap(); - let status = util::deno_cmd() - .current_dir(util::root_path()) - .arg("install") - .arg("--name") - .arg("echo_test") - .arg("--root") - .arg(temp_dir.path()) - .arg(util::testdata_path().join("echo.ts")) - .arg("hello") - .spawn() - .unwrap() - .wait() - .unwrap(); - assert!(status.success()); let mut file_path = bin_dir.join("echo_test"); if cfg!(windows) { file_path = file_path.with_extension("cmd"); } assert!(file_path.exists()); - // NOTE: using file_path here instead of exec_name, because tests - // shouldn't mess with user's PATH env variable - let output = Command::new(file_path) - .current_dir(temp_dir.path()) - .arg("foo") + let output = context + .new_command() + .name(&file_path) + .cwd(temp_dir.path()) + .args("foo") .env("PATH", util::target_dir()) - .output() - .unwrap(); - let stdout_str = std::str::from_utf8(&output.stdout).unwrap().trim(); - assert_ends_with!(stdout_str, "hello, foo"); + .run(); + output.assert_matches_text("hello, foo"); + output.assert_exit_code(0); } #[test] fn installer_test_remote_module_run() { - let _g = util::http_server(); - let temp_dir = TempDir::new(); - let bin_dir = temp_dir.path().join("bin"); - std::fs::create_dir(&bin_dir).unwrap(); - let status = util::deno_cmd() - .current_dir(util::testdata_path()) - .arg("install") - .arg("--name") - .arg("echo_test") - .arg("--root") - .arg(temp_dir.path()) - .arg("http://localhost:4545/echo.ts") - .arg("hello") - .spawn() - .unwrap() - .wait() - .unwrap(); - assert!(status.success()); - let mut file_path = bin_dir.join("echo_test"); + let context = TestContextBuilder::new() + .use_http_server() + .use_temp_cwd() + .build(); + let temp_dir = context.temp_dir(); + let root_dir = temp_dir.path().join("root"); + let bin_dir = root_dir.join("bin"); + context + .new_command() + .args("install --name echo_test --root ./root http://localhost:4545/echo.ts hello") + .run() + .skip_output_check() + .assert_exit_code(0); + let mut bin_file_path = bin_dir.join("echo_test"); if cfg!(windows) { - file_path = file_path.with_extension("cmd"); + bin_file_path = bin_file_path.with_extension("cmd"); } - assert!(file_path.exists()); - let output = Command::new(file_path) - .current_dir(temp_dir.path()) - .arg("foo") + assert!(bin_file_path.exists()); + let output = context + .new_command() + .name(&bin_file_path) + .cwd(root_dir) + .args("foo") .env("PATH", util::target_dir()) - .output() - .unwrap(); - assert_ends_with!( - std::str::from_utf8(&output.stdout).unwrap().trim(), - "hello, foo", - ); + .run(); + output.assert_matches_text("hello, foo"); + output.assert_exit_code(0); + + // now uninstall with the relative path + context + .new_command() + .args("uninstall --root ./root echo_test") + .run() + .skip_output_check() + .assert_exit_code(0); + assert!(!bin_file_path.exists()); } #[test] fn check_local_by_default() { - let _guard = util::http_server(); - let temp_dir = TempDir::new(); + let context = TestContextBuilder::new() + .use_http_server() + .use_temp_cwd() + .build(); + let temp_dir = context.temp_dir(); let temp_dir_str = temp_dir.path().to_string(); - - let status = util::deno_cmd() - .current_dir(temp_dir.path()) - .arg("install") - .arg(util::testdata_path().join("./install/check_local_by_default.ts")) + let script_path = + util::testdata_path().join("./install/check_local_by_default.ts"); + let script_path_str = script_path.to_string_lossy().to_string(); + context + .new_command() + .args_vec(["install", script_path_str.as_str()]) .envs([ ("HOME", temp_dir_str.as_str()), ("USERPROFILE", temp_dir_str.as_str()), ("DENO_INSTALL_ROOT", ""), ]) - .status() - .unwrap(); - assert!(status.success()); + .run() + .skip_output_check() + .assert_exit_code(0); } #[test] fn check_local_by_default2() { - let _guard = util::http_server(); - let temp_dir = TempDir::new(); + let context = TestContextBuilder::new() + .use_http_server() + .use_temp_cwd() + .build(); + let temp_dir = context.temp_dir(); let temp_dir_str = temp_dir.path().to_string(); - - let status = util::deno_cmd() - .current_dir(temp_dir.path()) - .arg("install") - .arg(util::testdata_path().join("./install/check_local_by_default2.ts")) + let script_path = + util::testdata_path().join("./install/check_local_by_default2.ts"); + let script_path_str = script_path.to_string_lossy().to_string(); + context + .new_command() + .args_vec(["install", script_path_str.as_str()]) .envs([ ("HOME", temp_dir_str.as_str()), ("NO_COLOR", "1"), ("USERPROFILE", temp_dir_str.as_str()), ("DENO_INSTALL_ROOT", ""), ]) - .status() - .unwrap(); - assert!(status.success()); + .run() + .skip_output_check() + .assert_exit_code(0); } |