stdlib: fix a crash in String.rangeOfString when the result is NSNotFound

rdar://17550857


Swift SVN r19611
This commit is contained in:
Dmitri Hrybenko
2014-07-07 15:25:10 +00:00
parent b9b7121d5c
commit 09bbec7464
4 changed files with 68 additions and 4 deletions

View File

@@ -930,7 +930,44 @@ NSStringAPIs.test("rangeOfComposedCharacterSequencesForRange(_:)") {
}
NSStringAPIs.test("rangeOfString(_:options:range:locale:)") {
// FIXME
if true {
let s = ""
expectEmpty(s.rangeOfString(""))
expectEmpty(s.rangeOfString("abc"))
}
if true {
let s = "abc"
expectEmpty(s.rangeOfString(""))
expectEmpty(s.rangeOfString("def"))
expectOptionalEqual(s.startIndex..<s.endIndex, s.rangeOfString("abc"))
}
if true {
let s = "\u{3099}し\u{3099}す\u{3099}せ\u{3099}そ\u{3099}"
expectEqual("\u{3099}", s[s.rangeOfString("\u{3099}")!])
expectEqual("\u{3099}", s[s.rangeOfString("\u{305a}")!])
expectEmpty(s.rangeOfString("\u{3099}す"))
expectEmpty(s.rangeOfString(""))
// Note: here `rangeOfString` API produces indexes that don't point between
// grapheme cluster boundaries -- these can not be created with public
// String interface.
//
// FIXME: why does this seach succeed and the above queries fail? There is
// no apparent pattern.
expectEqual("\u{3099}", s[s.rangeOfString("\u{3099}")!])
}
if true {
let s = "а\u{0301}б\u{0301}в\u{0301}г\u{0301}"
expectEqual("а\u{0301}", s[s.rangeOfString("а\u{0301}")!])
expectEqual("б\u{0301}", s[s.rangeOfString("б\u{0301}")!])
expectEmpty(s.rangeOfString("б"))
expectEmpty(s.rangeOfString("\u{0301}б"))
// Again, indexes that don't correspond to grapheme cluster boundaries.
expectEqual("\u{0301}", s[s.rangeOfString("\u{0301}")!])
}
}
NSStringAPIs.test("smallestEncoding") {