blob: 1dd217b8a2063e3d004b9ab94b6c8031d091e4f8 [file] [log] [blame]
/*
* 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/core/SkString.h"
#include "include/private/base/SkTemplates.h"
#include "include/private/base/SkTo.h"
#include "src/base/SkBase64.h"
#include "tests/Test.h"
#include <cstring>
using namespace skia_private;
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 predictedEncodeLength = SkBase64::EncodedSize(length);
size_t actualEncodeLength = SkBase64::Encode(all + offset, length, nullptr);
REPORTER_ASSERT(reporter, actualEncodeLength == predictedEncodeLength,
"input size %zu; output size %zu != %zu", length,
actualEncodeLength, predictedEncodeLength);
AutoTMalloc<char> src(actualEncodeLength + 1);
size_t n = SkBase64::Encode(all + offset, length, src.get());
REPORTER_ASSERT(reporter, n == predictedEncodeLength);
src[SkToInt(actualEncodeLength)] = '\0';
// Decode
SkBase64::Error err;
size_t decodeLength;
err = SkBase64::Decode(src.get(), actualEncodeLength, nullptr, &decodeLength);
if (err != SkBase64::kNoError) {
REPORT_FAILURE(reporter, "err", SkString("SkBase64::Decode failed!"));
continue;
}
REPORTER_ASSERT(reporter, decodeLength == length);
AutoTMalloc<char> dst(decodeLength);
err = SkBase64::Decode(src.get(), actualEncodeLength, 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));
}
}