summaryrefslogtreecommitdiff
path: root/tests/integration/install_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/install_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/install_tests.rs')
-rw-r--r--tests/integration/install_tests.rs250
1 files changed, 250 insertions, 0 deletions
diff --git a/tests/integration/install_tests.rs b/tests/integration/install_tests.rs
new file mode 100644
index 000000000..54df82549
--- /dev/null
+++ b/tests/integration/install_tests.rs
@@ -0,0 +1,250 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+
+use test_util as util;
+use test_util::assert_contains;
+use util::TestContext;
+use util::TestContextBuilder;
+
+#[test]
+fn install_basic() {
+ 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", "{}");
+
+ 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", ""),
+ ])
+ .run()
+ .skip_output_check()
+ .assert_exit_code(0);
+
+ // 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 = file_path.read_to_string();
+ // 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
+ context
+ .new_command()
+ .args("uninstall echo_test")
+ .envs([
+ ("HOME", temp_dir_str.as_str()),
+ ("USERPROFILE", temp_dir_str.as_str()),
+ ("DENO_INSTALL_ROOT", ""),
+ ])
+ .run()
+ .skip_output_check()
+ .assert_exit_code(0);
+
+ // 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 context = TestContext::with_http_server();
+ let temp_dir = context.temp_dir();
+ let temp_dir_str = temp_dir.path().to_string();
+
+ context
+ .new_command()
+ .current_dir(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()),
+ ])
+ .run()
+ .skip_output_check()
+ .assert_exit_code(0);
+
+ 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 = file_path.read_to_string();
+ 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 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()
+ .current_dir(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");
+ 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 = context
+ .new_command()
+ .name(&file_path)
+ .current_dir(temp_dir.path())
+ .args("foo")
+ .env("PATH", util::target_dir())
+ .run();
+ output.assert_matches_text("hello, foo");
+ output.assert_exit_code(0);
+}
+
+#[test]
+fn installer_test_remote_module_run() {
+ 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) {
+ bin_file_path = bin_file_path.with_extension("cmd");
+ }
+ assert!(bin_file_path.exists());
+ let output = context
+ .new_command()
+ .name(&bin_file_path)
+ .current_dir(root_dir)
+ .args("foo")
+ .env("PATH", util::target_dir())
+ .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 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 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", ""),
+ ])
+ .run()
+ .skip_output_check()
+ .assert_exit_code(0);
+}
+
+#[test]
+fn check_local_by_default2() {
+ 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 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", ""),
+ ])
+ .run()
+ .skip_output_check()
+ .assert_exit_code(0);
+}