@@ -981,3 +981,89 @@ async fn test_issue_281() -> Result<()> {
981981
982982 Ok ( ( ) )
983983}
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