summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2023-04-28 14:21:55 +0100
committerGitHub <noreply@github.com>2023-04-28 15:21:55 +0200
commit0b296c6378c46c18de7c3838b2a3e1d13eb9bd87 (patch)
tree19e2e9697ccda1808997bede87493dc0f257a8a2 /cli
parent84b921555fa481a0a2c4cffe5c897fd1c87485b7 (diff)
fix(repl): don't panic on undefined exception (#18888)
Fixes regression from #18878 where `Promise.reject()`, `Promise.reject(undefined)` and `reportError(undefined)` panic in the REPL. Fixes `throw undefined` printing `Uncaught Unknown exception` instead of `Uncaught undefined`.
Diffstat (limited to 'cli')
-rw-r--r--cli/tests/integration/repl_tests.rs14
-rw-r--r--cli/tools/repl/mod.rs2
-rw-r--r--cli/tools/repl/session.rs2
3 files changed, 16 insertions, 2 deletions
diff --git a/cli/tests/integration/repl_tests.rs b/cli/tests/integration/repl_tests.rs
index d9966fe8f..f8987e20b 100644
--- a/cli/tests/integration/repl_tests.rs
+++ b/cli/tests/integration/repl_tests.rs
@@ -825,6 +825,20 @@ fn repl_report_error() {
}
#[test]
+fn repl_error_undefined() {
+ util::with_pty(&["repl"], |mut console| {
+ console.write_line(r#"throw undefined;"#);
+ console.expect("Uncaught undefined");
+ console.write_line(r#"Promise.reject();"#);
+ console.expect("Promise { <rejected> undefined }");
+ console.expect("Uncaught (in promise) undefined");
+ console.write_line(r#"reportError(undefined);"#);
+ console.expect("undefined");
+ console.expect("Uncaught undefined");
+ });
+}
+
+#[test]
fn pty_aggregate_error() {
util::with_pty(&["repl"], |mut console| {
console.write_line("await Promise.any([])");
diff --git a/cli/tools/repl/mod.rs b/cli/tools/repl/mod.rs
index 0a6d9b9e9..59b79ce86 100644
--- a/cli/tools/repl/mod.rs
+++ b/cli/tools/repl/mod.rs
@@ -70,7 +70,7 @@ async fn read_line_and_poll(
let exception_details = params.get("exceptionDetails").unwrap().as_object().unwrap();
let text = exception_details.get("text").unwrap().as_str().unwrap();
let exception = exception_details.get("exception").unwrap().as_object().unwrap();
- let description = exception.get("description").unwrap().as_str().unwrap();
+ let description = exception.get("description").and_then(|d| d.as_str()).unwrap_or("undefined");
println!("{text} {description}");
}
}
diff --git a/cli/tools/repl/session.rs b/cli/tools/repl/session.rs
index 6f8db6fcd..b8daf505b 100644
--- a/cli/tools/repl/session.rs
+++ b/cli/tools/repl/session.rs
@@ -260,7 +260,7 @@ impl ReplSession {
let description = match exception_details.exception {
Some(exception) => exception
.description
- .unwrap_or_else(|| "Unknown exception".to_string()),
+ .unwrap_or_else(|| "undefined".to_string()),
None => "Unknown exception".to_string(),
};
EvaluationOutput::Error(format!(