@@ -1073,40 +1073,75 @@ final class AcceptSuggestionTests: XCTestCase {
10731073
10741074 """ )
10751075 }
1076-
1076+
10771077 func test_accepting_multiple_suggestions_at_a_time( ) async throws {
10781078 let content = """
1079- let foobar = 1
1080- let zooKoo = 2
1079+ protocol Definition {
1080+ var id: String
1081+ var name: String
1082+ }
1083+
1084+ struct Foo {
1085+
1086+ }
1087+
1088+ struct Bar {
1089+
1090+ }
1091+
1092+ let foo = Foo()
1093+
1094+ struct Baz {}
10811095 """
10821096 let text1 = """
1083- let fooBar = 1
1084- let fooBar = 2
1097+ struct Foo: Definition {
1098+ var id: String
1099+ var name: String
1100+ }
10851101 """
10861102 let suggestion1 = CodeSuggestion (
10871103 id: " 1 " ,
10881104 text: text1,
1089- position: . init( line: 0 , character: 0 ) ,
1105+ position: . init( line: 5 , character: 0 ) ,
10901106 range: . init(
1091- start: . init( line: 0 , character: 0 ) ,
1092- end: . init( line: 0 , character: 14 )
1107+ start: . init( line: 5 , character: 0 ) ,
1108+ end: . init( line: 7 , character: 1 )
10931109 ) ,
1094- replacingLines: content. breakLines ( appendLineBreakToLastLine: true )
1110+ replacingLines: Array ( content. breakLines ( appendLineBreakToLastLine: true ) [ 5 ... 7 ] )
10951111 )
10961112
10971113 let text2 = """
1098- let zooKoo = 2
1099- let zooKoo = 3
1114+ struct Bar: Definition {
1115+ var id: String
1116+ var name: String
1117+ }
11001118 """
11011119 let suggestion2 = CodeSuggestion (
11021120 id: " 2 " ,
11031121 text: text2,
1104- position: . init( line: 1 , character: 0 ) ,
1122+ position: . init( line: 9 , character: 0 ) ,
11051123 range: . init(
1106- start: . init( line: 1 , character: 0 ) ,
1107- end: . init( line: 1 , character: 14 )
1124+ start: . init( line: 9 , character: 0 ) ,
1125+ end: . init( line: 11 , character: 1 )
11081126 ) ,
1109- replacingLines: content. breakLines ( appendLineBreakToLastLine: true )
1127+ replacingLines: Array ( content. breakLines ( appendLineBreakToLastLine: true ) [ 9 ... 11 ] )
1128+ )
1129+
1130+ let text3 = """
1131+ struct Baz: Definition {
1132+ var id: String
1133+ var name: String
1134+ }
1135+ """
1136+ let suggestion3 = CodeSuggestion (
1137+ id: " 3 " ,
1138+ text: text3,
1139+ position: . init( line: 15 , character: 0 ) ,
1140+ range: . init(
1141+ start: . init( line: 15 , character: 0 ) ,
1142+ end: . init( line: 15 , character: 13 )
1143+ ) ,
1144+ replacingLines: Array ( content. breakLines ( appendLineBreakToLastLine: true ) [ 15 ... 15 ] )
11101145 )
11111146
11121147 var extraInfo = SuggestionInjector . ExtraInfo ( )
@@ -1115,23 +1150,89 @@ final class AcceptSuggestionTests: XCTestCase {
11151150 SuggestionInjector ( ) . acceptSuggestions (
11161151 intoContentWithoutSuggestion: & lines,
11171152 cursorPosition: & cursor,
1118- completions: [ suggestion1, suggestion2] ,
1153+ completions: [ suggestion1, suggestion2, suggestion3 ] ,
11191154 extraInfo: & extraInfo
11201155 )
11211156 XCTAssertTrue ( extraInfo. didChangeContent)
11221157 XCTAssertTrue ( extraInfo. didChangeCursorPosition)
11231158 XCTAssertEqual ( lines, content. breakIntoEditorStyleLines ( ) . applying ( extraInfo. modifications) )
1124- XCTAssertEqual ( cursor, . init( line: 3 , character: 14 ) )
1159+ XCTAssertEqual ( cursor, . init( line: 20 , character: 1 ) )
11251160 XCTAssertEqual ( lines. joined ( separator: " " ) , """
1126- let fooBar = 1
1127- let fooBar = 2
1128- let zooKoo = 2
1129- let zooKoo = 3
1130-
1161+ protocol Definition {
1162+ var id: String
1163+ var name: String
1164+ }
1165+
1166+ struct Foo: Definition {
1167+ var id: String
1168+ var name: String
1169+ }
1170+
1171+ struct Bar: Definition {
1172+ var id: String
1173+ var name: String
1174+ }
1175+
1176+ let foo = Foo()
1177+
1178+ struct Baz: Definition {
1179+ var id: String
1180+ var name: String
1181+ }
1182+
11311183 """ )
11321184 XCTAssertEqual ( extraInfo. modificationRanges, [
1133- " 1 " : . init( start: . init( line: 0 , character: 0 ) , end: . init( line: 1 , character: 14 ) ) ,
1134- " 2 " : . init( start: . init( line: 2 , character: 0 ) , end: . init( line: 3 , character: 14 ) )
1185+ " 1 " : . init( start: . init( line: 5 , character: 0 ) , end: . init( line: 8 , character: 1 ) ) ,
1186+ " 2 " : . init( start: . init( line: 10 , character: 0 ) , end: . init( line: 13 , character: 1 ) ) ,
1187+ " 3 " : . init( start: . init( line: 17 , character: 0 ) , end: . init( line: 20 , character: 1 ) ) ,
1188+ ] )
1189+ }
1190+
1191+ func test_accepting_multiple_same_line_suggestions_at_a_time( ) async throws {
1192+ let content = " let foo = 1 \n "
1193+ let text1 = " berry "
1194+ let suggestion1 = CodeSuggestion (
1195+ id: " 1 " ,
1196+ text: text1,
1197+ position: . init( line: 0 , character: 4 ) ,
1198+ range: . init(
1199+ start: . init( line: 0 , character: 4 ) ,
1200+ end: . init( line: 0 , character: 7 )
1201+ ) ,
1202+ replacingLines: [ content]
1203+ )
1204+
1205+ let text2 = """
1206+ 200
1207+ """
1208+ let suggestion2 = CodeSuggestion (
1209+ id: " 2 " ,
1210+ text: text2,
1211+ position: . init( line: 0 , character: 10 ) ,
1212+ range: . init(
1213+ start: . init( line: 0 , character: 10 ) ,
1214+ end: . init( line: 0 , character: 11 )
1215+ ) ,
1216+ replacingLines: [ content]
1217+ )
1218+
1219+ var extraInfo = SuggestionInjector . ExtraInfo ( )
1220+ var lines = content. breakIntoEditorStyleLines ( )
1221+ var cursor = CursorPosition ( line: 0 , character: 0 )
1222+ SuggestionInjector ( ) . acceptSuggestions (
1223+ intoContentWithoutSuggestion: & lines,
1224+ cursorPosition: & cursor,
1225+ completions: [ suggestion1, suggestion2] ,
1226+ extraInfo: & extraInfo
1227+ )
1228+ XCTAssertTrue ( extraInfo. didChangeContent)
1229+ XCTAssertTrue ( extraInfo. didChangeCursorPosition)
1230+ XCTAssertEqual ( lines, content. breakIntoEditorStyleLines ( ) . applying ( extraInfo. modifications) )
1231+ XCTAssertEqual ( cursor, . init( line: 0 , character: 15 ) )
1232+ XCTAssertEqual ( lines. joined ( separator: " " ) , " let berry = 200 \n " )
1233+ XCTAssertEqual ( extraInfo. modificationRanges, [
1234+ " 1 " : . init( start: . init( line: 0 , character: 4 ) , end: . init( line: 0 , character: 9 ) ) ,
1235+ " 2 " : . init( start: . init( line: 0 , character: 12 ) , end: . init( line: 0 , character: 15 ) ) ,
11351236 ] )
11361237 }
11371238}
0 commit comments