@@ -1798,6 +1798,110 @@ extension DataTests {
17981798// MARK: - Base64 Encode/Decode Tests
17991799
18001800extension DataTests {
1801+
1802+ func test_base64Encode_emptyData( ) {
1803+ XCTAssertEqual ( Data ( ) . base64EncodedString ( ) , " " )
1804+ XCTAssertEqual ( Data ( ) . base64EncodedData ( ) , Data ( ) )
1805+ }
1806+
1807+ func test_base64Encode_arrayOfNulls( ) {
1808+ let input = Data ( repeating: 0 , count: 10 )
1809+ XCTAssertEqual ( input. base64EncodedString ( ) , " AAAAAAAAAAAAAA== " )
1810+ XCTAssertEqual ( input. base64EncodedData ( ) , Data ( " AAAAAAAAAAAAAA== " . utf8) )
1811+ }
1812+
1813+ func test_base64Encode_differentPaddingNeeds( ) {
1814+ XCTAssertEqual ( Data ( [ 1 , 2 , 3 , 4 ] ) . base64EncodedString ( ) , " AQIDBA== " )
1815+ XCTAssertEqual ( Data ( [ 1 , 2 , 3 , 4 , 5 ] ) . base64EncodedString ( ) , " AQIDBAU= " )
1816+ XCTAssertEqual ( Data ( [ 1 , 2 , 3 , 4 , 5 , 6 ] ) . base64EncodedString ( ) , " AQIDBAUG " )
1817+
1818+ XCTAssertEqual ( Data ( [ 1 , 2 , 3 , 4 ] ) . base64EncodedString ( options: [ . lineLength64Characters] ) , " AQIDBA== " )
1819+ XCTAssertEqual ( Data ( [ 1 , 2 , 3 , 4 , 5 ] ) . base64EncodedString ( options: [ . lineLength64Characters] ) , " AQIDBAU= " )
1820+ XCTAssertEqual ( Data ( [ 1 , 2 , 3 , 4 , 5 , 6 ] ) . base64EncodedString ( options: [ . lineLength64Characters] ) , " AQIDBAUG " )
1821+ }
1822+
1823+ func test_base64Encode_addingLinebreaks( ) {
1824+ let input = """
1825+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut at tincidunt arcu. Suspendisse nec sodales erat, sit amet imperdiet ipsum. Etiam sed ornare felis.
1826+ """
1827+
1828+ // using .endLineWithLineFeed
1829+ XCTAssertEqual (
1830+ Data ( input. utf8) . base64EncodedString ( options: [ . lineLength64Characters, . endLineWithLineFeed] ) ,
1831+ """
1832+ TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2Np \n \
1833+ bmcgZWxpdC4gVXQgYXQgdGluY2lkdW50IGFyY3UuIFN1c3BlbmRpc3NlIG5lYyBz \n \
1834+ b2RhbGVzIGVyYXQsIHNpdCBhbWV0IGltcGVyZGlldCBpcHN1bS4gRXRpYW0gc2Vk \n \
1835+ IG9ybmFyZSBmZWxpcy4=
1836+ """
1837+ )
1838+ XCTAssertEqual (
1839+ Data ( input. utf8) . base64EncodedString ( options: [ . lineLength76Characters, . endLineWithLineFeed] ) ,
1840+ """
1841+ TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4g \n \
1842+ VXQgYXQgdGluY2lkdW50IGFyY3UuIFN1c3BlbmRpc3NlIG5lYyBzb2RhbGVzIGVyYXQsIHNpdCBh \n \
1843+ bWV0IGltcGVyZGlldCBpcHN1bS4gRXRpYW0gc2VkIG9ybmFyZSBmZWxpcy4=
1844+ """
1845+ )
1846+
1847+ // using .endLineWithCarriageReturn
1848+ XCTAssertEqual (
1849+ Data ( input. utf8) . base64EncodedString ( options: [ . lineLength64Characters, . endLineWithCarriageReturn] ) ,
1850+ """
1851+ TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2Np \r \
1852+ bmcgZWxpdC4gVXQgYXQgdGluY2lkdW50IGFyY3UuIFN1c3BlbmRpc3NlIG5lYyBz \r \
1853+ b2RhbGVzIGVyYXQsIHNpdCBhbWV0IGltcGVyZGlldCBpcHN1bS4gRXRpYW0gc2Vk \r \
1854+ IG9ybmFyZSBmZWxpcy4=
1855+ """
1856+ )
1857+ XCTAssertEqual (
1858+ Data ( input. utf8) . base64EncodedString ( options: [ . lineLength76Characters, . endLineWithCarriageReturn] ) ,
1859+ """
1860+ TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4g \r \
1861+ VXQgYXQgdGluY2lkdW50IGFyY3UuIFN1c3BlbmRpc3NlIG5lYyBzb2RhbGVzIGVyYXQsIHNpdCBh \r \
1862+ bWV0IGltcGVyZGlldCBpcHN1bS4gRXRpYW0gc2VkIG9ybmFyZSBmZWxpcy4=
1863+ """
1864+ )
1865+
1866+ // using .endLineWithLineFeed, .endLineWithCarriageReturn
1867+ XCTAssertEqual (
1868+ Data ( input. utf8) . base64EncodedString ( options: [ . lineLength64Characters, . endLineWithLineFeed, . endLineWithCarriageReturn] ) ,
1869+ """
1870+ TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2Np \r \n \
1871+ bmcgZWxpdC4gVXQgYXQgdGluY2lkdW50IGFyY3UuIFN1c3BlbmRpc3NlIG5lYyBz \r \n \
1872+ b2RhbGVzIGVyYXQsIHNpdCBhbWV0IGltcGVyZGlldCBpcHN1bS4gRXRpYW0gc2Vk \r \n \
1873+ IG9ybmFyZSBmZWxpcy4=
1874+ """
1875+ )
1876+ XCTAssertEqual (
1877+ Data ( input. utf8) . base64EncodedString ( options: [ . lineLength76Characters, . endLineWithLineFeed, . endLineWithCarriageReturn] ) ,
1878+ """
1879+ TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4g \r \n \
1880+ VXQgYXQgdGluY2lkdW50IGFyY3UuIFN1c3BlbmRpc3NlIG5lYyBzb2RhbGVzIGVyYXQsIHNpdCBh \r \n \
1881+ bWV0IGltcGVyZGlldCBpcHN1bS4gRXRpYW0gc2VkIG9ybmFyZSBmZWxpcy4=
1882+ """
1883+ )
1884+
1885+ // using no explicit endLine option
1886+ XCTAssertEqual (
1887+ Data ( input. utf8) . base64EncodedString ( options: [ . lineLength64Characters] ) ,
1888+ """
1889+ TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2Np \r \n \
1890+ bmcgZWxpdC4gVXQgYXQgdGluY2lkdW50IGFyY3UuIFN1c3BlbmRpc3NlIG5lYyBz \r \n \
1891+ b2RhbGVzIGVyYXQsIHNpdCBhbWV0IGltcGVyZGlldCBpcHN1bS4gRXRpYW0gc2Vk \r \n \
1892+ IG9ybmFyZSBmZWxpcy4=
1893+ """
1894+ )
1895+ XCTAssertEqual (
1896+ Data ( input. utf8) . base64EncodedString ( options: [ . lineLength76Characters] ) ,
1897+ """
1898+ TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4g \r \n \
1899+ VXQgYXQgdGluY2lkdW50IGFyY3UuIFN1c3BlbmRpc3NlIG5lYyBzb2RhbGVzIGVyYXQsIHNpdCBh \r \n \
1900+ bWV0IGltcGVyZGlldCBpcHN1bS4gRXRpYW0gc2VkIG9ybmFyZSBmZWxpcy4=
1901+ """
1902+ )
1903+ }
1904+
18011905 func test_base64Data_small( ) {
18021906 let data = Data ( " Hello World " . utf8)
18031907 let base64 = data. base64EncodedString ( )
0 commit comments