@@ -1282,5 +1282,129 @@ StringTests.test("String.decodeCString/UTF32") {
1282
1282
expectEqual ( " foobar " , actual!. result)
1283
1283
}
1284
1284
1285
+ internal struct ReplaceSubrangeTest {
1286
+ let original : String
1287
+ let newElements : String
1288
+ // RangeSelection is defined in CheckRangeReplaceableCollectionType
1289
+ let rangeSelection : RangeSelection
1290
+ let expected : String
1291
+ let closedExpected : String ? // Expected array for closed ranges
1292
+ let loc : SourceLoc
1293
+
1294
+ internal init (
1295
+ original: String , newElements: String ,
1296
+ rangeSelection: RangeSelection , expected: String , closedExpected: String ? = nil ,
1297
+ file: String = #file, line: UInt = #line
1298
+ ) {
1299
+ self . original = original
1300
+ self . newElements = newElements
1301
+ self . rangeSelection = rangeSelection
1302
+ self . expected = expected
1303
+ self . closedExpected = closedExpected
1304
+ self . loc = SourceLoc ( file, line, comment: " replaceSubrange() test data " )
1305
+ }
1306
+ }
1307
+
1308
+ let replaceSubrangeTests = [
1309
+ ReplaceSubrangeTest (
1310
+ original: " " ,
1311
+ newElements: " " ,
1312
+ rangeSelection: . emptyRange,
1313
+ expected: " "
1314
+ ) ,
1315
+ ReplaceSubrangeTest (
1316
+ original: " " ,
1317
+ newElements: " meela " ,
1318
+ rangeSelection: . emptyRange,
1319
+ expected: " meela "
1320
+ ) ,
1321
+ ReplaceSubrangeTest (
1322
+ original: " eela " ,
1323
+ newElements: " m " ,
1324
+ rangeSelection: . leftEdge,
1325
+ expected: " meela "
1326
+ ) ,
1327
+ ReplaceSubrangeTest (
1328
+ original: " meel " ,
1329
+ newElements: " a " ,
1330
+ rangeSelection: . rightEdge,
1331
+ expected: " meela "
1332
+ ) ,
1333
+ ReplaceSubrangeTest (
1334
+ original: " a " ,
1335
+ newElements: " meel " ,
1336
+ rangeSelection: . leftEdge,
1337
+ expected: " meela "
1338
+ ) ,
1339
+ ReplaceSubrangeTest (
1340
+ original: " m " ,
1341
+ newElements: " eela " ,
1342
+ rangeSelection: . rightEdge,
1343
+ expected: " meela "
1344
+ ) ,
1345
+ ReplaceSubrangeTest (
1346
+ original: " alice " ,
1347
+ newElements: " bob " ,
1348
+ rangeSelection: . offsets( 1 , 1 ) ,
1349
+ expected: " aboblice "
1350
+ ) ,
1351
+ ReplaceSubrangeTest (
1352
+ original: " alice " ,
1353
+ newElements: " bob " ,
1354
+ rangeSelection: . offsets( 1 , 2 ) ,
1355
+ expected: " abobice "
1356
+ ) ,
1357
+ ReplaceSubrangeTest (
1358
+ original: " alice " ,
1359
+ newElements: " bob " ,
1360
+ rangeSelection: . offsets( 1 , 3 ) ,
1361
+ expected: " abobce "
1362
+ ) ,
1363
+ ReplaceSubrangeTest (
1364
+ original: " alice " ,
1365
+ newElements: " bob " ,
1366
+ rangeSelection: . offsets( 1 , 4 ) ,
1367
+ expected: " abobe "
1368
+ ) ,
1369
+ ReplaceSubrangeTest (
1370
+ original: " alice " ,
1371
+ newElements: " bob " ,
1372
+ rangeSelection: . offsets( 1 , 5 ) ,
1373
+ expected: " abob "
1374
+ ) ,
1375
+ ReplaceSubrangeTest (
1376
+ original: " bob " ,
1377
+ newElements: " meela " ,
1378
+ rangeSelection: . offsets( 1 , 2 ) ,
1379
+ expected: " bmeelab "
1380
+ ) ,
1381
+ ]
1382
+
1383
+ StringTests . test ( " String.replaceSubrange()/characters/range " ) {
1384
+ for test in replaceSubrangeTests {
1385
+ var theString = test. original
1386
+ let c = test. original. characters
1387
+ let rangeToReplace = test. rangeSelection. range ( in: c)
1388
+ let newCharacters : [ Character ] = test. newElements. characters. map { $0 }
1389
+ theString. replaceSubrange ( rangeToReplace, with: newCharacters)
1390
+ expectEqual (
1391
+ theString,
1392
+ test. expected,
1393
+ stackTrace: SourceLocStack ( ) . with ( test. loc) )
1394
+ }
1395
+ }
1396
+
1397
+ StringTests . test ( " String.replaceSubrange()/string/range " ) {
1398
+ for test in replaceSubrangeTests {
1399
+ var theString = test. original
1400
+ let c = test. original. characters
1401
+ let rangeToReplace = test. rangeSelection. range ( in: c)
1402
+ theString. replaceSubrange ( rangeToReplace, with: test. newElements)
1403
+ expectEqual (
1404
+ theString,
1405
+ test. expected,
1406
+ stackTrace: SourceLocStack ( ) . with ( test. loc) )
1407
+ }
1408
+ }
1285
1409
1286
1410
runAllTests ( )
0 commit comments