diff options
| author | Ioannis Tzavaras <tzavaras.jannis@gmail.com> | 2026-03-31 18:37:23 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-31 16:37:23 +0100 |
| commit | 1fdba8a8da348e60e9e3dbf1cd337d71d86838d6 (patch) | |
| tree | 4762dacbf59ae5518dd68018d4f4fc62b6339cd6 /tests | |
| parent | 91916a2d94eee0b72eb8e7e033511bbf173879eb (diff) | |
tests: add unit tests for Format utilities (#13923)
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/helpers/Format.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/tests/helpers/Format.cpp b/tests/helpers/Format.cpp new file mode 100644 index 00000000..5c945f7d --- /dev/null +++ b/tests/helpers/Format.cpp @@ -0,0 +1,77 @@ +#include <helpers/Format.hpp> + +#include <gtest/gtest.h> + +#include <drm_fourcc.h> +#include <wayland-server-protocol.h> + +using namespace NFormatUtils; + +TEST(Helpers, formatDrmToShm) { + EXPECT_EQ(drmToShm(DRM_FORMAT_XRGB8888), WL_SHM_FORMAT_XRGB8888); + EXPECT_EQ(drmToShm(DRM_FORMAT_ARGB8888), WL_SHM_FORMAT_ARGB8888); +} + +TEST(Helpers, formatShmToDrm) { + EXPECT_EQ(shmToDRM(WL_SHM_FORMAT_XRGB8888), DRM_FORMAT_XRGB8888); + EXPECT_EQ(shmToDRM(WL_SHM_FORMAT_ARGB8888), DRM_FORMAT_ARGB8888); +} + +TEST(Helpers, formatDrmShmRoundTrip) { + EXPECT_EQ(shmToDRM(drmToShm(DRM_FORMAT_XRGB8888)), DRM_FORMAT_XRGB8888); + EXPECT_EQ(shmToDRM(drmToShm(DRM_FORMAT_ARGB8888)), DRM_FORMAT_ARGB8888); +} + +TEST(Helpers, formatIsFormatYUV) { + EXPECT_TRUE(isFormatYUV(DRM_FORMAT_YUYV)); + EXPECT_TRUE(isFormatYUV(DRM_FORMAT_NV12)); + EXPECT_TRUE(isFormatYUV(DRM_FORMAT_NV21)); + EXPECT_FALSE(isFormatYUV(DRM_FORMAT_XRGB8888)); + EXPECT_FALSE(isFormatYUV(DRM_FORMAT_ARGB8888)); +} + +TEST(Helpers, formatGetPixelFormatFromDRM) { + const auto* xrgb = getPixelFormatFromDRM(DRM_FORMAT_XRGB8888); + ASSERT_NE(xrgb, nullptr); + EXPECT_EQ(xrgb->drmFormat, DRM_FORMAT_XRGB8888); + EXPECT_FALSE(xrgb->withAlpha); + + const auto* argb = getPixelFormatFromDRM(DRM_FORMAT_ARGB8888); + ASSERT_NE(argb, nullptr); + EXPECT_EQ(argb->drmFormat, DRM_FORMAT_ARGB8888); + EXPECT_TRUE(argb->withAlpha); + + EXPECT_EQ(getPixelFormatFromDRM(0), nullptr); +} + +TEST(Helpers, formatIsFormatOpaque) { + EXPECT_TRUE(isFormatOpaque(DRM_FORMAT_XRGB8888)); + EXPECT_FALSE(isFormatOpaque(DRM_FORMAT_ARGB8888)); +} + +TEST(Helpers, formatPixelsPerBlock) { + const auto* fmt = getPixelFormatFromDRM(DRM_FORMAT_XRGB8888); + ASSERT_NE(fmt, nullptr); + EXPECT_GT(pixelsPerBlock(fmt), 0); +} + +TEST(Helpers, formatMinStride) { + const auto* fmt = getPixelFormatFromDRM(DRM_FORMAT_XRGB8888); + ASSERT_NE(fmt, nullptr); + // XRGB8888 = 4 bytes per pixel, 1920 wide = 7680 bytes stride + EXPECT_EQ(minStride(fmt, 1920), 1920 * 4); + EXPECT_EQ(minStride(fmt, 0), 0); +} + +TEST(Helpers, formatDrmFormatName) { + EXPECT_FALSE(drmFormatName(DRM_FORMAT_XRGB8888).empty()); + EXPECT_FALSE(drmFormatName(DRM_FORMAT_ARGB8888).empty()); + EXPECT_EQ(drmFormatName(0), "INVALID"); +} + +TEST(Helpers, formatAlphaFormat) { + EXPECT_EQ(alphaFormat(DRM_FORMAT_XRGB8888), DRM_FORMAT_ARGB8888); + EXPECT_EQ(alphaFormat(DRM_FORMAT_XBGR8888), DRM_FORMAT_ABGR8888); + // Format without alpha stripped entry returns DRM_FORMAT_INVALID (0) + EXPECT_EQ(alphaFormat(DRM_FORMAT_ARGB8888), 0u); +} |
