skia2/tests/SkBase64Test.cpp
Ben Wagner b06ebee1e8 Make SkBase64 interface less unpleasant.
Change SkBase64::decode interface completely and better document
how to use. Unfortunately there are users of ::decode (and they are
leaking) so will need to keep the old interface until users can be
updated.

Change-Id: I214b771136d78fef758c5d0d9ec302f956f6e4f0
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/351201
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
2021-01-08 20:28:19 +00:00

52 lines
1.5 KiB
C++

/*
* Copyright 2014 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "include/private/SkTo.h"
#include "include/utils/SkBase64.h"
#include "tests/Test.h"
DEF_TEST(SkBase64, reporter) {
char all[256];
for (int index = 0; index < 255; ++index) {
all[index] = (signed char) (index + 1);
}
all[255] = 0;
for (int offset = 0; offset < 6; ++offset) {
size_t length = 256 - offset;
// Encode
size_t encodeLength = SkBase64::Encode(all + offset, length, nullptr);
SkAutoTMalloc<char> src(encodeLength + 1);
SkBase64::Encode(all + offset, length, src.get());
src[SkToInt(encodeLength)] = '\0';
// Decode
SkBase64::Error err;
size_t decodeLength;
err = SkBase64::Decode(src.get(), encodeLength, nullptr, &decodeLength);
if (err != SkBase64::kNoError) {
REPORT_FAILURE(reporter, "err", SkString("SkBase64::Decode failed!"));
continue;
}
REPORTER_ASSERT(reporter, decodeLength == length);
SkAutoTMalloc<char> dst(decodeLength);
err = SkBase64::Decode(src.get(), encodeLength, dst, &decodeLength);
if (err != SkBase64::kNoError) {
REPORT_FAILURE(reporter, "err", SkString("SkBase64::Decode failed!"));
continue;
}
REPORTER_ASSERT(reporter, decodeLength == length);
REPORTER_ASSERT(reporter, (strcmp((const char*) (all + offset), dst.get()) == 0));
}
}