@@ -1116,6 +1116,79 @@ mod tests {
11161116 assert_document_integrity ( & doc) ;
11171117 }
11181118
1119+ #[ test]
1120+ fn comment_at_begin ( ) {
1121+ let path = PgTPath :: new ( "test.sql" ) ;
1122+
1123+ let mut doc = Document :: new (
1124+ path. clone ( ) ,
1125+ "-- Add new schema named \" private\" \n CREATE SCHEMA \" private\" ;" . to_string ( ) ,
1126+ 0 ,
1127+ ) ;
1128+
1129+ let change = ChangeFileParams {
1130+ path : path. clone ( ) ,
1131+ version : 1 ,
1132+ changes : vec ! [ ChangeParams {
1133+ text: "" . to_string( ) ,
1134+ range: Some ( TextRange :: new( 0 . into( ) , 1 . into( ) ) ) ,
1135+ } ] ,
1136+ } ;
1137+
1138+ let changed = doc. apply_file_change ( & change) ;
1139+
1140+ assert_eq ! (
1141+ doc. content,
1142+ "- Add new schema named \" private\" \n CREATE SCHEMA \" private\" ;"
1143+ ) ;
1144+
1145+ assert_eq ! ( changed. len( ) , 3 ) ;
1146+ assert ! ( matches!(
1147+ changed[ 0 ] ,
1148+ StatementChange :: Deleted ( Statement { id: 0 , .. } )
1149+ ) ) ;
1150+ assert ! ( matches!(
1151+ changed[ 1 ] ,
1152+ StatementChange :: Added ( AddedStatement { .. } )
1153+ ) ) ;
1154+ assert ! ( matches!(
1155+ changed[ 2 ] ,
1156+ StatementChange :: Added ( AddedStatement { .. } )
1157+ ) ) ;
1158+
1159+ let change_2 = ChangeFileParams {
1160+ path : path. clone ( ) ,
1161+ version : 2 ,
1162+ changes : vec ! [ ChangeParams {
1163+ text: "-" . to_string( ) ,
1164+ range: Some ( TextRange :: new( 0 . into( ) , 0 . into( ) ) ) ,
1165+ } ] ,
1166+ } ;
1167+
1168+ let changed_2 = doc. apply_file_change ( & change_2) ;
1169+
1170+ assert_eq ! (
1171+ doc. content,
1172+ "-- Add new schema named \" private\" \n CREATE SCHEMA \" private\" ;"
1173+ ) ;
1174+
1175+ assert_eq ! ( changed_2. len( ) , 3 ) ;
1176+ assert ! ( matches!(
1177+ changed_2[ 0 ] ,
1178+ StatementChange :: Deleted ( Statement { .. } )
1179+ ) ) ;
1180+ assert ! ( matches!(
1181+ changed_2[ 1 ] ,
1182+ StatementChange :: Deleted ( Statement { .. } )
1183+ ) ) ;
1184+ assert ! ( matches!(
1185+ changed_2[ 2 ] ,
1186+ StatementChange :: Added ( AddedStatement { .. } )
1187+ ) ) ;
1188+
1189+ assert_document_integrity ( & doc) ;
1190+ }
1191+
11191192 #[ test]
11201193 fn apply_changes_within_statement ( ) {
11211194 let input = "select id from users;\n select * from contacts;" ;
0 commit comments