blob: 01416459ab766a17a3f7a1384ed4bd9f5545e85f [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/headless/test/bitmap_utils.h"
#include <string_view>
#include "base/files/file.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/logging.h"
#include "base/path_service.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/codec/png_codec.h"
namespace headless {
namespace {
SkBitmap LoadTestImage(std::string_view file_name) {
base::FilePath path;
CHECK(base::PathService::Get(base::DIR_SRC_TEST_DATA_ROOT, &path));
path = path.AppendASCII("components")
.AppendASCII("test")
.AppendASCII("data")
.AppendASCII("headless")
.AppendASCII(file_name);
CHECK(base::PathExists(path)) << path;
std::optional<std::vector<uint8_t>> png_data = base::ReadFileToBytes(path);
CHECK(png_data) << path;
SkBitmap bitmap = gfx::PNGCodec::Decode(png_data.value());
CHECK(!bitmap.isNull()) << path;
return bitmap;
}
} // namespace
struct ColorRectTestData {
const char* file_name;
const bool expected_result;
};
constexpr ColorRectTestData kColorRectTestData[] = {
{"green_box.png", true},
{"green_box_anti_aliasing.png", true},
{"green_box_with_red.png", false},
};
class HeadlessBitmapUtilsColorRectTest
: public ::testing::Test,
public ::testing::WithParamInterface<ColorRectTestData> {
public:
const char* GetFileName() { return GetParam().file_name; }
bool GetExpectedResult() { return GetParam().expected_result; }
};
INSTANTIATE_TEST_SUITE_P(/* no prefix */,
HeadlessBitmapUtilsColorRectTest,
::testing::ValuesIn(kColorRectTestData));
TEST_P(HeadlessBitmapUtilsColorRectTest, Basic) {
SkBitmap bitmap = LoadTestImage(GetFileName());
// Expect a centered green rectangle on white background.
EXPECT_EQ(CheckColoredRect(bitmap, SkColorSetRGB(0x00, 0xff, 0x00),
SkColorSetRGB(0xff, 0xff, 0xff)),
GetExpectedResult());
}
} // namespace headless