@@ -23,7 +23,11 @@ use lsp_server::Request;
2323use lsp_server:: RequestId ;
2424use lsp_server:: Response ;
2525use lsp_server:: ResponseError ;
26+ use lsp_types:: ConfigurationItem ;
27+ use lsp_types:: ConfigurationParams ;
2628use lsp_types:: PublishDiagnosticsParams ;
29+ use lsp_types:: RegistrationParams ;
30+ use lsp_types:: UnregistrationParams ;
2731use lsp_types:: Url ;
2832use lsp_types:: notification:: DidChangeConfiguration ;
2933use lsp_types:: notification:: DidChangeNotebookDocument ;
@@ -45,11 +49,13 @@ use lsp_types::request::HoverRequest;
4549use lsp_types:: request:: Initialize ;
4650use lsp_types:: request:: InlayHintRequest ;
4751use lsp_types:: request:: References ;
52+ use lsp_types:: request:: RegisterCapability ;
4853use lsp_types:: request:: Request as _;
4954use lsp_types:: request:: SemanticTokensFullRequest ;
5055use lsp_types:: request:: SemanticTokensRangeRequest ;
5156use lsp_types:: request:: Shutdown ;
5257use lsp_types:: request:: SignatureHelpRequest ;
58+ use lsp_types:: request:: UnregisterCapability ;
5359use lsp_types:: request:: WillRenameFiles ;
5460use lsp_types:: request:: WorkspaceConfiguration ;
5561use 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