mirror of
https://github.com/libSDL2pp/libSDL2pp.git
synced 2025-08-03 10:55:57 -04:00
190 lines
4.9 KiB
C++
190 lines
4.9 KiB
C++
#include <ios>
|
|
|
|
#include <SDL2/SDL.h>
|
|
#include <SDL2pp/SDL2pp.hh>
|
|
|
|
#include "testing.h"
|
|
|
|
using namespace SDL2pp;
|
|
|
|
static void EventSleep(Uint32 ms) {
|
|
Uint32 now = SDL_GetTicks();
|
|
Uint32 deadline = now + ms;
|
|
|
|
SDL_Event event;
|
|
while ((now = SDL_GetTicks()) < deadline)
|
|
SDL_WaitEventTimeout(&event, deadline - now);
|
|
}
|
|
|
|
BEGIN_TEST(int, char*[])
|
|
SDL sdl(SDL_INIT_VIDEO);
|
|
Window window("libSDL2pp test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 320, 240, SDL_WINDOW_RESIZABLE);
|
|
|
|
EventSleep(0);
|
|
|
|
{
|
|
// Size
|
|
EXPECT_EQUAL(window.GetSize(), Point(320, 240), "May fail on some WMs", NON_FATAL);
|
|
EXPECT_EQUAL(window.GetWidth(), 320, "May fail on some WMs", NON_FATAL);
|
|
EXPECT_EQUAL(window.GetHeight(), 240, "May fail on some WMs", NON_FATAL);
|
|
|
|
window.SetSize(400, 300);
|
|
EXPECT_EQUAL(window.GetSize(), Point(400, 300));
|
|
EXPECT_EQUAL(window.GetWidth(), 400);
|
|
EXPECT_EQUAL(window.GetHeight(), 300);
|
|
EventSleep(1000);
|
|
|
|
window.SetSize(Point(500, 400));
|
|
EXPECT_EQUAL(window.GetWidth(), 500);
|
|
EXPECT_EQUAL(window.GetHeight(), 400);
|
|
EventSleep(1000);
|
|
}
|
|
|
|
{
|
|
// Title
|
|
EXPECT_EQUAL(window.GetTitle(), "libSDL2pp test");
|
|
|
|
window.SetTitle("libSDL2pp window test");
|
|
EXPECT_EQUAL(window.GetTitle(), "libSDL2pp window test");
|
|
EventSleep(1000);
|
|
}
|
|
|
|
{
|
|
// Drawable size
|
|
EXPECT_EQUAL(window.GetDrawableSize(), Point(window.GetDrawableWidth(), window.GetDrawableHeight()));
|
|
|
|
// Drawable may be larget than window size, see SDL docs
|
|
// Should we compare with multiplies of window size?
|
|
EXPECT_TRUE(window.GetDrawableWidth() >= window.GetWidth());
|
|
EXPECT_TRUE(window.GetDrawableHeight() >= window.GetHeight());
|
|
EXPECT_TRUE(window.GetDrawableWidth() > window.GetDrawableHeight());
|
|
}
|
|
|
|
{
|
|
// Position
|
|
Point old_pos = window.GetPosition();
|
|
|
|
window.SetPosition(old_pos + Point(2, 1));
|
|
EXPECT_EQUAL(window.GetPosition(), old_pos + Point(2, 1));
|
|
EventSleep(1000);
|
|
|
|
window.SetPosition(old_pos.x + 4, old_pos.y + 2);
|
|
EXPECT_EQUAL(window.GetPosition(), old_pos + Point(4, 2));
|
|
EventSleep(1000);
|
|
}
|
|
|
|
{
|
|
// Min/max size
|
|
window.SetMinimumSize(16, 16);
|
|
window.SetMaximumSize(1600, 1600);
|
|
|
|
EXPECT_EQUAL(window.GetMinimumSize(), Point(16, 16));
|
|
EXPECT_EQUAL(window.GetMaximumSize(), Point(1600, 1600));
|
|
|
|
window.SetMinimumSize(Point(32, 32));
|
|
window.SetMaximumSize(Point(3200, 3200));
|
|
|
|
EXPECT_EQUAL(window.GetMinimumSize(), Point(32, 32));
|
|
EXPECT_EQUAL(window.GetMaximumSize(), Point(3200, 3200));
|
|
}
|
|
|
|
{
|
|
// Grab
|
|
EXPECT_TRUE(!window.GetGrab());
|
|
window.SetGrab(true);
|
|
EXPECT_TRUE(window.GetGrab());
|
|
EventSleep(1000);
|
|
|
|
window.SetGrab(false);
|
|
EXPECT_TRUE(!window.GetGrab());
|
|
EventSleep(1000);
|
|
}
|
|
|
|
{
|
|
// Brightness
|
|
EXPECT_EQUAL(window.GetBrightness(), 1.0f);
|
|
|
|
window.SetBrightness(1.2f);
|
|
EXPECT_EQUAL(window.GetBrightness(), 1.2f);
|
|
EventSleep(1000);
|
|
|
|
window.SetBrightness(1.0f);
|
|
EXPECT_EQUAL(window.GetBrightness(), 1.0f);
|
|
EventSleep(1000);
|
|
}
|
|
|
|
{
|
|
// Flags
|
|
std::cerr << "Window flags: " << std::hex << "0x" << window.GetFlags() << std::dec << std::endl;
|
|
|
|
EXPECT_TRUE(window.GetFlags() & SDL_WINDOW_SHOWN);
|
|
EXPECT_TRUE(window.GetFlags() & SDL_WINDOW_RESIZABLE);
|
|
|
|
window.Hide();
|
|
EXPECT_TRUE(!(window.GetFlags() & SDL_WINDOW_SHOWN));
|
|
EventSleep(1000);
|
|
|
|
window.Show();
|
|
EXPECT_TRUE(window.GetFlags() & SDL_WINDOW_SHOWN);
|
|
EventSleep(1000);
|
|
|
|
window.Maximize();
|
|
EXPECT_TRUE(window.GetFlags() & SDL_WINDOW_MAXIMIZED);
|
|
EventSleep(1000);
|
|
|
|
window.Restore();
|
|
EXPECT_TRUE(!(window.GetFlags() & SDL_WINDOW_MAXIMIZED));
|
|
EventSleep(1000);
|
|
|
|
window.Minimize();
|
|
EventSleep(1000); // Minimization may take some time, e.g. on Ubuntu due to animations
|
|
EXPECT_TRUE(window.GetFlags() & SDL_WINDOW_MINIMIZED, "May fail on some WMs", NON_FATAL);
|
|
EventSleep(1000);
|
|
|
|
window.Restore();
|
|
EventSleep(1000); // Restore from minimized state may take some time, e.g. on Ubuntu due to animations
|
|
EXPECT_TRUE(!(window.GetFlags() & SDL_WINDOW_MINIMIZED));
|
|
EventSleep(1000);
|
|
|
|
// May hang until window is moved (SDL bug?)
|
|
// window.SetBordered(false);
|
|
// EXPECT_TRUE(window.GetFlags() & SDL_WINDOW_BORDERLESS);
|
|
// EventSleep(1000);
|
|
|
|
// window.SetBordered(true);
|
|
// EXPECT_TRUE(!(window.GetFlags() & SDL_WINDOW_BORDERLESS));
|
|
// EventSleep(1000);
|
|
|
|
window.Raise();
|
|
EventSleep(1000);
|
|
}
|
|
|
|
{
|
|
// Display index & mode
|
|
|
|
// XXX: may throw
|
|
std::cerr << "Display index: " << window.GetDisplayIndex() << std::endl;
|
|
|
|
SDL_DisplayMode mode;
|
|
window.GetDisplayMode(mode);
|
|
|
|
std::cerr << "Display mode:" << std::endl;
|
|
std::cerr << " Format: 0x" << std::hex << mode.format << std::dec << std::endl;
|
|
std::cerr << " Width: " << mode.w << std::endl;
|
|
std::cerr << " Height: " << mode.h << std::endl;
|
|
std::cerr << " Refresh rate: " << mode.refresh_rate << std::endl;
|
|
}
|
|
|
|
{
|
|
// Fullscreen
|
|
window.SetFullscreen(SDL_WINDOW_FULLSCREEN_DESKTOP);
|
|
EXPECT_TRUE(window.GetFlags() & SDL_WINDOW_FULLSCREEN_DESKTOP);
|
|
EventSleep(1000);
|
|
|
|
window.SetFullscreen(0);
|
|
EXPECT_TRUE(!(window.GetFlags() & SDL_WINDOW_FULLSCREEN_DESKTOP));
|
|
EventSleep(1000);
|
|
}
|
|
|
|
END_TEST()
|