@@ -46,8 +46,7 @@ struct EncodingDetectionTests {
4646 }
4747 #expect( String ( bomCapableData: data, encoding: . utf8) == " 0 " )
4848
49- var encoding : String . Encoding ?
50- let string = try self . encodedStringForFileName ( " UTF-8 BOM " , usedEncoding: & encoding)
49+ let ( string, encoding) = try self . encodedStringForFileName ( " UTF-8 BOM " )
5150
5251 #expect( string == " 0 " )
5352 #expect( encoding == . utf8)
@@ -89,8 +88,7 @@ struct EncodingDetectionTests {
8988
9089 @Test func utf16( ) throws {
9190
92- var encoding : String . Encoding ?
93- let string = try self . encodedStringForFileName ( " UTF-16 " , usedEncoding: & encoding)
91+ let ( string, encoding) = try self . encodedStringForFileName ( " UTF-16 " )
9492
9593 #expect( string == " 0 " )
9694 #expect( encoding == . utf16)
@@ -99,8 +97,7 @@ struct EncodingDetectionTests {
9997
10098 @Test func utf32( ) throws {
10199
102- var encoding : String . Encoding ?
103- let string = try self . encodedStringForFileName ( " UTF-32 " , usedEncoding: & encoding)
100+ let ( string, encoding) = try self . encodedStringForFileName ( " UTF-32 " )
104101
105102 #expect( string == " 0 " )
106103 #expect( encoding == . utf32)
@@ -112,52 +109,42 @@ struct EncodingDetectionTests {
112109 let data = try self . dataForFileName ( " ISO 2022-JP " )
113110 let encodings : [ String . Encoding ] = [ . iso2022JP, . utf16]
114111
115- var encoding : String . Encoding ?
116- let string = try String ( data: data, suggestedEncodings: encodings, usedEncoding: & encoding)
112+ let ( string, encoding) = try String . string ( data: data, options: . init( candidates: encodings) )
117113
118114 #expect( string == " dog犬 " )
119115 #expect( encoding == . iso2022JP)
120116 }
121117
122118
123- @Test func utf8 ( ) throws {
119+ @Test func emptySuggestion ( ) throws {
124120
125121 let data = try self . dataForFileName ( " UTF-8 " )
126122
127- var encoding : String . Encoding ?
128123 #expect( throws: CocoaError ( . fileReadUnknownStringEncoding) ) {
129- try String ( data: data, suggestedEncodings : [ ] , usedEncoding : & encoding )
124+ try String . string ( data: data, options : . init ( candidates : [ ] ) )
130125 }
131- #expect( encoding == nil )
132126 }
133127
134128
135- @Test func suggestedEncoding ( ) throws {
129+ @Test func utf8 ( ) throws {
136130
137131 let data = try self . dataForFileName ( " UTF-8 " )
138132
139- var encoding : String . Encoding ?
140133 let invalidEncoding = String . Encoding ( cfEncoding: kCFStringEncodingInvalidId)
141- let string = try String ( data: data, suggestedEncodings : [ invalidEncoding, . utf8] , usedEncoding : & encoding )
134+ let ( string, encoding ) = try String . string ( data: data, options : . init ( candidates : [ invalidEncoding, . utf8, . utf16 ] ) )
142135
143136 #expect( string == " 0 " )
144137 #expect( encoding == . utf8)
145138 }
146139
147140
148- @Test func emptyData( ) {
141+ @Test func emptyData( ) throws {
149142
150143 let data = Data ( )
144+ let ( string, encoding) = try String . string ( data: data, options: . init( candidates: [ . shiftJIS] ) )
151145
152- var encoding : String . Encoding ?
153- var string : String ?
154-
155- #expect( throws: CocoaError ( . fileReadUnknownStringEncoding) ) {
156- string = try String ( data: data, suggestedEncodings: [ ] , usedEncoding: & encoding)
157- }
158-
159- #expect( string == nil )
160- #expect( encoding == nil )
146+ #expect( string. isEmpty)
147+ #expect( encoding == . shiftJIS)
161148 #expect( !data. starts ( with: Unicode . BOM. utf8. sequence) )
162149 }
163150
@@ -291,11 +278,19 @@ private extension String.Encoding {
291278
292279private extension EncodingDetectionTests {
293280
294- func encodedStringForFileName( _ fileName: String , usedEncoding: inout String . Encoding ? ) throws -> String {
295-
296- let data = try self . dataForFileName ( fileName)
297-
298- return try String ( data: data, suggestedEncodings: [ ] , usedEncoding: & usedEncoding)
281+ func encodedStringForFileName( _ fileName: String ) throws -> ( String , String . Encoding ) {
282+
283+ try String . string (
284+ data: try self . dataForFileName ( fileName) ,
285+ options: . init( candidates: [
286+ . utf8,
287+ . utf16,
288+ . utf16BigEndian,
289+ . utf16LittleEndian,
290+ . utf32,
291+ . utf32BigEndian,
292+ . utf32LittleEndian,
293+ ] ) )
299294 }
300295
301296
0 commit comments