summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/cdp.rs12
-rw-r--r--cli/tests/integration/repl_tests.rs11
2 files changed, 23 insertions, 0 deletions
diff --git a/cli/cdp.rs b/cli/cdp.rs
index 55229947d..d1b09565d 100644
--- a/cli/cdp.rs
+++ b/cli/cdp.rs
@@ -4,6 +4,7 @@
use deno_core::serde_json;
use deno_core::serde_json::Value;
use serde::Deserialize;
+use serde::Deserializer;
use serde::Serialize;
/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#method-awaitPromise
@@ -245,6 +246,7 @@ pub struct RemoteObject {
pub kind: String,
pub subtype: Option<String>,
pub class_name: Option<String>,
+ #[serde(default, deserialize_with = "deserialize_some")]
pub value: Option<Value>,
pub unserializable_value: Option<UnserializableValue>,
pub description: Option<String>,
@@ -253,6 +255,16 @@ pub struct RemoteObject {
pub custom_preview: Option<CustomPreview>,
}
+// Any value that is present is considered Some value, including null.
+// ref: https://github.com/serde-rs/serde/issues/984#issuecomment-314143738
+fn deserialize_some<'de, T, D>(deserializer: D) -> Result<Option<T>, D::Error>
+where
+ T: Deserialize<'de>,
+ D: Deserializer<'de>,
+{
+ Deserialize::deserialize(deserializer).map(Some)
+}
+
/// https://chromedevtools.github.io/devtools-protocol/tot/Runtime/#type-ObjectPreview
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
diff --git a/cli/tests/integration/repl_tests.rs b/cli/tests/integration/repl_tests.rs
index 571b65fa2..edade5d92 100644
--- a/cli/tests/integration/repl_tests.rs
+++ b/cli/tests/integration/repl_tests.rs
@@ -34,6 +34,17 @@ fn pty_multiline() {
}
#[test]
+fn pty_null() {
+ util::with_pty(&["repl"], |mut console| {
+ console.write_line("null");
+ console.write_line("close();");
+
+ let output = console.read_all_output();
+ assert!(output.contains("null"));
+ });
+}
+
+#[test]
fn pty_unpaired_braces() {
util::with_pty(&["repl"], |mut console| {
console.write_line(")");