Serenity Operating System
at master 57 lines 1.9 kB view raw
1/* 2 * Copyright (c) 2020, Tom Lebreux <tomlebreux@hotmail.com> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibTest/TestCase.h> 8 9#include <AK/Base64.h> 10#include <AK/DeprecatedString.h> 11#include <string.h> 12 13TEST_CASE(test_decode) 14{ 15 auto decode_equal = [&](StringView input, StringView expected) { 16 auto decoded_option = decode_base64(input); 17 EXPECT(!decoded_option.is_error()); 18 auto decoded = decoded_option.release_value(); 19 EXPECT(DeprecatedString::copy(decoded) == expected); 20 EXPECT(expected.length() <= calculate_base64_decoded_length(input.bytes())); 21 }; 22 23 decode_equal(""sv, ""sv); 24 decode_equal("Zg=="sv, "f"sv); 25 decode_equal("Zm8="sv, "fo"sv); 26 decode_equal("Zm9v"sv, "foo"sv); 27 decode_equal("Zm9vYg=="sv, "foob"sv); 28 decode_equal("Zm9vYmE="sv, "fooba"sv); 29 decode_equal("Zm9vYmFy"sv, "foobar"sv); 30 decode_equal("Z m\r9\n v\v Ym\tFy"sv, "foobar"sv); 31 EXPECT_EQ(decode_base64(" ZD Qg\r\nPS An Zm91cic\r\n 7"sv).value(), decode_base64("ZDQgPSAnZm91cic7"sv).value()); 32} 33 34TEST_CASE(test_decode_invalid) 35{ 36 EXPECT(decode_base64(("asdf\xffqwe"sv)).is_error()); 37 EXPECT(decode_base64(("asdf\x80qwe"sv)).is_error()); 38 EXPECT(decode_base64(("asdf:qwe"sv)).is_error()); 39 EXPECT(decode_base64(("asdf=qwe"sv)).is_error()); 40} 41 42TEST_CASE(test_encode) 43{ 44 auto encode_equal = [&](StringView input, StringView expected) { 45 auto encoded = MUST(encode_base64(input.bytes())); 46 EXPECT(encoded == expected); 47 EXPECT_EQ(expected.length(), calculate_base64_encoded_length(input.bytes())); 48 }; 49 50 encode_equal(""sv, ""sv); 51 encode_equal("f"sv, "Zg=="sv); 52 encode_equal("fo"sv, "Zm8="sv); 53 encode_equal("foo"sv, "Zm9v"sv); 54 encode_equal("foob"sv, "Zm9vYg=="sv); 55 encode_equal("fooba"sv, "Zm9vYmE="sv); 56 encode_equal("foobar"sv, "Zm9vYmFy"sv); 57}