tests: Backport automated video test changes

Changes to the SDL3 video system required some changes to the test suite since the video system always reports the true window size and position.

While SDL2 doesn't directly require these changes, they are needed for SDL2-Compat and committed here to keep the two test suites in sync.
This commit is contained in:
Frank Praznik 2023-12-12 16:04:49 -05:00
parent 33588662ef
commit a78cdbd7e3

View file

@ -1137,10 +1137,17 @@ int video_getSetWindowPosition(void *arg)
{
const char *title = "video_getSetWindowPosition Test Window";
SDL_Window *window;
int maxxVariation, maxyVariation;
int xVariation, yVariation;
int referenceX, referenceY;
int currentX, currentY;
int desiredX, desiredY;
SDL_Rect display_bounds;
if (SDL_strcmp(SDL_GetCurrentVideoDriver(), "wayland") == 0) {
SDLTest_Log("Skipping test: wayland does not support window positioning");
return TEST_SKIPPED;
}
/* Call against new test window */
window = _createVideoSuiteTestWindow(title);
@ -1148,46 +1155,69 @@ int video_getSetWindowPosition(void *arg)
return TEST_ABORTED;
}
for (xVariation = 0; xVariation < 4; xVariation++) {
for (yVariation = 0; yVariation < 4; yVariation++) {
if (SDL_strcmp(SDL_GetCurrentVideoDriver(), "x11") == 0) {
/* The X11 server allows arbitrary window placement, but compositing
* window managers such as GNOME and KDE force windows to be within
* desktop bounds.
*/
maxxVariation = 2;
maxyVariation = 2;
SDL_GetDisplayUsableBounds(SDL_GetWindowDisplayIndex(window), &display_bounds);
} else if (SDL_strcmp(SDL_GetCurrentVideoDriver(), "cocoa") == 0) {
/* Platform doesn't allow windows with negative Y desktop bounds */
maxxVariation = 4;
maxyVariation = 3;
SDL_GetDisplayUsableBounds(SDL_GetWindowDisplayIndex(window), &display_bounds);
} else {
/* Platform allows windows to be placed out of bounds */
maxxVariation = 4;
maxyVariation = 4;
SDL_GetDisplayBounds(SDL_GetWindowDisplayIndex(window), &display_bounds);
}
for (xVariation = 0; xVariation < maxxVariation; xVariation++) {
for (yVariation = 0; yVariation < maxyVariation; yVariation++) {
switch (xVariation) {
default:
case 0:
/* Zero X Position */
desiredX = 0;
break;
/* Zero X Position */
desiredX = display_bounds.x > 0 ? display_bounds.x : 0;
break;
case 1:
/* Random X position inside screen */
desiredX = SDLTest_RandomIntegerInRange(1, 100);
break;
/* Random X position inside screen */
desiredX = SDLTest_RandomIntegerInRange(display_bounds.x + 1, display_bounds.x + 100);
break;
case 2:
/* Random X position outside screen (positive) */
desiredX = SDLTest_RandomIntegerInRange(10000, 11000);
break;
/* Random X position outside screen (positive) */
desiredX = SDLTest_RandomIntegerInRange(10000, 11000);
break;
case 3:
/* Random X position outside screen (negative) */
desiredX = SDLTest_RandomIntegerInRange(-1000, -100);
break;
/* Random X position outside screen (negative) */
desiredX = SDLTest_RandomIntegerInRange(-1000, -100);
break;
}
switch (yVariation) {
default:
case 0:
/* Zero X Position */
desiredY = 0;
break;
/* Zero Y Position */
desiredY = display_bounds.y > 0 ? display_bounds.y : 0;
break;
case 1:
/* Random X position inside screen */
desiredY = SDLTest_RandomIntegerInRange(1, 100);
break;
/* Random Y position inside screen */
desiredY = SDLTest_RandomIntegerInRange(display_bounds.y + 1, display_bounds.y + 100);
break;
case 2:
/* Random X position outside screen (positive) */
desiredY = SDLTest_RandomIntegerInRange(10000, 11000);
break;
/* Random Y position outside screen (positive) */
desiredY = SDLTest_RandomIntegerInRange(10000, 11000);
break;
case 3:
/* Random Y position outside screen (negative) */
desiredY = SDLTest_RandomIntegerInRange(-1000, -100);
break;
/* Random Y position outside screen (negative) */
desiredY = SDLTest_RandomIntegerInRange(-1000, -100);
break;
}
/* Set position */
@ -1307,7 +1337,7 @@ int video_getSetWindowSize(void *arg)
int desiredW, desiredH;
/* Get display bounds for size range */
result = SDL_GetDisplayBounds(0, &display);
result = SDL_GetDisplayUsableBounds(0, &display);
SDLTest_AssertPass("SDL_GetDisplayBounds()");
SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result);
if (result != 0) {
@ -1320,15 +1350,16 @@ int video_getSetWindowSize(void *arg)
return TEST_ABORTED;
}
#ifdef __WIN32__
/* Platform clips window size to screen size */
maxwVariation = 4;
maxhVariation = 4;
#else
/* Platform allows window size >= screen size */
maxwVariation = 5;
maxhVariation = 5;
#endif
if (SDL_strcmp(SDL_GetCurrentVideoDriver(), "windows") == 0 ||
SDL_strcmp(SDL_GetCurrentVideoDriver(), "x11") == 0) {
/* Platform clips window size to screen size */
maxwVariation = 4;
maxhVariation = 4;
} else {
/* Platform allows window size >= screen size */
maxwVariation = 5;
maxhVariation = 5;
}
for (wVariation = 0; wVariation < maxwVariation; wVariation++) {
for (hVariation = 0; hVariation < maxhVariation; hVariation++) {
@ -2023,7 +2054,7 @@ int video_setWindowCenteredOnDisplay(void *arg)
expectedX = (expectedDisplayRect.x + ((expectedDisplayRect.w - w) / 2));
expectedY = (expectedDisplayRect.y + ((expectedDisplayRect.h - h) / 2));
window = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI);
window = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_BORDERLESS);
SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,SHOWN)", x, y, w, h);
SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL");
@ -2089,7 +2120,6 @@ int video_setWindowCenteredOnDisplay(void *arg)
/* Leave fullscreen desktop */
result = SDL_SetWindowFullscreen(window, 0);
SDL_PumpEvents();
SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result);
/* Check window was restored correctly */