Skip to content

Commit e62d939

Browse files
committed
Merge pull request #2944 from austinzheng/az-st2
Adding tests for String's replaceSubrange overloads for closed ranges
2 parents ecb4140 + 30ba084 commit e62d939

File tree

2 files changed

+52
-13
lines changed

2 files changed

+52
-13
lines changed

stdlib/public/core/StringRangeReplaceableCollection.swift.gyb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,6 @@ extension String {
185185
_ bounds: ${Range}<Index>,
186186
with newElements: C
187187
) where C : Collection, C.Iterator.Element == Character {
188-
// FIXME: swift-3-indexing-model: tests.
189188
withMutableCharacters {
190189
(v: inout CharacterView)
191190
in v.replaceSubrange(bounds, with: newElements)
@@ -209,7 +208,6 @@ extension String {
209208
public mutating func replaceSubrange(
210209
_ bounds: ${Range}<Index>, with newElements: String
211210
) {
212-
// FIXME: swift-3-indexing-model: tests.
213211
replaceSubrange(bounds, with: newElements.characters)
214212
}
215213
% end

validation-test/stdlib/String.swift

Lines changed: 52 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1285,10 +1285,9 @@ StringTests.test("String.decodeCString/UTF32") {
12851285
internal struct ReplaceSubrangeTest {
12861286
let original: String
12871287
let newElements: String
1288-
// RangeSelection is defined in CheckRangeReplaceableCollectionType
12891288
let rangeSelection: RangeSelection
12901289
let expected: String
1291-
let closedExpected: String? // Expected array for closed ranges
1290+
let closedExpected: String?
12921291
let loc: SourceLoc
12931292

12941293
internal init(
@@ -1322,49 +1321,57 @@ let replaceSubrangeTests = [
13221321
original: "eela",
13231322
newElements: "m",
13241323
rangeSelection: .leftEdge,
1325-
expected: "meela"
1324+
expected: "meela",
1325+
closedExpected: "mela"
13261326
),
13271327
ReplaceSubrangeTest(
13281328
original: "meel",
13291329
newElements: "a",
13301330
rangeSelection: .rightEdge,
1331-
expected: "meela"
1331+
expected: "meela",
1332+
closedExpected: "meea"
13321333
),
13331334
ReplaceSubrangeTest(
13341335
original: "a",
13351336
newElements: "meel",
13361337
rangeSelection: .leftEdge,
1337-
expected: "meela"
1338+
expected: "meela",
1339+
closedExpected: "meel"
13381340
),
13391341
ReplaceSubrangeTest(
13401342
original: "m",
13411343
newElements: "eela",
13421344
rangeSelection: .rightEdge,
1343-
expected: "meela"
1345+
expected: "meela",
1346+
closedExpected: "eela"
13441347
),
13451348
ReplaceSubrangeTest(
13461349
original: "alice",
13471350
newElements: "bob",
13481351
rangeSelection: .offsets(1, 1),
1349-
expected: "aboblice"
1352+
expected: "aboblice",
1353+
closedExpected: "abobice"
13501354
),
13511355
ReplaceSubrangeTest(
13521356
original: "alice",
13531357
newElements: "bob",
13541358
rangeSelection: .offsets(1, 2),
1355-
expected: "abobice"
1359+
expected: "abobice",
1360+
closedExpected: "abobce"
13561361
),
13571362
ReplaceSubrangeTest(
13581363
original: "alice",
13591364
newElements: "bob",
13601365
rangeSelection: .offsets(1, 3),
1361-
expected: "abobce"
1366+
expected: "abobce",
1367+
closedExpected: "abobe"
13621368
),
13631369
ReplaceSubrangeTest(
13641370
original: "alice",
13651371
newElements: "bob",
13661372
rangeSelection: .offsets(1, 4),
1367-
expected: "abobe"
1373+
expected: "abobe",
1374+
closedExpected: "abob"
13681375
),
13691376
ReplaceSubrangeTest(
13701377
original: "alice",
@@ -1376,7 +1383,8 @@ let replaceSubrangeTests = [
13761383
original: "bob",
13771384
newElements: "meela",
13781385
rangeSelection: .offsets(1, 2),
1379-
expected: "bmeelab"
1386+
expected: "bmeelab",
1387+
closedExpected: "bmeela"
13801388
),
13811389
]
13821390

@@ -1407,4 +1415,37 @@ StringTests.test("String.replaceSubrange()/string/range") {
14071415
}
14081416
}
14091417

1418+
StringTests.test("String.replaceSubrange()/characters/closedRange") {
1419+
for test in replaceSubrangeTests {
1420+
guard let closedExpected = test.closedExpected else {
1421+
continue
1422+
}
1423+
var theString = test.original
1424+
let c = test.original.characters
1425+
let rangeToReplace = test.rangeSelection.closedRange(in: c)
1426+
let newCharacters = Array(test.newElements.characters)
1427+
theString.replaceSubrange(rangeToReplace, with: newCharacters)
1428+
expectEqual(
1429+
theString,
1430+
closedExpected,
1431+
stackTrace: SourceLocStack().with(test.loc))
1432+
}
1433+
}
1434+
1435+
StringTests.test("String.replaceSubrange()/string/closedRange") {
1436+
for test in replaceSubrangeTests {
1437+
guard let closedExpected = test.closedExpected else {
1438+
continue
1439+
}
1440+
var theString = test.original
1441+
let c = test.original.characters
1442+
let rangeToReplace = test.rangeSelection.closedRange(in: c)
1443+
theString.replaceSubrange(rangeToReplace, with: test.newElements)
1444+
expectEqual(
1445+
theString,
1446+
closedExpected,
1447+
stackTrace: SourceLocStack().with(test.loc))
1448+
}
1449+
}
1450+
14101451
runAllTests()

0 commit comments

Comments
 (0)