11454c27bSserge-sans-paille //===- llvm/unittest/Support/Base64Test.cpp - Base64 tests
21454c27bSserge-sans-paille //--------------------===//
31454c27bSserge-sans-paille //
41454c27bSserge-sans-paille // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
51454c27bSserge-sans-paille // See https://llvm.org/LICENSE.txt for license information.
61454c27bSserge-sans-paille // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
71454c27bSserge-sans-paille //
81454c27bSserge-sans-paille //===----------------------------------------------------------------------===//
91454c27bSserge-sans-paille //
101454c27bSserge-sans-paille // This file implements unit tests for the Base64 functions.
111454c27bSserge-sans-paille //
121454c27bSserge-sans-paille //===----------------------------------------------------------------------===//
131454c27bSserge-sans-paille
141454c27bSserge-sans-paille #include "llvm/Support/Base64.h"
151454c27bSserge-sans-paille #include "llvm/ADT/StringRef.h"
161454c27bSserge-sans-paille #include "gtest/gtest.h"
171454c27bSserge-sans-paille
181454c27bSserge-sans-paille using namespace llvm;
191454c27bSserge-sans-paille
201454c27bSserge-sans-paille namespace {
211454c27bSserge-sans-paille /// Tests an arbitrary set of bytes passed as \p Input.
TestBase64(StringRef Input,StringRef Final)221454c27bSserge-sans-paille void TestBase64(StringRef Input, StringRef Final) {
231454c27bSserge-sans-paille auto Res = encodeBase64(Input);
241454c27bSserge-sans-paille EXPECT_EQ(Res, Final);
251454c27bSserge-sans-paille }
261454c27bSserge-sans-paille
271454c27bSserge-sans-paille } // namespace
281454c27bSserge-sans-paille
TEST(Base64Test,Base64)291454c27bSserge-sans-paille TEST(Base64Test, Base64) {
301454c27bSserge-sans-paille // from: https://tools.ietf.org/html/rfc4648#section-10
311454c27bSserge-sans-paille TestBase64("", "");
321454c27bSserge-sans-paille TestBase64("f", "Zg==");
331454c27bSserge-sans-paille TestBase64("fo", "Zm8=");
341454c27bSserge-sans-paille TestBase64("foo", "Zm9v");
351454c27bSserge-sans-paille TestBase64("foob", "Zm9vYg==");
361454c27bSserge-sans-paille TestBase64("fooba", "Zm9vYmE=");
371454c27bSserge-sans-paille TestBase64("foobar", "Zm9vYmFy");
381454c27bSserge-sans-paille
391454c27bSserge-sans-paille // With non-printable values.
40*f401dd6fSDouglas Yung char NonPrintableVector[] = {0x00, 0x00, 0x00, 0x46,
41*f401dd6fSDouglas Yung 0x00, 0x08, (char)0xff, (char)0xee};
421454c27bSserge-sans-paille TestBase64({NonPrintableVector, sizeof(NonPrintableVector)}, "AAAARgAI/+4=");
431454c27bSserge-sans-paille
441454c27bSserge-sans-paille // Large test case
45*f401dd6fSDouglas Yung char LargeVector[] = {0x54, 0x68, 0x65, 0x20, 0x71, 0x75, 0x69, 0x63, 0x6b,
46*f401dd6fSDouglas Yung 0x20, 0x62, 0x72, 0x6f, 0x77, 0x6e, 0x20, 0x66, 0x6f,
47*f401dd6fSDouglas Yung 0x78, 0x20, 0x6a, 0x75, 0x6d, 0x70, 0x73, 0x20, 0x6f,
48*f401dd6fSDouglas Yung 0x76, 0x65, 0x72, 0x20, 0x31, 0x33, 0x20, 0x6c, 0x61,
49*f401dd6fSDouglas Yung 0x7a, 0x79, 0x20, 0x64, 0x6f, 0x67, 0x73, 0x2e};
501454c27bSserge-sans-paille TestBase64({LargeVector, sizeof(LargeVector)},
511454c27bSserge-sans-paille "VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIDEzIGxhenkgZG9ncy4=");
521454c27bSserge-sans-paille }
53