Skip to content

Commit 2924e0f

Browse files
committed
Merge branch 'krzyzanowskim-master'
2 parents 998cd52 + 76a9ba1 commit 2924e0f

File tree

2 files changed

+45
-14
lines changed

2 files changed

+45
-14
lines changed

Foundation/NSString.swift

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ extension NSString {
649649
return uppercaseStringWithLocale(nil)
650650
}
651651
}
652-
652+
653653
public var lowercaseString: String {
654654
get {
655655
return lowercaseStringWithLocale(nil)
@@ -681,24 +681,21 @@ extension NSString {
681681
}
682682

683683
public func uppercaseStringWithLocale(locale: NSLocale?) -> String {
684-
let string = CFStringCreateMutable(kCFAllocatorSystemDefault, 0)
685-
CFStringReplaceAll(string, self._cfObject)
686-
CFStringUppercase(string, locale?._cfObject)
687-
return string._swiftObject
684+
let mutableCopy = CFStringCreateMutableCopy(kCFAllocatorSystemDefault, 0, self._cfObject)
685+
CFStringUppercase(mutableCopy, locale?._cfObject ?? nil)
686+
return mutableCopy._swiftObject
688687
}
689-
688+
690689
public func lowercaseStringWithLocale(locale: NSLocale?) -> String {
691-
let string = CFStringCreateMutable(kCFAllocatorSystemDefault, 0)
692-
CFStringReplaceAll(string, self._cfObject)
693-
CFStringLowercase(string, locale?._cfObject)
694-
return string._swiftObject
690+
let mutableCopy = CFStringCreateMutableCopy(kCFAllocatorSystemDefault, 0, self._cfObject)
691+
CFStringLowercase(mutableCopy, locale?._cfObject ?? nil)
692+
return mutableCopy._swiftObject
695693
}
696694

697695
public func capitalizedStringWithLocale(locale: NSLocale?) -> String {
698-
let string = CFStringCreateMutable(kCFAllocatorSystemDefault, 0)
699-
CFStringReplaceAll(string, self._cfObject)
700-
CFStringCapitalize(string, locale?._cfObject)
701-
return string._swiftObject
696+
let mutableCopy = CFStringCreateMutableCopy(kCFAllocatorSystemDefault, 0, self._cfObject)
697+
CFStringCapitalize(mutableCopy, locale?._cfObject ?? nil)
698+
return mutableCopy._swiftObject
702699
}
703700

704701
internal func _getBlockStart(startPtr: UnsafeMutablePointer<Int>, end endPtr: UnsafeMutablePointer<Int>, contentsEnd contentsEndPtr: UnsafeMutablePointer<Int>, forRange range: NSRange, stopAtLineSeparators line: Bool) {

TestFoundation/TestNSString.swift

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ class TestNSString : XCTestCase {
3737
("test_FromNullTerminatedCStringInASCII", test_FromNullTerminatedCStringInASCII ),
3838
("test_FromNullTerminatedCStringInUTF8", test_FromNullTerminatedCStringInUTF8 ),
3939
("test_FromMalformedNullTerminatedCStringInUTF8", test_FromMalformedNullTerminatedCStringInUTF8 ),
40+
("test_uppercaseString", test_uppercaseString ),
41+
("test_lowercaseString", test_lowercaseString ),
42+
("test_capitalizedString", test_capitalizedString ),
4043
("test_longLongValue", test_longLongValue ),
4144
("test_rangeOfCharacterFromSet", test_rangeOfCharacterFromSet ),
4245
]
@@ -192,6 +195,37 @@ class TestNSString : XCTestCase {
192195
XCTAssertNil(string)
193196
}
194197

198+
func test_uppercaseString() {
199+
XCTAssertEqual(NSString(stringLiteral: "abcd").uppercaseString, "ABCD")
200+
XCTAssertEqual(NSString(stringLiteral: "абВГ").uppercaseString, "АБВГ")
201+
XCTAssertEqual(NSString(stringLiteral: "たちつてと").uppercaseString, "たちつてと")
202+
203+
// Special casing (see swift/validation-tests/stdlib/NSStringAPI.swift)
204+
XCTAssertEqual(NSString(stringLiteral: "\u{0069}").uppercaseStringWithLocale(NSLocale(localeIdentifier: "en")), "\u{0049}")
205+
// Currently fails; likely there are locale loading issues that are preventing this from functioning correctly
206+
// XCTAssertEqual(NSString(stringLiteral: "\u{0069}").uppercaseStringWithLocale(NSLocale(localeIdentifier: "tr")), "\u{0130}")
207+
XCTAssertEqual(NSString(stringLiteral: "\u{00df}").uppercaseString, "\u{0053}\u{0053}")
208+
XCTAssertEqual(NSString(stringLiteral: "\u{fb01}").uppercaseString, "\u{0046}\u{0049}")
209+
}
210+
211+
func test_lowercaseString() {
212+
XCTAssertEqual(NSString(stringLiteral: "abCD").lowercaseString, "abcd")
213+
XCTAssertEqual(NSString(stringLiteral: "aБВГ").lowercaseString, "aбвг")
214+
XCTAssertEqual(NSString(stringLiteral: "たちつてと").lowercaseString, "たちつてと")
215+
216+
// Special casing (see swift/validation-tests/stdlib/NSStringAPI.swift)
217+
XCTAssertEqual(NSString(stringLiteral: "\u{0130}").lowercaseStringWithLocale(NSLocale(localeIdentifier: "en")), "\u{0069}\u{0307}")
218+
XCTAssertEqual(NSString(stringLiteral: "\u{0130}").lowercaseStringWithLocale(NSLocale(localeIdentifier: "tr")), "\u{0069}")
219+
XCTAssertEqual(NSString(stringLiteral: "\u{0049}\u{0307}").lowercaseStringWithLocale(NSLocale(localeIdentifier: "en")), "\u{0069}\u{0307}")
220+
// Currently fails; likely there are locale loading issues that are preventing this from functioning correctly
221+
// XCTAssertEqual(NSString(stringLiteral: "\u{0049}\u{0307}").lowercaseStringWithLocale(NSLocale(localeIdentifier: "tr")), "\u{0069}")
222+
}
223+
224+
func test_capitalizedString() {
225+
XCTAssertEqual(NSString(stringLiteral: "foo Foo fOO FOO").capitalizedString, "Foo Foo Foo Foo")
226+
XCTAssertEqual(NSString(stringLiteral: "жжж").capitalizedString, "Жжж")
227+
}
228+
195229
func test_longLongValue() {
196230
let string1: NSString = "9223372036854775808"
197231
XCTAssertEqual(string1.longLongValue, 9223372036854775807)

0 commit comments

Comments
 (0)