mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-05 04:18:05 -05:00
* Removed some legacy files that were compiled, but not used anywhere. * Cleaned-up ImageManager and FontManager implementations, trying to use RAII wherever possible. * Fixed minor bugs in Font.cpp implementation. * Removed unused includes. * Other minor cleanups and refactors.
145 lines
5.7 KiB
C++
145 lines
5.7 KiB
C++
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
// Right now there are no asserts here, each test/section / test should have asserts
|
|
// these tests check memory sanity only
|
|
|
|
#include <catch2/catch.hpp>
|
|
#include <module-gui/gui/core/Context.hpp>
|
|
#include <log/log.hpp>
|
|
#include "ImageManager.hpp"
|
|
#include "DrawCommand.hpp"
|
|
#include <sstream>
|
|
#include <memory>
|
|
|
|
TEST_CASE("test context size and position")
|
|
{
|
|
auto ctx = gui::Context(30, 30);
|
|
ctx.fill(0);
|
|
|
|
gui::Context test = ctx.get(17, 17, 30, 30);
|
|
|
|
test = ctx.get(-17, -17, 30, 30);
|
|
}
|
|
|
|
TEST_CASE("insertContextTest")
|
|
{
|
|
|
|
gui::Context dstCtx;
|
|
gui::Context insCtx;
|
|
|
|
SECTION("RECTANGLE INSIDE")
|
|
{
|
|
dstCtx = gui::Context(30, 30);
|
|
dstCtx.fill(0);
|
|
insCtx = gui::Context(28, 28);
|
|
insCtx.fill(15);
|
|
dstCtx.insert(1, 1, insCtx);
|
|
}
|
|
|
|
SECTION("2 COLUMNS ON RIGHT SIDE, TOP AND BOTTOM ROW UNTOUCHED")
|
|
{
|
|
dstCtx = gui::Context(30, 30);
|
|
dstCtx.fill(0);
|
|
insCtx = gui::Context(28, 28);
|
|
insCtx.fill(15);
|
|
dstCtx.insert(28, 1, insCtx);
|
|
}
|
|
|
|
SECTION("2 COLUMNS ON LEFT SIDE, TOP AND BOTTOM ROW UNTOUCHED")
|
|
{
|
|
dstCtx = gui::Context(30, 30);
|
|
dstCtx.fill(0);
|
|
insCtx = gui::Context(28, 28);
|
|
insCtx.fill(15);
|
|
dstCtx.insert(-26, 1, insCtx);
|
|
}
|
|
|
|
SECTION("2 COLUMNS ON RIGHT SIDE")
|
|
{
|
|
dstCtx = gui::Context(30, 30);
|
|
dstCtx.fill(0);
|
|
insCtx = gui::Context(32, 32);
|
|
insCtx.fill(15);
|
|
dstCtx.insert(28, -1, insCtx);
|
|
}
|
|
|
|
SECTION("2 COLUMNS ON LEFT SIDE")
|
|
{
|
|
dstCtx = gui::Context(30, 30);
|
|
dstCtx.fill(0);
|
|
insCtx = gui::Context(32, 32);
|
|
insCtx.fill(15);
|
|
dstCtx.insert(-30, -1, insCtx);
|
|
}
|
|
}
|
|
|
|
TEST_CASE("Draw vector image test")
|
|
{
|
|
|
|
constexpr std::string_view properContextDump = "ffffffffffffffffffffffffffffffff\n"
|
|
"ffffffffffffffffffffffffffffffff\n"
|
|
"ffffffffffffffffffffffffffffffff\n"
|
|
"ffffffffffffffffffffffffffffffff\n"
|
|
"fffffffffffffff00fffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"fffff0000000000000000000000fffff\n"
|
|
"ffff000000000000000000000000ffff\n"
|
|
"ffff000000000000000000000000ffff\n"
|
|
"fffff0000000000000000000000fffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"ffffffffffffff0000ffffffffffffff\n"
|
|
"fffffffffffffff00fffffffffffffff\n"
|
|
"ffffffffffffffffffffffffffffffff\n"
|
|
"ffffffffffffffffffffffffffffffff\n"
|
|
"ffffffffffffffffffffffffffffffff\n"
|
|
"ffffffffffffffffffffffffffffffff\n";
|
|
|
|
auto context = gui::Context(32, 32);
|
|
|
|
gui::ImageManager::getInstance().init(".");
|
|
auto id = gui::ImageManager::getInstance().getImageMapID("plus_32px_W_M");
|
|
gui::ImageMap *imageMap = gui::ImageManager::getInstance().getImageMap(id);
|
|
CAPTURE(id);
|
|
|
|
REQUIRE(imageMap != nullptr);
|
|
REQUIRE(imageMap->getType() == gui::ImageMap::Type::Vecmap);
|
|
|
|
auto drawCommand = gui::DrawImage();
|
|
drawCommand.imageID = id;
|
|
drawCommand.areaH = 32;
|
|
drawCommand.areaW = 32;
|
|
drawCommand.draw(&context);
|
|
std::string dump;
|
|
|
|
std::uint32_t offset = 0;
|
|
for (std::uint32_t y = 0; y < context.getH(); y++) {
|
|
for (std::uint32_t x = 0; x < context.getW(); x++) {
|
|
std::uint32_t value = *(context.getData() + offset);
|
|
std::stringstream stream;
|
|
stream << std::hex << value;
|
|
dump.append(stream.str());
|
|
offset++;
|
|
}
|
|
dump.append("\n");
|
|
}
|
|
CAPTURE(dump);
|
|
REQUIRE(dump.length() == properContextDump.length());
|
|
REQUIRE(dump == properContextDump);
|
|
}
|