diff --git a/tests/live_window.cc b/tests/live_window.cc index 1d98a86..287aba9 100644 --- a/tests/live_window.cc +++ b/tests/live_window.cc @@ -1,4 +1,4 @@ -#include +#include #include #include @@ -7,29 +7,37 @@ using namespace SDL2pp; -static void ProcessEvents() { +static void EventSleep(Uint32 ms) { + Uint32 now = SDL_GetTicks(); + Uint32 deadline = now + ms; + SDL_Event event; - while (SDL_PollEvent(&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, 0); + Window window("libSDL2pp test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 320, 240, SDL_WINDOW_RESIZABLE); - ProcessEvents(); + EventSleep(0); { // Size - EXPECT_EQUAL(window.GetSize(), Point(320, 240)); - EXPECT_EQUAL(window.GetWidth(), 320); - EXPECT_EQUAL(window.GetHeight(), 240); + EXPECT_EQUAL(window.GetSize(), Point(320, 240), "May fail on tiled WMs", NON_FATAL); + EXPECT_EQUAL(window.GetWidth(), 320, "May fail on tiled WMs", NON_FATAL); + EXPECT_EQUAL(window.GetHeight(), 240, "May fail on tiled 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); } { @@ -37,8 +45,8 @@ BEGIN_TEST(int, char*[]) EXPECT_EQUAL(window.GetTitle(), "libSDL2pp test"); window.SetTitle("libSDL2pp window test"); - EXPECT_EQUAL(window.GetTitle(), "libSDL2pp window test"); + EventSleep(1000); } { @@ -57,12 +65,12 @@ BEGIN_TEST(int, char*[]) 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); } { @@ -83,14 +91,13 @@ BEGIN_TEST(int, char*[]) { // Grab EXPECT_TRUE(!window.GetGrab()); - window.SetGrab(true); - EXPECT_TRUE(window.GetGrab()); + EventSleep(1000); window.SetGrab(false); - EXPECT_TRUE(!window.GetGrab()); + EventSleep(1000); } { @@ -98,12 +105,82 @@ BEGIN_TEST(int, char*[]) 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(); + EXPECT_TRUE(window.GetFlags() & SDL_WINDOW_MINIMIZED, "May fail on tiled WMs", NON_FATAL); + EventSleep(1000); + + window.Restore(); + EXPECT_TRUE(!(window.GetFlags() & SDL_WINDOW_MINIMIZED)); + EventSleep(1000); + + 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()