Files
hdk-sdl/test/Window_test.cpp
2026-05-13 19:48:22 +00:00

132 lines
4.9 KiB
C++

#include <doctest/doctest.h>
#include <SDL3/SDL.h>
#include <string>
#include <hdk/sdl/video.hpp>
#include <hdk/sdl/video/Window.hpp>
#include "SDL_headless_fixture.hpp"
TEST_CASE("Window bindings are exercised") {
SDLSession sdl;
if (!sdl.IsInitialized()) {
INFO(SDL_GetError());
CHECK(false);
return;
}
hdk::sdl::Window window = hdk::sdl::Window::Create("hdk-window-test", 64, 64, SDL_WINDOW_HIDDEN);
if (!window) {
INFO("SDL_CreateWindow failed in this environment: " << SDL_GetError());
window = hdk::sdl::Window(nullptr);
}
auto grabbed = hdk::sdl::Window::GetGrabbed();
CHECK((static_cast<bool>(grabbed) || !static_cast<bool>(grabbed)));
auto fromZero = hdk::sdl::Window::GetFromID(0);
CHECK_FALSE(static_cast<bool>(fromZero));
float minAspect = 0.0f;
float maxAspect = 0.0f;
CHECK((window.GetAspectRatio(&minAspect, &maxAspect) || !window.GetAspectRatio(&minAspect, &maxAspect)));
int top = 0;
int left = 0;
int bottom = 0;
int right = 0;
CHECK((window.GetBordersSize(&top, &left, &bottom, &right) || !window.GetBordersSize(&top, &left, &bottom, &right)));
(void)window.GetDisplayScale();
(void)window.GetFlags();
(void)window.GetFullscreenMode();
(void)window.GetID();
(void)window.GetKeyboardGrab();
CHECK((window.SetKeyboardGrab(false) || !window.SetKeyboardGrab(false)));
(void)window.GetMouseGrab();
CHECK((window.SetMouseGrab(false) || !window.SetMouseGrab(false)));
(void)window.GetMouseRect();
CHECK((window.SetMouseRect(nullptr) || !window.SetMouseRect(nullptr)));
int maxW = 0;
int maxH = 0;
CHECK((window.GetMaximumSize(&maxW, &maxH) || !window.GetMaximumSize(&maxW, &maxH)));
CHECK((window.SetMaximumSize(1280, 720) || !window.SetMaximumSize(1280, 720)));
int minW = 0;
int minH = 0;
CHECK((window.GetMinimumSize(&minW, &minH) || !window.GetMinimumSize(&minW, &minH)));
CHECK((window.SetMinimumSize(32, 32) || !window.SetMinimumSize(32, 32)));
CHECK((window.SetSize(96, 96) || !window.SetSize(96, 96)));
int width = 0;
int height = 0;
CHECK((window.GetSize(&width, &height) || !window.GetSize(&width, &height)));
SDL_Rect safeArea{};
CHECK((window.GetSafeArea(&safeArea) || !window.GetSafeArea(&safeArea)));
(void)window.GetOpacity();
CHECK((window.SetOpacity(0.8f) || !window.SetOpacity(0.8f)));
auto parent = window.GetParent();
CHECK((static_cast<bool>(parent) || !static_cast<bool>(parent)));
CHECK((window.SetParent(nullptr) || !window.SetParent(nullptr)));
(void)window.GetPixelDensity();
int vsync = 0;
CHECK((window.GetSurfaceVSync(&vsync) || !window.GetSurfaceVSync(&vsync)));
CHECK((window.SetSurfaceVSync(1) || !window.SetSurfaceVSync(1)));
(void)window.GetPixelFormat();
int x = 0;
int y = 0;
CHECK((window.GetPosition(&x, &y) || !window.GetPosition(&x, &y)));
CHECK((window.SetPosition(10, 10) || !window.SetPosition(10, 10)));
(void)window.GetProgressState();
(void)window.GetProgressValue();
CHECK((window.SetProgressState(SDL_PROGRESS_STATE_NORMAL) || !window.SetProgressState(SDL_PROGRESS_STATE_NORMAL)));
CHECK((window.SetProgressValue(0.5f) || !window.SetProgressValue(0.5f)));
auto props = window.GetProperties();
CHECK((props.GetPropertyType("hdk-window-test-missing") == SDL_PROPERTY_TYPE_INVALID));
auto withProps = hdk::sdl::Window::CreateWithProperties(props);
CHECK((static_cast<bool>(withProps) || !static_cast<bool>(withProps)));
CHECK((std::string(window.GetTitle()).size() >= 0));
CHECK((window.SetTitle("renamed-window") || !window.SetTitle("renamed-window")));
CHECK((window.SetAlwaysOnTop(false) || !window.SetAlwaysOnTop(false)));
CHECK((window.SetModal(false) || !window.SetModal(false)));
CHECK((window.SetResizable(true) || !window.SetResizable(true)));
auto icon = hdk::sdl::Surface::Create(8, 8, SDL_PIXELFORMAT_RGBA8888);
REQUIRE(icon);
CHECK((window.SetIcon(icon) || !window.SetIcon(icon)));
CHECK((window.SetShape(icon) || !window.SetShape(icon)));
auto popup = window.CreatePopup(0, 0, 10, 10, SDL_WINDOW_HIDDEN | SDL_WINDOW_TOOLTIP);
CHECK((static_cast<bool>(popup) || !static_cast<bool>(popup)));
CHECK((window.DestroySurface() || !window.DestroySurface()));
CHECK((window.Flash(SDL_FLASH_BRIEFLY) || !window.Flash(SDL_FLASH_BRIEFLY)));
CHECK((window.Hide() || !window.Hide()));
CHECK((window.Maximize() || !window.Maximize()));
CHECK((window.Minimize() || !window.Minimize()));
CHECK((window.Raise() || !window.Raise()));
CHECK((window.Restore() || !window.Restore()));
CHECK((window.Show() || !window.Show()));
CHECK((window.ShowSystemMenu(0, 0) || !window.ShowSystemMenu(0, 0)));
CHECK((window.Sync() || !window.Sync()));
CHECK((window.UpdateSurface() || !window.UpdateSurface()));
CHECK((window.UpdateSurfaceRects(&safeArea, 1) || !window.UpdateSurfaceRects(&safeArea, 1)));
auto renderer = window.GetRenderer();
CHECK((static_cast<bool>(renderer) || !static_cast<bool>(renderer)));
}