aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit/pixelformat.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/pixelformat.cxx')
-rw-r--r--tests/unit/pixelformat.cxx279
1 files changed, 169 insertions, 110 deletions
diff --git a/tests/unit/pixelformat.cxx b/tests/unit/pixelformat.cxx
index 54e68ccf..57d23cdf 100644
--- a/tests/unit/pixelformat.cxx
+++ b/tests/unit/pixelformat.cxx
@@ -1,4 +1,4 @@
-/* Copyright 2019 Pierre Ossman <ossman@cendio.se> for Cendio AB
+/* Copyright 2019-2025 Pierre Ossman <ossman@cendio.se> for Cendio AB
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,174 +20,233 @@
#include <config.h>
#endif
-#include <stdio.h>
-
+#include <list>
#include <stdexcept>
+#include <gtest/gtest.h>
+
#include <rfb/PixelFormat.h>
-static void doTest(bool should_fail, int b, int d, bool e, bool t,
- int rm, int gm, int bm, int rs, int gs, int bs)
+struct Params {
+ int b;
+ int d;
+ bool e;
+ bool t;
+ int rm;
+ int gm;
+ int bm;
+ int rs;
+ int gs;
+ int bs;
+};
+
+static std::ostream& operator<<(std::ostream& os, const Params& p)
{
- rfb::PixelFormat* pf;
-
- printf("PixelFormat(%d, %d, %s, %s, %d, %d, %d, %d, %d, %d): ",
- b, d, e ? "true" : "false", t ? "true": "false",
- rm, gm, bm, rs, gs, bs);
-
- try {
- pf = new rfb::PixelFormat(b, d, e, t, rm, gm, bm, rs, gs, bs);
- } catch(std::exception&) {
- if (should_fail)
- printf("OK");
- else
- printf("FAILED");
- printf("\n");
- fflush(stdout);
- return;
- }
-
- delete pf;
-
- if (should_fail)
- printf("FAILED");
- else
- printf("OK");
- printf("\n");
- fflush(stdout);
+ return os << p.b << ", " << p.d << ", " <<
+ (p.e ? "true" : "false") << " " <<
+ (p.t ? "true" : "false") << ", " <<
+ p.rm << ", " << p.gm << ", " << p.bm << ", "
+ << p.rs << ", " << p.gs << ", " << p.bs;
}
-static void do888Test(bool expected, int b, int d, bool e, bool t,
- int rm, int gm, int bm, int rs, int gs, int bs)
+typedef testing::TestWithParam<Params> PixelFormatValid;
+
+TEST_P(PixelFormatValid, constructor)
{
- rfb::PixelFormat* pf;
+ Params params;
+ rfb::PixelFormat* pf;
+
+ params = GetParam();
+ pf = nullptr;
+
+ EXPECT_NO_THROW({
+ pf = new rfb::PixelFormat(params.b, params.d, params.e, params.t,
+ params.rm, params.gm, params.bm,
+ params.rs, params.gs, params.bs);
+ });
- printf("PixelFormat(%d, %d, %s, %s, %d, %d, %d, %d, %d, %d): ",
- b, d, e ? "true" : "false", t ? "true": "false",
- rm, gm, bm, rs, gs, bs);
+ delete pf;
+}
+
+typedef testing::TestWithParam<Params> PixelFormatInvalid;
+
+TEST_P(PixelFormatInvalid, constructor)
+{
+ Params params;
+ rfb::PixelFormat* pf;
- pf = new rfb::PixelFormat(b, d, e, t, rm, gm, bm, rs, gs, bs);
+ params = GetParam();
+ pf = nullptr;
- if (pf->is888() == expected)
- printf("OK");
- else
- printf("FAILED");
- printf("\n");
- fflush(stdout);
+ EXPECT_THROW({
+ pf = new rfb::PixelFormat(params.b, params.d, params.e, params.t,
+ params.rm, params.gm, params.bm,
+ params.rs, params.gs, params.bs);
+ }, std::invalid_argument);
- delete pf;
+ delete pf;
}
-static void sanityTests()
+typedef testing::TestWithParam<Params> PixelFormatIs888;
+
+TEST_P(PixelFormatIs888, constructor)
{
- printf("Sanity checks:\n\n");
+ Params params;
+ rfb::PixelFormat* pf;
+
+ params = GetParam();
+ pf = new rfb::PixelFormat(params.b, params.d, params.e, params.t,
+ params.rm, params.gm, params.bm,
+ params.rs, params.gs, params.bs);
+ EXPECT_TRUE(pf->is888());
- /* Normal true color formats */
+ delete pf;
+}
- doTest(false, 32, 24, false, true, 255, 255, 255, 0, 8, 16);
- doTest(false, 32, 24, false, true, 255, 255, 255, 24, 16, 8);
+typedef testing::TestWithParam<Params> PixelFormatNot888;
- doTest(false, 16, 16, false, true, 15, 31, 15, 0, 5, 11);
+TEST_P(PixelFormatNot888, constructor)
+{
+ Params params;
+ rfb::PixelFormat* pf;
- doTest(false, 8, 8, false, true, 3, 7, 3, 0, 2, 5);
+ params = GetParam();
+ pf = new rfb::PixelFormat(params.b, params.d, params.e, params.t,
+ params.rm, params.gm, params.bm,
+ params.rs, params.gs, params.bs);
+ EXPECT_FALSE(pf->is888());
- /* Excessive bpp */
+ delete pf;
+}
- doTest(false, 32, 16, false, true, 15, 31, 15, 0, 5, 11);
+static std::list<Params> validFormats()
+{
+ std::list<Params> params;
- doTest(false, 16, 16, false, true, 15, 31, 15, 0, 5, 11);
+ /* Normal true color formats */
- doTest(false, 32, 8, false, true, 3, 7, 3, 0, 2, 5);
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 0, 8, 16});
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 24, 16, 8});
- doTest(false, 16, 8, false, true, 3, 7, 3, 0, 2, 5);
+ params.push_back(Params{16, 16, false, true, 15, 31, 15, 0, 5, 11});
- /* Colour map */
+ params.push_back(Params{8, 8, false, true, 3, 7, 3, 0, 2, 5});
- doTest(false, 8, 8, false, false, 0, 0, 0, 0, 0, 0);
+ /* Excessive bpp */
- /* Invalid bpp */
+ params.push_back(Params{32, 16, false, true, 15, 31, 15, 0, 5, 11});
- doTest(true, 64, 24, false, true, 255, 255, 255, 0, 8, 16);
+ params.push_back(Params{16, 16, false, true, 15, 31, 15, 0, 5, 11});
- doTest(true, 18, 16, false, true, 15, 31, 15, 0, 5, 11);
+ params.push_back(Params{32, 8, false, true, 3, 7, 3, 0, 2, 5});
- doTest(true, 3, 3, false, true, 1, 1, 1, 0, 1, 2);
+ params.push_back(Params{16, 8, false, true, 3, 7, 3, 0, 2, 5});
- /* Invalid depth */
+ /* Colour map */
- doTest(true, 16, 24, false, true, 15, 31, 15, 0, 5, 11);
+ params.push_back(Params{8, 8, false, false, 0, 0, 0, 0, 0, 0});
- doTest(true, 8, 24, false, true, 3, 7, 3, 0, 2, 5);
- doTest(true, 8, 16, false, true, 3, 7, 3, 0, 2, 5);
+ return params;
+}
- doTest(true, 32, 24, false, false, 0, 0, 0, 0, 0, 0);
+INSTANTIATE_TEST_SUITE_P(, PixelFormatValid, testing::ValuesIn(validFormats()));
- /* Invalid max values */
+static std::list<Params> invalidFormats()
+{
+ std::list<Params> params;
- doTest(true, 32, 24, false, true, 254, 255, 255, 0, 8, 16);
- doTest(true, 32, 24, false, true, 255, 253, 255, 0, 8, 16);
- doTest(true, 32, 24, false, true, 255, 255, 252, 0, 8, 16);
+ params.push_back(Params{64, 24, false, true, 255, 255, 255, 0, 8, 16});
- doTest(true, 32, 24, false, true, 511, 127, 127, 0, 16, 20);
- doTest(true, 32, 24, false, true, 127, 511, 127, 0, 4, 20);
- doTest(true, 32, 24, false, true, 127, 127, 511, 0, 4, 8);
+ params.push_back(Params{18, 16, false, true, 15, 31, 15, 0, 5, 11});
- /* Insufficient depth */
+ params.push_back(Params{3, 3, false, true, 1, 1, 1, 0, 1, 2});
- doTest(true, 32, 16, false, true, 255, 255, 255, 0, 8, 16);
+ /* Invalid depth */
- /* Invalid shift values */
+ params.push_back(Params{16, 24, false, true, 15, 31, 15, 0, 5, 11});
- doTest(true, 32, 24, false, true, 255, 255, 255, 25, 8, 16);
- doTest(true, 32, 24, false, true, 255, 255, 255, 0, 25, 16);
- doTest(true, 32, 24, false, true, 255, 255, 255, 0, 8, 25);
+ params.push_back(Params{8, 24, false, true, 3, 7, 3, 0, 2, 5});
+ params.push_back(Params{8, 16, false, true, 3, 7, 3, 0, 2, 5});
- /* Overlapping channels */
+ params.push_back(Params{32, 24, false, false, 0, 0, 0, 0, 0, 0});
- doTest(true, 32, 24, false, true, 255, 255, 255, 0, 7, 16);
- doTest(true, 32, 24, false, true, 255, 255, 255, 0, 8, 15);
- doTest(true, 32, 24, false, true, 255, 255, 255, 0, 16, 7);
+ /* Invalid max values */
- printf("\n");
+ params.push_back(Params{32, 24, false, true, 254, 255, 255, 0, 8, 16});
+ params.push_back(Params{32, 24, false, true, 255, 253, 255, 0, 8, 16});
+ params.push_back(Params{32, 24, false, true, 255, 255, 252, 0, 8, 16});
+
+ params.push_back(Params{32, 24, false, true, 511, 127, 127, 0, 16, 20});
+ params.push_back(Params{32, 24, false, true, 127, 511, 127, 0, 4, 20});
+ params.push_back(Params{32, 24, false, true, 127, 127, 511, 0, 4, 8});
+
+ /* Insufficient depth */
+
+ params.push_back(Params{32, 16, false, true, 255, 255, 255, 0, 8, 16});
+
+ /* Invalid shift values */
+
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 25, 8, 16});
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 0, 25, 16});
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 0, 8, 25});
+
+ /* Overlapping channels */
+
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 0, 7, 16});
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 0, 8, 15});
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 0, 16, 7});
+
+ return params;
}
-void is888Tests()
+INSTANTIATE_TEST_SUITE_P(, PixelFormatInvalid, testing::ValuesIn(invalidFormats()));
+
+static std::list<Params> is888Formats()
{
- printf("Simple format detection:\n\n");
+ std::list<Params> params;
+
+ /* Positive cases */
+
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 0, 8, 16});
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 24, 16, 8});
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 24, 8, 0});
+
+ return params;
+}
- /* Positive cases */
+INSTANTIATE_TEST_SUITE_P(, PixelFormatIs888, testing::ValuesIn(is888Formats()));
- do888Test(true, 32, 24, false, true, 255, 255, 255, 0, 8, 16);
- do888Test(true, 32, 24, false, true, 255, 255, 255, 24, 16, 8);
- do888Test(true, 32, 24, false, true, 255, 255, 255, 24, 8, 0);
+static std::list<Params> not888Formats()
+{
+ std::list<Params> params;
- /* Low depth */
+ /* Low depth */
- do888Test(false, 32, 16, false, true, 15, 31, 15, 0, 8, 16);
- do888Test(false, 32, 8, false, true, 3, 7, 3, 0, 8, 16);
+ params.push_back(Params{32, 16, false, true, 15, 31, 15, 0, 8, 16});
+ params.push_back(Params{32, 8, false, true, 3, 7, 3, 0, 8, 16});
- /* Low bpp and depth */
+ /* Low bpp and depth */
- do888Test(false, 16, 16, false, true, 15, 31, 15, 0, 5, 11);
- do888Test(false, 8, 8, false, true, 3, 7, 3, 0, 2, 5);
+ params.push_back(Params{16, 16, false, true, 15, 31, 15, 0, 5, 11});
+ params.push_back(Params{8, 8, false, true, 3, 7, 3, 0, 2, 5});
- /* Colour map */
+ /* Colour map */
- do888Test(false, 8, 8, false, false, 0, 0, 0, 0, 0, 0);
+ params.push_back(Params{8, 8, false, false, 0, 0, 0, 0, 0, 0});
- /* Odd shifts */
+ /* Odd shifts */
- do888Test(false, 32, 24, false, true, 255, 255, 255, 0, 8, 18);
- do888Test(false, 32, 24, false, true, 255, 255, 255, 0, 11, 24);
- do888Test(false, 32, 24, false, true, 255, 255, 255, 4, 16, 24);
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 0, 8, 18});
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 0, 11, 24});
+ params.push_back(Params{32, 24, false, true, 255, 255, 255, 4, 16, 24});
- printf("\n");
+ return params;
}
-int main(int /*argc*/, char** /*argv*/)
-{
- sanityTests();
- is888Tests();
+INSTANTIATE_TEST_SUITE_P(, PixelFormatNot888, testing::ValuesIn(not888Formats()));
- return 0;
+int main(int argc, char** argv)
+{
+ testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
}