summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/tests/integration/jupyter_tests.rs8
-rw-r--r--cli/tests/integration/mod.rs5
-rw-r--r--cli/tests/testdata/jupyter/install_command_not_exists.out4
-rw-r--r--cli/tools/jupyter/install.rs36
4 files changed, 42 insertions, 11 deletions
diff --git a/cli/tests/integration/jupyter_tests.rs b/cli/tests/integration/jupyter_tests.rs
new file mode 100644
index 000000000..847290ef8
--- /dev/null
+++ b/cli/tests/integration/jupyter_tests.rs
@@ -0,0 +1,8 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+
+itest!(jupyter_install_command_not_exists {
+ args: "jupyter --unstable --install",
+ output: "jupyter/install_command_not_exists.out",
+ envs: vec![("PATH".to_string(), "".to_string())],
+ exit_code: 1,
+});
diff --git a/cli/tests/integration/mod.rs b/cli/tests/integration/mod.rs
index f599e2e87..19796f245 100644
--- a/cli/tests/integration/mod.rs
+++ b/cli/tests/integration/mod.rs
@@ -121,7 +121,10 @@ mod inspector;
mod install;
#[path = "js_unit_tests.rs"]
mod js_unit_tests;
-mod jsr_tests;
+#[path = "jsr_tests.rs"]
+mod jsr;
+#[path = "jupyter_tests.rs"]
+mod jupyter;
#[path = "lint_tests.rs"]
mod lint;
#[path = "lsp_tests.rs"]
diff --git a/cli/tests/testdata/jupyter/install_command_not_exists.out b/cli/tests/testdata/jupyter/install_command_not_exists.out
new file mode 100644
index 000000000..3d599f7fc
--- /dev/null
+++ b/cli/tests/testdata/jupyter/install_command_not_exists.out
@@ -0,0 +1,4 @@
+error: Failed to spawn 'jupyter' command. Is JupyterLab installed (https://jupyter.org/install) and available on the PATH?
+
+Caused by:
+[WILDCARD]
diff --git a/cli/tools/jupyter/install.rs b/cli/tools/jupyter/install.rs
index ef442e125..3b2079db0 100644
--- a/cli/tools/jupyter/install.rs
+++ b/cli/tools/jupyter/install.rs
@@ -6,6 +6,7 @@ use deno_core::error::AnyError;
use deno_core::serde_json;
use deno_core::serde_json::json;
use std::env::current_exe;
+use std::io::ErrorKind;
use std::io::Write;
use std::path::Path;
use tempfile::TempDir;
@@ -76,19 +77,34 @@ pub fn install() -> Result<(), AnyError> {
&temp_dir.path().to_string_lossy(),
])
.spawn();
+ let mut child = match child_result {
+ Ok(child) => child,
+ Err(err)
+ if matches!(
+ err.kind(),
+ ErrorKind::NotFound | ErrorKind::PermissionDenied
+ ) =>
+ {
+ return Err(err).context(concat!(
+ "Failed to spawn 'jupyter' command. Is JupyterLab installed ",
+ "(https://jupyter.org/install) and available on the PATH?"
+ ));
+ }
+ Err(err) => {
+ return Err(err).context("Failed to spawn 'jupyter' command.");
+ }
+ };
- if let Ok(mut child) = child_result {
- let wait_result = child.wait();
- match wait_result {
- Ok(status) => {
- if !status.success() {
- bail!("Failed to install kernelspec, try again.");
- }
- }
- Err(err) => {
- bail!("Failed to install kernelspec: {}", err);
+ let wait_result = child.wait();
+ match wait_result {
+ Ok(status) => {
+ if !status.success() {
+ bail!("Failed to install kernelspec, try again.");
}
}
+ Err(err) => {
+ bail!("Failed to install kernelspec: {}", err);
+ }
}
let _ = std::fs::remove_dir(temp_dir);