mirror of
https://github.com/denoland/deno.git
synced 2024-12-24 08:09:08 -05:00
244 lines
6.2 KiB
Rust
244 lines
6.2 KiB
Rust
|
// 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;
|
||
|
|
||
|
#[test]
|
||
|
fn install_basic() {
|
||
|
let _guard = util::http_server();
|
||
|
let temp_dir = TempDir::new();
|
||
|
let temp_dir_str = temp_dir.path().to_string_lossy().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")
|
||
|
.envs([
|
||
|
("HOME", temp_dir_str.as_str()),
|
||
|
("USERPROFILE", temp_dir_str.as_str()),
|
||
|
("DENO_INSTALL_ROOT", ""),
|
||
|
])
|
||
|
.spawn()
|
||
|
.unwrap()
|
||
|
.wait()
|
||
|
.unwrap();
|
||
|
assert!(status.success());
|
||
|
|
||
|
// no lockfile should be created locally
|
||
|
assert!(!temp_dir.path().join("deno.lock").exists());
|
||
|
|
||
|
let mut file_path = temp_dir.path().join(".deno/bin/echo_test");
|
||
|
assert!(file_path.exists());
|
||
|
|
||
|
if cfg!(windows) {
|
||
|
file_path = file_path.with_extension("cmd");
|
||
|
}
|
||
|
|
||
|
let content = fs::read_to_string(&file_path).unwrap();
|
||
|
// ensure there's a trailing newline so the shell script can be
|
||
|
// more versatile.
|
||
|
assert_eq!(content.chars().last().unwrap(), '\n');
|
||
|
|
||
|
if cfg!(windows) {
|
||
|
assert_contains!(
|
||
|
content,
|
||
|
r#""run" "--check" "--no-config" "http://localhost:4545/echo.ts""#
|
||
|
);
|
||
|
} else {
|
||
|
assert_contains!(
|
||
|
content,
|
||
|
r#"run --check --no-config 'http://localhost:4545/echo.ts'"#
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// now uninstall
|
||
|
let status = util::deno_cmd()
|
||
|
.current_dir(temp_dir.path())
|
||
|
.arg("uninstall")
|
||
|
.arg("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());
|
||
|
|
||
|
// ensure local lockfile still doesn't exist
|
||
|
assert!(!temp_dir.path().join("deno.lock").exists());
|
||
|
// ensure uninstall occurred
|
||
|
assert!(!file_path.exists());
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn install_custom_dir_env_var() {
|
||
|
let _guard = util::http_server();
|
||
|
let temp_dir = TempDir::new();
|
||
|
let temp_dir_str = temp_dir.path().to_string_lossy().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")
|
||
|
.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());
|
||
|
|
||
|
let mut file_path = temp_dir.path().join("bin/echo_test");
|
||
|
assert!(file_path.exists());
|
||
|
|
||
|
if cfg!(windows) {
|
||
|
file_path = file_path.with_extension("cmd");
|
||
|
}
|
||
|
|
||
|
let content = fs::read_to_string(file_path).unwrap();
|
||
|
if cfg!(windows) {
|
||
|
assert_contains!(
|
||
|
content,
|
||
|
r#""run" "--check" "--no-config" "http://localhost:4545/echo.ts""#
|
||
|
);
|
||
|
} else {
|
||
|
assert_contains!(
|
||
|
content,
|
||
|
r#"run --check --no-config 'http://localhost:4545/echo.ts'"#
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn installer_test_local_module_run() {
|
||
|
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::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")
|
||
|
.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");
|
||
|
}
|
||
|
|
||
|
#[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");
|
||
|
if cfg!(windows) {
|
||
|
file_path = file_path.with_extension("cmd");
|
||
|
}
|
||
|
assert!(file_path.exists());
|
||
|
let output = Command::new(file_path)
|
||
|
.current_dir(temp_dir.path())
|
||
|
.arg("foo")
|
||
|
.env("PATH", util::target_dir())
|
||
|
.output()
|
||
|
.unwrap();
|
||
|
assert_ends_with!(
|
||
|
std::str::from_utf8(&output.stdout).unwrap().trim(),
|
||
|
"hello, foo",
|
||
|
);
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn check_local_by_default() {
|
||
|
let _guard = util::http_server();
|
||
|
let temp_dir = TempDir::new();
|
||
|
let temp_dir_str = temp_dir.path().to_string_lossy().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"))
|
||
|
.envs([
|
||
|
("HOME", temp_dir_str.as_str()),
|
||
|
("USERPROFILE", temp_dir_str.as_str()),
|
||
|
("DENO_INSTALL_ROOT", ""),
|
||
|
])
|
||
|
.status()
|
||
|
.unwrap();
|
||
|
assert!(status.success());
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn check_local_by_default2() {
|
||
|
let _guard = util::http_server();
|
||
|
let temp_dir = TempDir::new();
|
||
|
let temp_dir_str = temp_dir.path().to_string_lossy().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"))
|
||
|
.envs([
|
||
|
("HOME", temp_dir_str.as_str()),
|
||
|
("NO_COLOR", "1"),
|
||
|
("USERPROFILE", temp_dir_str.as_str()),
|
||
|
("DENO_INSTALL_ROOT", ""),
|
||
|
])
|
||
|
.status()
|
||
|
.unwrap();
|
||
|
assert!(status.success());
|
||
|
}
|