blob: fc70377850f56eef7d38930c797c270ceaa6451d [file] [log] [blame]
// Copyright 2024 The Fuchsia 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 "src/graphics/display/lib/api-types-cpp/image-metadata.h"
#include <fidl/fuchsia.hardware.display.types/cpp/wire.h>
#include <fuchsia/hardware/display/controller/c/banjo.h>
#include <gtest/gtest.h>
#include "src/graphics/display/lib/api-types-cpp/image-tiling-type.h"
namespace display {
namespace {
constexpr ImageMetadata kSmallDisplay({
.width = 800,
.height = 600,
.tiling_type = kImageTilingTypeLinear,
});
constexpr ImageMetadata kSmallDisplay2({
.width = 800,
.height = 600,
.tiling_type = kImageTilingTypeLinear,
});
constexpr ImageMetadata kSmallCaptured({
.width = 800,
.height = 600,
.tiling_type = kImageTilingTypeCapture,
});
TEST(ImageMetadataTest, EqualityIsReflexive) {
EXPECT_EQ(kSmallDisplay, kSmallDisplay);
EXPECT_EQ(kSmallDisplay2, kSmallDisplay2);
EXPECT_EQ(kSmallCaptured, kSmallCaptured);
}
TEST(ImageMetadataTest, EqualityIsSymmetric) {
EXPECT_EQ(kSmallDisplay, kSmallDisplay2);
EXPECT_EQ(kSmallDisplay2, kSmallDisplay);
}
TEST(ImageMetadataTest, EqualityForDifferentWidths) {
static constexpr ImageMetadata kSmallSquareDisplay({
.width = 600,
.height = 600,
.tiling_type = kImageTilingTypeLinear,
});
EXPECT_NE(kSmallDisplay, kSmallSquareDisplay);
EXPECT_NE(kSmallSquareDisplay, kSmallDisplay);
}
TEST(ImageMetadataTest, EqualityForDifferentHeights) {
static constexpr ImageMetadata kLargeSquareDisplay({
.width = 800,
.height = 800,
.tiling_type = kImageTilingTypeLinear,
});
EXPECT_NE(kSmallDisplay, kLargeSquareDisplay);
EXPECT_NE(kLargeSquareDisplay, kSmallDisplay);
}
TEST(ImageMetadataTest, EqualityForDifferentTilingTypes) {
EXPECT_NE(kSmallDisplay, kSmallCaptured);
EXPECT_NE(kSmallCaptured, kSmallDisplay);
}
TEST(ImageMetadataTest, FromDesignatedInitializer) {
static constexpr ImageMetadata image_metadata({
.width = 640,
.height = 480,
.tiling_type = kImageTilingTypeCapture,
});
EXPECT_EQ(640, image_metadata.width());
EXPECT_EQ(480, image_metadata.height());
EXPECT_EQ(kImageTilingTypeCapture, image_metadata.tiling_type());
}
TEST(ImageMetadataTest, FromFidlImageMetadata) {
static constexpr fuchsia_hardware_display_types::wire::ImageMetadata fidl_image_metadata = {
.width = 640,
.height = 480,
.tiling_type = fuchsia_hardware_display_types::wire::kImageTilingTypeCapture,
};
static constexpr ImageMetadata image_metadata(fidl_image_metadata);
EXPECT_EQ(640, image_metadata.width());
EXPECT_EQ(480, image_metadata.height());
EXPECT_EQ(kImageTilingTypeCapture, image_metadata.tiling_type());
}
TEST(ImageMetadataTest, FromBanjoImageMetadata) {
static constexpr image_metadata_t banjo_image_metadata = {
.width = 640,
.height = 480,
.tiling_type = IMAGE_TILING_TYPE_CAPTURE,
};
static constexpr ImageMetadata image_metadata(banjo_image_metadata);
EXPECT_EQ(640, image_metadata.width());
EXPECT_EQ(480, image_metadata.height());
EXPECT_EQ(kImageTilingTypeCapture, image_metadata.tiling_type());
}
TEST(ImageMetadataTest, ToFidlImageMetadata) {
static constexpr ImageMetadata image_metadata({
.width = 640,
.height = 480,
.tiling_type = kImageTilingTypeCapture,
});
static constexpr fuchsia_hardware_display_types::wire::ImageMetadata fidl_image_metadata =
image_metadata.ToFidl();
EXPECT_EQ(640u, fidl_image_metadata.width);
EXPECT_EQ(480u, fidl_image_metadata.height);
EXPECT_EQ(fuchsia_hardware_display_types::wire::kImageTilingTypeCapture,
fidl_image_metadata.tiling_type);
}
TEST(ImageMetadataTest, ToBanjoImageMetadata) {
static constexpr ImageMetadata image_metadata({
.width = 640,
.height = 480,
.tiling_type = kImageTilingTypeCapture,
});
static constexpr image_metadata_t banjo_image_metadata = image_metadata.ToBanjo();
EXPECT_EQ(640u, banjo_image_metadata.width);
EXPECT_EQ(480u, banjo_image_metadata.height);
EXPECT_EQ(IMAGE_TILING_TYPE_CAPTURE, banjo_image_metadata.tiling_type);
}
TEST(ImageMetadataTest, IsValidFidlSmallDisplay) {
EXPECT_TRUE(ImageMetadata::IsValid(fuchsia_hardware_display_types::wire::ImageMetadata{
.width = 640,
.height = 480,
.tiling_type = fuchsia_hardware_display_types::wire::kImageTilingTypeCapture,
}));
}
TEST(ImageMetadataTest, IsValidFidlLargeWidth) {
EXPECT_FALSE(ImageMetadata::IsValid(fuchsia_hardware_display_types::wire::ImageMetadata{
.width = 1'000'000,
.height = 480,
.tiling_type = fuchsia_hardware_display_types::wire::kImageTilingTypeCapture,
}));
}
TEST(ImageMetadataTest, IsValidFidlLargeHeight) {
EXPECT_FALSE(ImageMetadata::IsValid(fuchsia_hardware_display_types::wire::ImageMetadata{
.width = 640,
.height = 1'000'000,
.tiling_type = fuchsia_hardware_display_types::wire::kImageTilingTypeCapture,
}));
}
TEST(ImageMetadataTest, IsValidBanjoSmallDisplay) {
EXPECT_TRUE(ImageMetadata::IsValid(image_metadata_t{
.width = 640,
.height = 480,
.tiling_type = IMAGE_TILING_TYPE_CAPTURE,
}));
}
TEST(ImageMetadataTest, IsValidBanjoLargeWidth) {
EXPECT_FALSE(ImageMetadata::IsValid(image_metadata_t{
.width = 1'000'000,
.height = 480,
.tiling_type = IMAGE_TILING_TYPE_CAPTURE,
}));
}
TEST(ImageMetadataTest, IsValidBanjoLargeHeight) {
EXPECT_FALSE(ImageMetadata::IsValid(image_metadata_t{
.width = 640,
.height = 1'000'000,
.tiling_type = IMAGE_TILING_TYPE_CAPTURE,
}));
}
} // namespace
} // namespace display