#include "skia/ext/codec_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/codec/SkCodec.h"
#include "third_party/skia/include/codec/SkPngRustDecoder.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkColor.h"
#include "third_party/skia/include/core/SkData.h"
#include "third_party/skia/include/core/SkImage.h"
#include "third_party/skia/include/core/SkStream.h"
namespace skia {
namespace {
TEST(SkiaCodecUtils, EncodeSkPixmapAsPngAsSkDataSmokeTest) {
SkBitmap bitmap;
bitmap.allocN32Pixels(10, 10);
bitmap.eraseColor(SK_ColorGREEN);
sk_sp<SkData> png = EncodePngAsSkData(bitmap.pixmap());
ASSERT_TRUE(png);
SkBitmap roundtrip;
{
SkCodec::Result result;
std::unique_ptr<SkCodec> codec = SkPngRustDecoder::Decode(
std::make_unique<SkMemoryStream>(std::move(png)), &result);
ASSERT_TRUE(codec);
ASSERT_EQ(result, SkCodec::kSuccess);
roundtrip.allocN32Pixels(10, 10);
ASSERT_EQ(SkCodec::kSuccess, codec->getPixels(roundtrip.pixmap()));
}
EXPECT_EQ(roundtrip.getColor(5, 5), SK_ColorGREEN);
}
TEST(SkiaCodecUtils, EncodeSkImageAsPngAsSkDataSmokeTest) {
SkBitmap bitmap;
bitmap.allocN32Pixels(10, 10);
bitmap.eraseColor(SK_ColorGREEN);
sk_sp<SkImage> image = SkImages::RasterFromBitmap(bitmap);
ASSERT_TRUE(image);
sk_sp<SkData> png = EncodePngAsSkData(nullptr, image.get());
ASSERT_TRUE(png);
SkBitmap roundtrip;
{
SkCodec::Result result;
std::unique_ptr<SkCodec> codec = SkPngRustDecoder::Decode(
std::make_unique<SkMemoryStream>(std::move(png)), &result);
ASSERT_TRUE(codec);
ASSERT_EQ(result, SkCodec::kSuccess);
roundtrip.allocN32Pixels(10, 10);
ASSERT_EQ(SkCodec::kSuccess, codec->getPixels(roundtrip.pixmap()));
}
EXPECT_EQ(roundtrip.getColor(5, 5), SK_ColorGREEN);
}
TEST(SkiaCodecUtils, EncodePngAsDataUriSmokeTest) {
SkBitmap bitmap;
bitmap.allocN32Pixels(10, 10);
bitmap.eraseColor(SK_ColorGREEN);
std::string uri = EncodePngAsDataUri(bitmap.pixmap());
EXPECT_THAT(uri, testing::StartsWith("data:image/png;"));
}
}
}