blob: 550823fcc589116437e6587e3186784d44d958cd [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/platform/graphics/decoding_image_generator.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/renderer/platform/image-decoders/image_decoder_test_helpers.h"
#include "third_party/blink/renderer/platform/image-decoders/segment_reader.h"
namespace blink {
namespace {
constexpr unsigned kTooShortForSignature = 5;
scoped_refptr<SegmentReader> CreateSegmentReader(char* reference_data,
size_t data_length) {
PrepareReferenceData(reference_data, data_length);
scoped_refptr<SharedBuffer> data = SharedBuffer::Create();
data->Append(reference_data, data_length);
return SegmentReader::CreateFromSharedBuffer(std::move(data));
}
} // namespace
class DecodingImageGeneratorTest : public testing::Test {};
TEST_F(DecodingImageGeneratorTest, Create) {
scoped_refptr<SharedBuffer> reference_data =
ReadFile(kDecodersTestingDir, "radient.gif");
scoped_refptr<SegmentReader> reader =
SegmentReader::CreateFromSharedBuffer(std::move(reference_data));
std::unique_ptr<SkImageGenerator> generator =
DecodingImageGenerator::CreateAsSkImageGenerator(reader->GetAsSkData());
// Sanity-check the image to make sure it was loaded.
EXPECT_EQ(generator->getInfo().width(), 32);
EXPECT_EQ(generator->getInfo().height(), 32);
}
TEST_F(DecodingImageGeneratorTest, CreateWithNoSize) {
// Construct dummy image data that produces no valid size from the
// ImageDecoder.
char reference_data[kDefaultTestSize];
EXPECT_EQ(nullptr, DecodingImageGenerator::CreateAsSkImageGenerator(
CreateSegmentReader(reference_data, kDefaultTestSize)
->GetAsSkData()));
}
TEST_F(DecodingImageGeneratorTest, CreateWithNullImageDecoder) {
// Construct dummy image data that will produce a null image decoder
// due to data being too short for a signature.
char reference_data[kTooShortForSignature];
EXPECT_EQ(nullptr,
DecodingImageGenerator::CreateAsSkImageGenerator(
CreateSegmentReader(reference_data, kTooShortForSignature)
->GetAsSkData()));
}
// TODO(wkorman): Test Create with a null ImageFrameGenerator. We'd
// need a way to intercept construction of the instance (and could do
// same for ImageDecoder above to reduce fragility of knowing a short
// signature will produce a null ImageDecoder). Note that it's not
// clear that it's possible to end up with a null ImageFrameGenerator,
// so maybe we can just remove that check from
// DecodingImageGenerator::Create.
} // namespace blink