Skip to content

Commit cfcf10a

Browse files
authored
Support initializing string with nonLossyASCII encoding (#932)
1 parent 13b563e commit cfcf10a

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

Sources/FoundationEssentials/String/String+IO.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ extension String {
6666
where S.Iterator.Element == UInt8
6767
{
6868
switch encoding {
69-
case .ascii:
69+
case .ascii, .nonLossyASCII:
7070
func makeString(buffer: UnsafeBufferPointer<UInt8>) -> String? {
7171
return String(_validating: buffer, as: Unicode.ASCII.self)
7272
}

Tests/FoundationEssentialsTests/StringTests.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,6 +1012,13 @@ final class StringTests : XCTestCase {
10121012
XCTAssertEqual("e\u{301}\u{301}f".data(using: .ascii, allowLossyConversion: true), Data([UInt8(ascii: "e"), 0xFF, 0xFF, UInt8(ascii: "f")]))
10131013
XCTAssertEqual("e\u{301}\u{301}f".data(using: .nonLossyASCII, allowLossyConversion: true), Data([UInt8(ascii: "e"), UInt8(ascii: "?"), UInt8(ascii: "?"), UInt8(ascii: "f")]))
10141014
}
1015+
1016+
func test_initWithBytes_ascii() {
1017+
XCTAssertEqual(String(bytes: "abc".utf8, encoding: String._Encoding.ascii), "abc")
1018+
XCTAssertEqual(String(bytes: "abc".utf8, encoding: String._Encoding.nonLossyASCII), "abc")
1019+
XCTAssertEqual(String(bytes: "e\u{301}\u{301}f".utf8, encoding: String._Encoding.ascii), nil)
1020+
XCTAssertEqual(String(bytes: "e\u{301}\u{301}f".utf8, encoding: String._Encoding.nonLossyASCII), nil)
1021+
}
10151022

10161023
func test_compressingSlashes() {
10171024
let testCases: [(String, String)] = [

0 commit comments

Comments
 (0)