Skip to content

Commit afec18c

Browse files
samwgoldmanmeta-codesync[bot]
authored andcommitted
Simplify file watcher register/unregister expectation
Summary: Finishing migration from expect_message_helper to expect_message Reviewed By: grievejia Differential Revision: D87564431 fbshipit-source-id: c53e9884213864a01ca1e6db8f2c31de29fbc7b6
1 parent 77a9339 commit afec18c

File tree

1 file changed

+57
-73
lines changed

1 file changed

+57
-73
lines changed

pyrefly/lib/test/lsp/lsp_interaction/object_model.rs

Lines changed: 57 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ use lsp_server::Request;
2323
use lsp_server::RequestId;
2424
use lsp_server::Response;
2525
use lsp_server::ResponseError;
26+
use lsp_types::ConfigurationItem;
27+
use lsp_types::ConfigurationParams;
2628
use lsp_types::PublishDiagnosticsParams;
29+
use lsp_types::RegistrationParams;
30+
use lsp_types::UnregistrationParams;
2731
use lsp_types::Url;
2832
use lsp_types::notification::DidChangeConfiguration;
2933
use lsp_types::notification::DidChangeNotebookDocument;
@@ -45,11 +49,13 @@ use lsp_types::request::HoverRequest;
4549
use lsp_types::request::Initialize;
4650
use lsp_types::request::InlayHintRequest;
4751
use lsp_types::request::References;
52+
use lsp_types::request::RegisterCapability;
4853
use lsp_types::request::Request as _;
4954
use lsp_types::request::SemanticTokensFullRequest;
5055
use lsp_types::request::SemanticTokensRangeRequest;
5156
use lsp_types::request::Shutdown;
5257
use lsp_types::request::SignatureHelpRequest;
58+
use lsp_types::request::UnregisterCapability;
5359
use lsp_types::request::WillRenameFiles;
5460
use lsp_types::request::WorkspaceConfiguration;
5561
use pretty_assertions::assert_eq;
@@ -807,98 +813,76 @@ impl TestClient {
807813
}
808814

809815
pub fn expect_configuration_request(&self, id: i32, scope_uris: Option<Vec<&Url>>) {
810-
use lsp_types::ConfigurationItem;
811-
use lsp_types::ConfigurationParams;
812-
use lsp_types::request::WorkspaceConfiguration;
813-
814-
let items = if let Some(uris) = scope_uris {
815-
uris.into_iter()
816-
.map(|uri| ConfigurationItem {
817-
scope_uri: Some(uri.clone()),
818-
section: Some("python".to_owned()),
819-
})
820-
.chain(once(ConfigurationItem {
821-
scope_uri: None,
822-
section: Some("python".to_owned()),
823-
}))
824-
.collect::<Vec<_>>()
825-
} else {
826-
Vec::from([ConfigurationItem {
827-
scope_uri: None,
816+
let params: ConfigurationParams = self.expect_message(
817+
&format!("Request {}", WorkspaceConfiguration::METHOD),
818+
|msg| {
819+
if let Message::Request(x) = msg
820+
&& x.method == WorkspaceConfiguration::METHOD
821+
{
822+
assert_eq!(x.id, RequestId::from(id));
823+
Some(serde_json::from_value(x.params).unwrap())
824+
} else {
825+
None
826+
}
827+
},
828+
);
829+
830+
let expected_items = scope_uris
831+
.unwrap_or_default()
832+
.into_iter()
833+
.cloned()
834+
.map(Some)
835+
.chain(once(None))
836+
.map(|scope_uri| ConfigurationItem {
837+
scope_uri,
828838
section: Some("python".to_owned()),
829-
}])
830-
};
839+
})
840+
.collect::<Vec<_>>();
831841

832-
let expected_msg = Message::Request(Request {
833-
id: RequestId::from(id),
834-
method: WorkspaceConfiguration::METHOD.to_owned(),
835-
params: json!(ConfigurationParams { items }),
836-
});
837-
let expected_str = serde_json::to_string(&expected_msg).unwrap();
838-
self.expect_message_helper(
839-
|msg| match msg {
840-
Message::Notification(_) => ValidationResult::Skip,
841-
_ => {
842-
let actual_str = serde_json::to_string(msg).unwrap();
843-
assert_eq!(&expected_str, &actual_str, "Configuration request mismatch");
844-
ValidationResult::Pass
845-
}
842+
assert_eq!(
843+
ConfigurationParams {
844+
items: expected_items
846845
},
847-
&format!("Expected configuration request: {expected_msg:?}"),
846+
params
848847
);
849848
}
850849

851850
/// Expect a file watcher registration request.
852851
/// Validates that the request is specifically registering the file watcher (ID: "FILEWATCHER").
853852
pub fn expect_file_watcher_register(&self) {
854-
self.expect_message_helper(
855-
|msg| match msg {
856-
Message::Request(req)
857-
if req.method == "client/registerCapability"
858-
&& req
859-
.params
860-
.get("registrations")
861-
.and_then(|r| r.as_array())
862-
.map(|arr| {
863-
arr.iter().any(|reg| {
864-
reg.get("id").and_then(|id| id.as_str()) == Some("FILEWATCHER")
865-
})
866-
})
867-
.unwrap_or(false) =>
853+
let params: RegistrationParams =
854+
self.expect_message(&format!("Request {}", RegisterCapability::METHOD), |msg| {
855+
if let Message::Request(x) = msg
856+
&& x.method == RegisterCapability::METHOD
868857
{
869-
ValidationResult::Pass
858+
Some(serde_json::from_value(x.params).unwrap())
859+
} else {
860+
None
870861
}
871-
Message::Notification(_) => ValidationResult::Skip,
872-
_ => ValidationResult::Fail,
873-
},
874-
"Expected file watcher registerCapability",
875-
);
862+
});
863+
assert!(params.registrations.iter().any(|x| x.id == "FILEWATCHER"));
876864
}
877865

878866
/// Expect a file watcher unregistration request.
879867
/// Validates that the request is specifically unregistering the file watcher (ID: "FILEWATCHER").
880868
pub fn expect_file_watcher_unregister(&self) {
881-
self.expect_message_helper(
882-
|msg| match msg {
883-
Message::Request(req)
884-
if req.method == "client/unregisterCapability"
885-
&& req
886-
.params
887-
.get("unregisterations")
888-
.and_then(|r| r.as_array())
889-
.map(|arr| {
890-
arr.iter().any(|reg| {
891-
reg.get("id").and_then(|id| id.as_str()) == Some("FILEWATCHER")
892-
})
893-
})
894-
.unwrap_or(false) =>
869+
let params: UnregistrationParams = self.expect_message(
870+
&format!("Request {}", UnregisterCapability::METHOD),
871+
|msg| {
872+
if let Message::Request(x) = msg
873+
&& x.method == UnregisterCapability::METHOD
895874
{
896-
ValidationResult::Pass
875+
Some(serde_json::from_value(x.params).unwrap())
876+
} else {
877+
None
897878
}
898-
Message::Notification(_) => ValidationResult::Skip,
899-
_ => ValidationResult::Fail,
900879
},
901-
"Expected file watcher unregisterCapability",
880+
);
881+
assert!(
882+
params
883+
.unregisterations
884+
.iter()
885+
.any(|x| x.id == "FILEWATCHER")
902886
);
903887
}
904888

0 commit comments

Comments
 (0)