@@ -981,3 +981,89 @@ async fn test_issue_281() -> Result<()> {
981
981
982
982
Ok ( ( ) )
983
983
}
984
+
985
+ #[ tokio:: test]
986
+ async fn test_issue_303 ( ) -> Result < ( ) > {
987
+ let factory = ServerFactory :: default ( ) ;
988
+ let mut fs = MemoryFileSystem :: default ( ) ;
989
+ let test_db = get_new_test_db ( ) . await ;
990
+
991
+ let setup = r#"
992
+ create table public.users (
993
+ id serial primary key,
994
+ name varchar(255) not null
995
+ );
996
+ "# ;
997
+
998
+ test_db
999
+ . execute ( setup)
1000
+ . await
1001
+ . expect ( "Failed to setup test database" ) ;
1002
+
1003
+ let mut conf = PartialConfiguration :: init ( ) ;
1004
+ conf. merge_with ( PartialConfiguration {
1005
+ db : Some ( PartialDatabaseConfiguration {
1006
+ database : Some (
1007
+ test_db
1008
+ . connect_options ( )
1009
+ . get_database ( )
1010
+ . unwrap ( )
1011
+ . to_string ( ) ,
1012
+ ) ,
1013
+ ..Default :: default ( )
1014
+ } ) ,
1015
+ ..Default :: default ( )
1016
+ } ) ;
1017
+ fs. insert (
1018
+ url ! ( "postgrestools.jsonc" ) . to_file_path ( ) . unwrap ( ) ,
1019
+ serde_json:: to_string_pretty ( & conf) . unwrap ( ) ,
1020
+ ) ;
1021
+
1022
+ let ( service, client) = factory
1023
+ . create_with_fs ( None , DynRef :: Owned ( Box :: new ( fs) ) )
1024
+ . into_inner ( ) ;
1025
+
1026
+ let ( stream, sink) = client. split ( ) ;
1027
+ let mut server = Server :: new ( service) ;
1028
+
1029
+ let ( sender, _) = channel ( CHANNEL_BUFFER_SIZE ) ;
1030
+ let reader = tokio:: spawn ( client_handler ( stream, sink, sender) ) ;
1031
+
1032
+ server. initialize ( ) . await ?;
1033
+ server. initialized ( ) . await ?;
1034
+
1035
+ server. load_configuration ( ) . await ?;
1036
+
1037
+ server. open_document ( "" ) . await ?;
1038
+
1039
+ let chars = [
1040
+ "C" , "R" , "E" , "A" , "T" , "E" , " " , "T" , "A" , "B" , "L" , "E" , " " , "\" " ,
1041
+ ] ;
1042
+
1043
+ for ( i, c) in chars. iter ( ) . enumerate ( ) {
1044
+ server
1045
+ . change_document (
1046
+ i as i32 + 4 ,
1047
+ vec ! [ TextDocumentContentChangeEvent {
1048
+ range: Some ( Range {
1049
+ start: Position {
1050
+ line: 0 ,
1051
+ character: i as u32 ,
1052
+ } ,
1053
+ end: Position {
1054
+ line: 0 ,
1055
+ character: i as u32 ,
1056
+ } ,
1057
+ } ) ,
1058
+ range_length: Some ( 0 ) ,
1059
+ text: c. to_string( ) ,
1060
+ } ] ,
1061
+ )
1062
+ . await ?;
1063
+ }
1064
+
1065
+ server. shutdown ( ) . await ?;
1066
+ reader. abort ( ) ;
1067
+
1068
+ Ok ( ( ) )
1069
+ }
0 commit comments