@@ -28,6 +28,15 @@ class TestNSData: XCTestCase {
28
28
( " test_edgeDebugDescription " , test_edgeDebugDescription) ,
29
29
( " test_writeToURLOptions " , test_writeToURLOptions) ,
30
30
( " test_edgeNoCopyDescription " , test_edgeNoCopyDescription) ,
31
+ ( " test_initializeWithBase64EncodedDataGetsDecodedData " , test_initializeWithBase64EncodedDataGetsDecodedData) ,
32
+ ( " test_initializeWithBase64EncodedDataWithNonBase64CharacterIsNil " , test_initializeWithBase64EncodedDataWithNonBase64CharacterIsNil) ,
33
+ ( " test_initializeWithBase64EncodedDataWithNonBase64CharacterWithOptionToAllowItSkipsCharacter " , test_initializeWithBase64EncodedDataWithNonBase64CharacterWithOptionToAllowItSkipsCharacter) ,
34
+ ( " test_base64EncodedDataGetsEncodedText " , test_base64EncodedDataGetsEncodedText) ,
35
+ ( " test_base64EncodedDataWithOptionToInsertCarriageReturnContainsCarriageReturn " , test_base64EncodedDataWithOptionToInsertCarriageReturnContainsCarriageReturn) ,
36
+ ( " test_base64EncodedDataWithOptionToInsertLineFeedsContainsLineFeed " , test_base64EncodedDataWithOptionToInsertLineFeedsContainsLineFeed) ,
37
+ ( " test_base64EncodedDataWithOptionToInsertCarriageReturnAndLineFeedContainsBoth " , test_base64EncodedDataWithOptionToInsertCarriageReturnAndLineFeedContainsBoth) ,
38
+ ( " test_base64EncodedStringGetsEncodedText " , test_base64EncodedStringGetsEncodedText) ,
39
+ ( " test_initializeWithBase64EncodedStringGetsDecodedData " , test_initializeWithBase64EncodedStringGetsDecodedData) ,
31
40
]
32
41
}
33
42
@@ -109,4 +118,138 @@ class TestNSData: XCTestCase {
109
118
XCTAssertEqual ( data. debugDescription, expected)
110
119
XCTAssertEqual ( data. bytes, bytes)
111
120
}
121
+
122
+ func test_initializeWithBase64EncodedDataGetsDecodedData( ) {
123
+ let plainText = " ARMA virumque cano, Troiae qui primus ab oris \n Italiam, fato profugus, Laviniaque venit "
124
+ let encodedText = " QVJNQSB2aXJ1bXF1ZSBjYW5vLCBUcm9pYWUgcXVpIHByaW11cyBhYiBvcmlzCkl0YWxpYW0sIGZhdG8gcHJvZnVndXMsIExhdmluaWFxdWUgdmVuaXQ= "
125
+ guard let encodedData = encodedText. bridge ( ) . dataUsingEncoding ( NSUTF8StringEncoding) else {
126
+ XCTFail ( " Could not get UTF-8 data " )
127
+ return
128
+ }
129
+ guard let decodedData = NSData ( base64EncodedData: encodedData, options: [ ] ) else {
130
+ XCTFail ( " Could not Base-64 decode data " )
131
+ return
132
+ }
133
+ guard let decodedText = NSString ( data: decodedData, encoding: NSUTF8StringEncoding) ? . bridge ( ) else {
134
+ XCTFail ( " Could not convert decoded data to a UTF-8 String " )
135
+ return
136
+ }
137
+
138
+ XCTAssertEqual ( decodedText, plainText)
139
+ }
140
+
141
+ func test_initializeWithBase64EncodedDataWithNonBase64CharacterIsNil( ) {
142
+ let encodedText = " QVJNQSB2aXJ1bXF1ZSBjYW5vLCBUcm9pYWUgcXVpIHBya$W11cyBhYiBvcmlzCkl0YWxpYW0sIGZhdG8gcHJvZnVndXMsIExhdmluaWFxdWUgdmVuaXQ= "
143
+ guard let encodedData = encodedText. bridge ( ) . dataUsingEncoding ( NSUTF8StringEncoding) else {
144
+ XCTFail ( " Could not get UTF-8 data " )
145
+ return
146
+ }
147
+ let decodedData = NSData ( base64EncodedData: encodedData, options: [ ] )
148
+ XCTAssertNil ( decodedData)
149
+ }
150
+
151
+ func test_initializeWithBase64EncodedDataWithNonBase64CharacterWithOptionToAllowItSkipsCharacter( ) {
152
+ let plainText = " ARMA virumque cano, Troiae qui primus ab oris \n Italiam, fato profugus, Laviniaque venit "
153
+ let encodedText = " QVJNQSB2aXJ1bXF1ZSBjYW5vLCBUcm9pYWUgcXVpIHBya$W11cyBhYiBvcmlzCkl0YWxpYW0sIGZhdG8gcHJvZnVndXMsIExhdmluaWFxdWUgdmVuaXQ= "
154
+ guard let encodedData = encodedText. bridge ( ) . dataUsingEncoding ( NSUTF8StringEncoding) else {
155
+ XCTFail ( " Could not get UTF-8 data " )
156
+ return
157
+ }
158
+ guard let decodedData = NSData ( base64EncodedData: encodedData, options: [ . IgnoreUnknownCharacters] ) else {
159
+ XCTFail ( " Could not Base-64 decode data " )
160
+ return
161
+ }
162
+ guard let decodedText = NSString ( data: decodedData, encoding: NSUTF8StringEncoding) ? . bridge ( ) else {
163
+ XCTFail ( " Could not convert decoded data to a UTF-8 String " )
164
+ return
165
+ }
166
+
167
+ XCTAssertEqual ( decodedText, plainText)
168
+ }
169
+
170
+ func test_initializeWithBase64EncodedStringGetsDecodedData( ) {
171
+ let plainText = " ARMA virumque cano, Troiae qui primus ab oris \n Italiam, fato profugus, Laviniaque venit "
172
+ let encodedText = " QVJNQSB2aXJ1bXF1ZSBjYW5vLCBUcm9pYWUgcXVpIHByaW11cyBhYiBvcmlzCkl0YWxpYW0sIGZhdG8gcHJvZnVndXMsIExhdmluaWFxdWUgdmVuaXQ= "
173
+ guard let decodedData = NSData ( base64EncodedString: encodedText, options: [ ] ) else {
174
+ XCTFail ( " Could not Base-64 decode data " )
175
+ return
176
+ }
177
+ guard let decodedText = NSString ( data: decodedData, encoding: NSUTF8StringEncoding) ? . bridge ( ) else {
178
+ XCTFail ( " Could not convert decoded data to a UTF-8 String " )
179
+ return
180
+ }
181
+
182
+ XCTAssertEqual ( decodedText, plainText)
183
+ }
184
+
185
+ func test_base64EncodedDataGetsEncodedText( ) {
186
+ let plainText = " Constitit, et lacrimans, `Quis iam locus’ inquit `Achate, \n quae regio in terris nostri non plena laboris?` "
187
+ let encodedText = " Q29uc3RpdGl0LCBldCBsYWNyaW1hbnMsIGBRdWlzIGlhbSBsb2N1c+KAmSBpbnF1aXQgYEFjaGF0ZSwKcXVhZSByZWdpbyBpbiB0ZXJyaXMgbm9zdHJpIG5vbiBwbGVuYSBsYWJvcmlzP2A= "
188
+ guard let data = plainText. bridge ( ) . dataUsingEncoding ( NSUTF8StringEncoding) else {
189
+ XCTFail ( " Could not encode UTF-8 string " )
190
+ return
191
+ }
192
+ let encodedData = data. base64EncodedDataWithOptions ( [ ] )
193
+ guard let encodedTextResult = NSString ( data: encodedData, encoding: NSASCIIStringEncoding) ? . bridge ( ) else {
194
+ XCTFail ( " Could not convert encoded data to an ASCII String " )
195
+ return
196
+ }
197
+ XCTAssertEqual ( encodedTextResult, encodedText)
198
+ }
199
+
200
+ func test_base64EncodedDataWithOptionToInsertLineFeedsContainsLineFeed( ) {
201
+ let plainText = " Constitit, et lacrimans, `Quis iam locus’ inquit `Achate, \n quae regio in terris nostri non plena laboris?` "
202
+ let encodedText = " Q29uc3RpdGl0LCBldCBsYWNyaW1hbnMsIGBRdWlzIGlhbSBsb2N1c+KAmSBpbnF1 \n aXQgYEFjaGF0ZSwKcXVhZSByZWdpbyBpbiB0ZXJyaXMgbm9zdHJpIG5vbiBwbGVu \n YSBsYWJvcmlzP2A= "
203
+ guard let data = plainText. bridge ( ) . dataUsingEncoding ( NSUTF8StringEncoding) else {
204
+ XCTFail ( " Could not encode UTF-8 string " )
205
+ return
206
+ }
207
+ let encodedData = data. base64EncodedDataWithOptions ( [ . Encoding64CharacterLineLength, . EncodingEndLineWithLineFeed] )
208
+ guard let encodedTextResult = NSString ( data: encodedData, encoding: NSASCIIStringEncoding) ? . bridge ( ) else {
209
+ XCTFail ( " Could not convert encoded data to an ASCII String " )
210
+ return
211
+ }
212
+ XCTAssertEqual ( encodedTextResult, encodedText)
213
+ }
214
+
215
+ func test_base64EncodedDataWithOptionToInsertCarriageReturnContainsCarriageReturn( ) {
216
+ let plainText = " Constitit, et lacrimans, `Quis iam locus’ inquit `Achate, \n quae regio in terris nostri non plena laboris?` "
217
+ let encodedText = " Q29uc3RpdGl0LCBldCBsYWNyaW1hbnMsIGBRdWlzIGlhbSBsb2N1c+KAmSBpbnF1aXQgYEFjaGF0 \r ZSwKcXVhZSByZWdpbyBpbiB0ZXJyaXMgbm9zdHJpIG5vbiBwbGVuYSBsYWJvcmlzP2A= "
218
+ guard let data = plainText. bridge ( ) . dataUsingEncoding ( NSUTF8StringEncoding) else {
219
+ XCTFail ( " Could not encode UTF-8 string " )
220
+ return
221
+ }
222
+ let encodedData = data. base64EncodedDataWithOptions ( [ . Encoding76CharacterLineLength, . EncodingEndLineWithCarriageReturn] )
223
+ guard let encodedTextResult = NSString ( data: encodedData, encoding: NSASCIIStringEncoding) ? . bridge ( ) else {
224
+ XCTFail ( " Could not convert encoded data to an ASCII String " )
225
+ return
226
+ }
227
+ XCTAssertEqual ( encodedTextResult, encodedText)
228
+ }
229
+
230
+ func test_base64EncodedDataWithOptionToInsertCarriageReturnAndLineFeedContainsBoth( ) {
231
+ let plainText = " Revocate animos, maestumque timorem mittite: forsan et haec olim meminisse iuvabit. "
232
+ let encodedText = " UmV2b2NhdGUgYW5pbW9zLCBtYWVzdHVtcXVlIHRpbW9yZW0gbWl0dGl0ZTogZm9yc2FuIGV0IGhh \r \n ZWMgb2xpbSBtZW1pbmlzc2UgaXV2YWJpdC4= "
233
+ guard let data = plainText. bridge ( ) . dataUsingEncoding ( NSUTF8StringEncoding) else {
234
+ XCTFail ( " Could not encode UTF-8 string " )
235
+ return
236
+ }
237
+ let encodedData = data. base64EncodedDataWithOptions ( [ . Encoding76CharacterLineLength, . EncodingEndLineWithCarriageReturn, . EncodingEndLineWithLineFeed] )
238
+ guard let encodedTextResult = NSString ( data: encodedData, encoding: NSASCIIStringEncoding) ? . bridge ( ) else {
239
+ XCTFail ( " Could not convert encoded data to an ASCII String " )
240
+ return
241
+ }
242
+ XCTAssertEqual ( encodedTextResult, encodedText)
243
+ }
244
+
245
+ func test_base64EncodedStringGetsEncodedText( ) {
246
+ let plainText = " Revocate animos, maestumque timorem mittite: forsan et haec olim meminisse iuvabit. "
247
+ let encodedText = " UmV2b2NhdGUgYW5pbW9zLCBtYWVzdHVtcXVlIHRpbW9yZW0gbWl0dGl0ZTogZm9yc2FuIGV0IGhhZWMgb2xpbSBtZW1pbmlzc2UgaXV2YWJpdC4= "
248
+ guard let data = plainText. bridge ( ) . dataUsingEncoding ( NSUTF8StringEncoding) else {
249
+ XCTFail ( " Could not encode UTF-8 string " )
250
+ return
251
+ }
252
+ let encodedTextResult = data. base64EncodedStringWithOptions ( [ ] )
253
+ XCTAssertEqual ( encodedTextResult, encodedText)
254
+ }
112
255
}
0 commit comments