/* * 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 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 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 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)); } }