diff options
Diffstat (limited to 'tests/unit/pixelformat.cxx')
-rw-r--r-- | tests/unit/pixelformat.cxx | 279 |
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(); } |