Skip to content

Commit 73c3711

Browse files
committed
Merge pull request #2930 from austinzheng/az-stringtests
Adding tests for String's replaceSubrange overloads
2 parents ce09671 + f92be08 commit 73c3711

File tree

1 file changed

+124
-0
lines changed

1 file changed

+124
-0
lines changed

validation-test/stdlib/String.swift

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,5 +1282,129 @@ StringTests.test("String.decodeCString/UTF32") {
12821282
expectEqual("foobar", actual!.result)
12831283
}
12841284

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+
}
12851409

12861410
runAllTests()

0 commit comments

Comments
 (0)