@@ -1798,6 +1798,110 @@ extension DataTests {
1798
1798
// MARK: - Base64 Encode/Decode Tests
1799
1799
1800
1800
extension 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
+
1801
1905
func test_base64Data_small( ) {
1802
1906
let data = Data ( " Hello World " . utf8)
1803
1907
let base64 = data. base64EncodedString ( )
0 commit comments