Skip to content

Commit 78cd056

Browse files
authored
Add more base64 decoding test (#1161)
* Add more base64 decoding test * Fix test * Test ignore whitespace in different positions
1 parent 74275a9 commit 78cd056

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

Tests/FoundationEssentialsTests/DataTests.swift

+89
Original file line numberDiff line numberDiff line change
@@ -1902,6 +1902,95 @@ extension DataTests {
19021902
)
19031903
}
19041904

1905+
func test_base64Decode_emptyString() {
1906+
XCTAssertEqual(Data(), Data(base64Encoded: ""))
1907+
}
1908+
1909+
func test_base64Decode_emptyData() {
1910+
XCTAssertEqual(Data(), Data(base64Encoded: Data()))
1911+
}
1912+
1913+
func test_base64Decode_arrayOfNulls() {
1914+
XCTAssertEqual(Data(repeating: 0, count: 10), Data(base64Encoded: "AAAAAAAAAAAAAA=="))
1915+
}
1916+
1917+
func test_base64Decode_AllTheBytesSequentially() {
1918+
let base64 = "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w=="
1919+
1920+
XCTAssertEqual(Data(UInt8(0) ... UInt8(255)), Data(base64Encoded: base64))
1921+
}
1922+
1923+
func test_base64Decode_ignoringLineBreaks() {
1924+
let base64 = """
1925+
TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2Np\r\n\
1926+
bmcgZWxpdC4gVXQgYXQgdGluY2lkdW50IGFyY3UuIFN1c3BlbmRpc3NlIG5lYyBz\r\n\
1927+
b2RhbGVzIGVyYXQsIHNpdCBhbWV0IGltcGVyZGlldCBpcHN1bS4gRXRpYW0gc2Vk\r\n\
1928+
IG9ybmFyZSBmZWxpcy4=
1929+
"""
1930+
let expected = """
1931+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut at tincidunt arcu. Suspendisse nec sodales erat, sit amet imperdiet ipsum. Etiam sed ornare felis.
1932+
"""
1933+
1934+
XCTAssertEqual(Data(expected.utf8), Data(base64Encoded: base64, options: .ignoreUnknownCharacters))
1935+
}
1936+
1937+
func test_base64Decode_invalidLength() {
1938+
XCTAssertNil(Data(base64Encoded: "AAAAA"))
1939+
XCTAssertNil(Data(base64Encoded: "AAAAA", options: .ignoreUnknownCharacters))
1940+
}
1941+
1942+
func test_base64Decode_variousPaddingNeeds() {
1943+
XCTAssertEqual(Data([1, 2, 3, 4]), Data(base64Encoded: "AQIDBA=="))
1944+
XCTAssertEqual(Data([1, 2, 3, 4, 5]), Data(base64Encoded: "AQIDBAU="))
1945+
XCTAssertEqual(Data([1, 2, 3, 4, 5, 6]), Data(base64Encoded: "AQIDBAUG"))
1946+
}
1947+
1948+
func test_base64Decode_ignoreWhitespaceAtVariousPlaces() {
1949+
XCTAssertEqual(Data([1, 2, 3, 4]), Data(base64Encoded: " AQIDBA==", options: .ignoreUnknownCharacters))
1950+
XCTAssertEqual(Data([1, 2, 3, 4]), Data(base64Encoded: "A QIDBA==", options: .ignoreUnknownCharacters))
1951+
XCTAssertEqual(Data([1, 2, 3, 4]), Data(base64Encoded: "AQ IDBA==", options: .ignoreUnknownCharacters))
1952+
XCTAssertEqual(Data([1, 2, 3, 4]), Data(base64Encoded: "AQI DBA==", options: .ignoreUnknownCharacters))
1953+
XCTAssertEqual(Data([1, 2, 3, 4]), Data(base64Encoded: "AQID BA==", options: .ignoreUnknownCharacters))
1954+
XCTAssertEqual(Data([1, 2, 3, 4]), Data(base64Encoded: "AQIDB A==", options: .ignoreUnknownCharacters))
1955+
XCTAssertEqual(Data([1, 2, 3, 4]), Data(base64Encoded: "AQIDBA ==", options: .ignoreUnknownCharacters))
1956+
XCTAssertEqual(Data([1, 2, 3, 4]), Data(base64Encoded: "AQIDBA= =", options: .ignoreUnknownCharacters))
1957+
XCTAssertEqual(Data([1, 2, 3, 4]), Data(base64Encoded: "AQIDBA== ", options: .ignoreUnknownCharacters))
1958+
1959+
XCTAssertEqual(Data([1, 2, 3, 4, 5]), Data(base64Encoded: " AQIDBAU=", options: .ignoreUnknownCharacters))
1960+
XCTAssertEqual(Data([1, 2, 3, 4, 5]), Data(base64Encoded: "A QIDBAU=", options: .ignoreUnknownCharacters))
1961+
XCTAssertEqual(Data([1, 2, 3, 4, 5]), Data(base64Encoded: "AQ IDBAU=", options: .ignoreUnknownCharacters))
1962+
XCTAssertEqual(Data([1, 2, 3, 4, 5]), Data(base64Encoded: "AQI DBAU=", options: .ignoreUnknownCharacters))
1963+
XCTAssertEqual(Data([1, 2, 3, 4, 5]), Data(base64Encoded: "AQID BAU=", options: .ignoreUnknownCharacters))
1964+
XCTAssertEqual(Data([1, 2, 3, 4, 5]), Data(base64Encoded: "AQIDB AU=", options: .ignoreUnknownCharacters))
1965+
XCTAssertEqual(Data([1, 2, 3, 4, 5]), Data(base64Encoded: "AQIDBA U=", options: .ignoreUnknownCharacters))
1966+
XCTAssertEqual(Data([1, 2, 3, 4, 5]), Data(base64Encoded: "AQIDBAU =", options: .ignoreUnknownCharacters))
1967+
XCTAssertEqual(Data([1, 2, 3, 4, 5]), Data(base64Encoded: "AQIDBAU= ", options: .ignoreUnknownCharacters))
1968+
1969+
XCTAssertEqual(Data([1, 2, 3, 4, 5, 6]), Data(base64Encoded: " AQIDBAUG", options: .ignoreUnknownCharacters))
1970+
XCTAssertEqual(Data([1, 2, 3, 4, 5, 6]), Data(base64Encoded: "A QIDBAUG", options: .ignoreUnknownCharacters))
1971+
XCTAssertEqual(Data([1, 2, 3, 4, 5, 6]), Data(base64Encoded: "AQ IDBAUG", options: .ignoreUnknownCharacters))
1972+
XCTAssertEqual(Data([1, 2, 3, 4, 5, 6]), Data(base64Encoded: "AQI DBAUG", options: .ignoreUnknownCharacters))
1973+
XCTAssertEqual(Data([1, 2, 3, 4, 5, 6]), Data(base64Encoded: "AQID BAUG", options: .ignoreUnknownCharacters))
1974+
XCTAssertEqual(Data([1, 2, 3, 4, 5, 6]), Data(base64Encoded: "AQIDB AUG", options: .ignoreUnknownCharacters))
1975+
XCTAssertEqual(Data([1, 2, 3, 4, 5, 6]), Data(base64Encoded: "AQIDBA UG", options: .ignoreUnknownCharacters))
1976+
XCTAssertEqual(Data([1, 2, 3, 4, 5, 6]), Data(base64Encoded: "AQIDBAU G", options: .ignoreUnknownCharacters))
1977+
XCTAssertEqual(Data([1, 2, 3, 4, 5, 6]), Data(base64Encoded: "AQIDBAUG ", options: .ignoreUnknownCharacters))
1978+
}
1979+
1980+
func test_base64Decode_test1MBDataGoing0to255OverAndOver() {
1981+
let oneMBTestData = createTestData(count: 1000 * 1024)
1982+
func createTestData(count: Int) -> Data {
1983+
var data = Data(count: count)
1984+
for index in data.indices {
1985+
data[index] = UInt8(index % Int(UInt8.max))
1986+
}
1987+
return data
1988+
}
1989+
1990+
let base64DataString = oneMBTestData.base64EncodedString(options: .lineLength64Characters)
1991+
XCTAssertEqual(oneMBTestData, Data(base64Encoded: base64DataString, options: .ignoreUnknownCharacters))
1992+
}
1993+
19051994
func test_base64Data_small() {
19061995
let data = Data("Hello World".utf8)
19071996
let base64 = data.base64EncodedString()

0 commit comments

Comments
 (0)