summaryrefslogtreecommitdiff
path: root/cli/lsp/testing
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2024-08-28 05:15:48 +0100
committerGitHub <noreply@github.com>2024-08-28 05:15:48 +0100
commit97d1635343dc6e93c8dcf4b116922de5b9c57af3 (patch)
tree6edb8630d4ec473c73c47ace90a7053a898f5570 /cli/lsp/testing
parentefcabce1c117a2e0fed8604d887695a0a19a37ad (diff)
fix(lsp): panic on url_to_uri() (#25238)
Diffstat (limited to 'cli/lsp/testing')
-rw-r--r--cli/lsp/testing/definitions.rs29
-rw-r--r--cli/lsp/testing/execution.rs30
-rw-r--r--cli/lsp/testing/server.rs30
3 files changed, 51 insertions, 38 deletions
diff --git a/cli/lsp/testing/definitions.rs b/cli/lsp/testing/definitions.rs
index 69baf053e..f23411852 100644
--- a/cli/lsp/testing/definitions.rs
+++ b/cli/lsp/testing/definitions.rs
@@ -10,6 +10,7 @@ use crate::tools::test::TestDescription;
use crate::tools::test::TestStepDescription;
use crate::util::checksum;
+use deno_core::error::AnyError;
use deno_core::ModuleSpecifier;
use lsp::Range;
use std::collections::HashMap;
@@ -144,21 +145,23 @@ impl TestModule {
pub fn as_replace_notification(
&self,
maybe_root_uri: Option<&ModuleSpecifier>,
- ) -> TestingNotification {
+ ) -> Result<TestingNotification, AnyError> {
let label = self.label(maybe_root_uri);
- TestingNotification::Module(lsp_custom::TestModuleNotificationParams {
- text_document: lsp::TextDocumentIdentifier {
- uri: url_to_uri(&self.specifier),
+ Ok(TestingNotification::Module(
+ lsp_custom::TestModuleNotificationParams {
+ text_document: lsp::TextDocumentIdentifier {
+ uri: url_to_uri(&self.specifier)?,
+ },
+ kind: lsp_custom::TestModuleNotificationKind::Replace,
+ label,
+ tests: self
+ .defs
+ .iter()
+ .filter(|(_, def)| def.parent_id.is_none())
+ .map(|(id, _)| self.get_test_data(id))
+ .collect(),
},
- kind: lsp_custom::TestModuleNotificationKind::Replace,
- label,
- tests: self
- .defs
- .iter()
- .filter(|(_, def)| def.parent_id.is_none())
- .map(|(id, _)| self.get_test_data(id))
- .collect(),
- })
+ ))
}
pub fn label(&self, maybe_root_uri: Option<&ModuleSpecifier>) -> String {
diff --git a/cli/lsp/testing/execution.rs b/cli/lsp/testing/execution.rs
index aec91b3e7..4ac565aa0 100644
--- a/cli/lsp/testing/execution.rs
+++ b/cli/lsp/testing/execution.rs
@@ -186,7 +186,7 @@ impl TestRun {
self
.queue
.iter()
- .map(|s| {
+ .filter_map(|s| {
let ids = if let Some((test_module, _)) = tests.get(s) {
if let Some(filter) = self.filters.get(s) {
filter.as_ids(test_module)
@@ -196,10 +196,12 @@ impl TestRun {
} else {
Vec::new()
};
- lsp_custom::EnqueuedTestModule {
- text_document: lsp::TextDocumentIdentifier { uri: url_to_uri(s) },
+ Some(lsp_custom::EnqueuedTestModule {
+ text_document: lsp::TextDocumentIdentifier {
+ uri: url_to_uri(s).ok()?,
+ },
ids,
- }
+ })
})
.collect()
}
@@ -591,6 +593,9 @@ impl LspTestReporter {
let (test_module, _) = files
.entry(specifier.clone())
.or_insert_with(|| (TestModule::new(specifier), "1".to_string()));
+ let Ok(uri) = url_to_uri(&test_module.specifier) else {
+ return;
+ };
let (static_id, is_new) = test_module.register_dynamic(desc);
self.tests.insert(
desc.id,
@@ -601,9 +606,7 @@ impl LspTestReporter {
.client
.send_test_notification(TestingNotification::Module(
lsp_custom::TestModuleNotificationParams {
- text_document: lsp::TextDocumentIdentifier {
- uri: url_to_uri(&test_module.specifier),
- },
+ text_document: lsp::TextDocumentIdentifier { uri },
kind: lsp_custom::TestModuleNotificationKind::Insert,
label: test_module.label(self.maybe_root_uri.as_ref()),
tests: vec![test_module.get_test_data(&static_id)],
@@ -701,6 +704,9 @@ impl LspTestReporter {
let (test_module, _) = files
.entry(specifier.clone())
.or_insert_with(|| (TestModule::new(specifier), "1".to_string()));
+ let Ok(uri) = url_to_uri(&test_module.specifier) else {
+ return;
+ };
let (static_id, is_new) = test_module.register_step_dynamic(
desc,
self.tests.get(&desc.parent_id).unwrap().static_id(),
@@ -714,9 +720,7 @@ impl LspTestReporter {
.client
.send_test_notification(TestingNotification::Module(
lsp_custom::TestModuleNotificationParams {
- text_document: lsp::TextDocumentIdentifier {
- uri: url_to_uri(&test_module.specifier),
- },
+ text_document: lsp::TextDocumentIdentifier { uri },
kind: lsp_custom::TestModuleNotificationKind::Insert,
label: test_module.label(self.maybe_root_uri.as_ref()),
tests: vec![test_module.get_test_data(&static_id)],
@@ -800,14 +804,14 @@ mod tests {
include: Some(vec![
lsp_custom::TestIdentifier {
text_document: lsp::TextDocumentIdentifier {
- uri: url_to_uri(&specifier),
+ uri: url_to_uri(&specifier).unwrap(),
},
id: None,
step_id: None,
},
lsp_custom::TestIdentifier {
text_document: lsp::TextDocumentIdentifier {
- uri: url_to_uri(&non_test_specifier),
+ uri: url_to_uri(&non_test_specifier).unwrap(),
},
id: None,
step_id: None,
@@ -815,7 +819,7 @@ mod tests {
]),
exclude: vec![lsp_custom::TestIdentifier {
text_document: lsp::TextDocumentIdentifier {
- uri: url_to_uri(&specifier),
+ uri: url_to_uri(&specifier).unwrap(),
},
id: Some(
"69d9fe87f64f5b66cb8b631d4fd2064e8224b8715a049be54276c42189ff8f9f"
diff --git a/cli/lsp/testing/server.rs b/cli/lsp/testing/server.rs
index 0c34ea7bc..c9c39d9ff 100644
--- a/cli/lsp/testing/server.rs
+++ b/cli/lsp/testing/server.rs
@@ -27,14 +27,16 @@ use tower_lsp::jsonrpc::Error as LspError;
use tower_lsp::jsonrpc::Result as LspResult;
use tower_lsp::lsp_types as lsp;
-fn as_delete_notification(url: ModuleSpecifier) -> TestingNotification {
- TestingNotification::DeleteModule(
+fn as_delete_notification(
+ url: &ModuleSpecifier,
+) -> Result<TestingNotification, AnyError> {
+ Ok(TestingNotification::DeleteModule(
lsp_custom::TestModuleDeleteNotificationParams {
text_document: lsp::TextDocumentIdentifier {
- uri: url_to_uri(&url),
+ uri: url_to_uri(url)?,
},
},
- )
+ ))
}
pub type TestServerTests =
@@ -126,20 +128,24 @@ impl TestServer {
.map(|tm| tm.as_ref().clone())
.unwrap_or_else(|| TestModule::new(specifier.clone()));
if !test_module.is_empty() {
- client.send_test_notification(
- test_module.as_replace_notification(mru.as_ref()),
- );
+ if let Ok(params) =
+ test_module.as_replace_notification(mru.as_ref())
+ {
+ client.send_test_notification(params);
+ }
} else if !was_empty {
- client.send_test_notification(as_delete_notification(
- specifier.clone(),
- ));
+ if let Ok(params) = as_delete_notification(specifier) {
+ client.send_test_notification(params);
+ }
}
tests
.insert(specifier.clone(), (test_module, script_version));
}
}
- for key in keys {
- client.send_test_notification(as_delete_notification(key));
+ for key in &keys {
+ if let Ok(params) = as_delete_notification(key) {
+ client.send_test_notification(params);
+ }
}
performance.measure(mark);
}