summaryrefslogtreecommitdiff
path: root/cli/tests/integration/install_tests.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-11-13 09:44:01 -0500
committerGitHub <noreply@github.com>2023-11-13 09:44:01 -0500
commit6e1f3aa0131f145db631d5dfb94c2b9404172194 (patch)
tree2d48695f5efb15312e7e78c1fa0d2addfd0a03f5 /cli/tests/integration/install_tests.rs
parent542314a0becbba120dbee13b3f410f647b4c9cb7 (diff)
fix(install): should work with non-existent relative root (#21161)
Closes #21160
Diffstat (limited to 'cli/tests/integration/install_tests.rs')
-rw-r--r--cli/tests/integration/install_tests.rs241
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);
}