summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorIoannis Tzavaras <tzavaras.jannis@gmail.com>2026-03-31 18:37:23 +0300
committerGitHub <noreply@github.com>2026-03-31 16:37:23 +0100
commit1fdba8a8da348e60e9e3dbf1cd337d71d86838d6 (patch)
tree4762dacbf59ae5518dd68018d4f4fc62b6339cd6 /tests
parent91916a2d94eee0b72eb8e7e033511bbf173879eb (diff)
tests: add unit tests for Format utilities (#13923)
Diffstat (limited to 'tests')
-rw-r--r--tests/helpers/Format.cpp77
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);
+}