Add tests to video suite
This commit is contained in:
parent
95adf91d71
commit
c5865bdd87
2 changed files with 258 additions and 36 deletions
|
@ -7,6 +7,43 @@
|
|||
#include "SDL.h"
|
||||
#include "SDL_test.h"
|
||||
|
||||
/* Private helpers */
|
||||
|
||||
/*
|
||||
* Create a test window
|
||||
*/
|
||||
SDL_Window *_createVideoSuiteTestWindow(const char *title)
|
||||
{
|
||||
SDL_Window* window;
|
||||
int x, y, w, h;
|
||||
SDL_WindowFlags flags;
|
||||
|
||||
/* Standard window */
|
||||
x = SDLTest_RandomIntegerInRange(1, 100);
|
||||
y = SDLTest_RandomIntegerInRange(1, 100);
|
||||
w = SDLTest_RandomIntegerInRange(320, 1024);
|
||||
h = SDLTest_RandomIntegerInRange(320, 768);
|
||||
flags = SDL_WINDOW_SHOWN;
|
||||
|
||||
window = SDL_CreateWindow(title, x, y, w, h, flags);
|
||||
SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,%d)", x, y, w, h, flags);
|
||||
SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL");
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
/*
|
||||
* Destroy test window
|
||||
*/
|
||||
void _destroyVideoSuiteTestWindow(SDL_Window *window)
|
||||
{
|
||||
if (window != NULL) {
|
||||
SDL_DestroyWindow(window);
|
||||
window = NULL;
|
||||
SDLTest_AssertPass("Call to SDL_DestroyWindow");
|
||||
}
|
||||
}
|
||||
|
||||
/* Test case functions */
|
||||
|
||||
/**
|
||||
|
@ -133,10 +170,9 @@ video_createWindowVariousPositions(void *arg)
|
|||
window = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_SHOWN);
|
||||
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");
|
||||
if (window != NULL) {
|
||||
SDL_DestroyWindow(window);
|
||||
SDLTest_AssertPass("Call to SDL_DestroyWindow");
|
||||
}
|
||||
|
||||
/* Clean up */
|
||||
_destroyVideoSuiteTestWindow(window);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -191,10 +227,9 @@ video_createWindowVariousSizes(void *arg)
|
|||
window = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_SHOWN);
|
||||
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");
|
||||
if (window != NULL) {
|
||||
SDL_DestroyWindow(window);
|
||||
SDLTest_AssertPass("Call to SDL_DestroyWindow");
|
||||
}
|
||||
|
||||
/* Clean up */
|
||||
_destroyVideoSuiteTestWindow(window);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -269,15 +304,16 @@ video_createWindowVariousFlags(void *arg)
|
|||
window = SDL_CreateWindow(title, x, y, w, h, flags);
|
||||
SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,%d)", x, y, w, h, flags);
|
||||
SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL");
|
||||
if (window != NULL) {
|
||||
SDL_DestroyWindow(window);
|
||||
SDLTest_AssertPass("Call to SDL_DestroyWindow");
|
||||
}
|
||||
|
||||
|
||||
/* Clean up */
|
||||
_destroyVideoSuiteTestWindow(window);
|
||||
}
|
||||
|
||||
return TEST_COMPLETED;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Tests the functionality of the SDL_GetWindowFlags function
|
||||
*/
|
||||
|
@ -286,30 +322,200 @@ video_getWindowFlags(void *arg)
|
|||
{
|
||||
SDL_Window* window;
|
||||
const char* title = "video_getWindowFlags Test Window";
|
||||
int x, y, w, h;
|
||||
SDL_WindowFlags flags;
|
||||
Uint32 actualFlags;
|
||||
|
||||
/* Standard window */
|
||||
x = SDLTest_RandomIntegerInRange(1, 100);
|
||||
y = SDLTest_RandomIntegerInRange(1, 100);
|
||||
w = SDLTest_RandomIntegerInRange(320, 1024);
|
||||
h = SDLTest_RandomIntegerInRange(320, 768);
|
||||
|
||||
/* Reliable flag */
|
||||
/* Reliable flag set always set in test window */
|
||||
flags = SDL_WINDOW_SHOWN;
|
||||
|
||||
window = SDL_CreateWindow(title, x, y, w, h, flags);
|
||||
SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,%d)", x, y, w, h, flags);
|
||||
SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL");
|
||||
/* Call against new test window */
|
||||
window = _createVideoSuiteTestWindow(title);
|
||||
if (window != NULL) {
|
||||
actualFlags = SDL_GetWindowFlags(window);
|
||||
SDLTest_AssertPass("Call to SDL_GetWindowFlags");
|
||||
SDLTest_AssertCheck((flags & actualFlags) == flags, "Verify returned value has flags %d set, got: %d", flags, actualFlags);
|
||||
SDL_DestroyWindow(window);
|
||||
SDLTest_AssertPass("Call to SDL_DestroyWindow");
|
||||
}
|
||||
|
||||
/* Clean up */
|
||||
_destroyVideoSuiteTestWindow(window);
|
||||
|
||||
return TEST_COMPLETED;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Tests the functionality of the SDL_GetNumDisplayModes function
|
||||
*/
|
||||
int
|
||||
video_getNumDisplayModes(void *arg)
|
||||
{
|
||||
int result;
|
||||
int displayNum;
|
||||
int i;
|
||||
|
||||
/* Get number of displays */
|
||||
displayNum = SDL_GetNumVideoDisplays();
|
||||
SDLTest_AssertPass("Call to SDL_GetNumVideoDisplays");
|
||||
|
||||
/* Make call for each display */
|
||||
for (i=0; i<displayNum; i++) {
|
||||
result = SDL_GetNumDisplayModes(i);
|
||||
SDLTest_AssertPass("Call to SDL_GetNumDisplayModes(%d)", i);
|
||||
SDLTest_AssertCheck(result >= 1, "Validate returned value from function; expected: >=1; got: %d", result);
|
||||
}
|
||||
|
||||
return TEST_COMPLETED;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Tests negative call to SDL_GetNumDisplayModes function
|
||||
*/
|
||||
int
|
||||
video_getNumDisplayModesNegative(void *arg)
|
||||
{
|
||||
int result;
|
||||
int displayNum;
|
||||
int displayIndex;
|
||||
|
||||
/* Get number of displays */
|
||||
displayNum = SDL_GetNumVideoDisplays();
|
||||
SDLTest_AssertPass("Call to SDL_GetNumVideoDisplays");
|
||||
|
||||
/* Invalid boundary values */
|
||||
displayIndex = SDLTest_RandomSint32BoundaryValue(0, displayNum, SDL_FALSE);
|
||||
result = SDL_GetNumDisplayModes(displayIndex);
|
||||
SDLTest_AssertPass("Call to SDL_GetNumDisplayModes(%d=out-of-bounds/boundary)", displayIndex);
|
||||
SDLTest_AssertCheck(result < 0, "Validate returned value from function; expected: <0; got: %d", result);
|
||||
|
||||
/* Large (out-of-bounds) display index */
|
||||
displayIndex = SDLTest_RandomIntegerInRange(-2000, -1000);
|
||||
result = SDL_GetNumDisplayModes(displayIndex);
|
||||
SDLTest_AssertPass("Call to SDL_GetNumDisplayModes(%d=out-of-bounds/large negative)", displayIndex);
|
||||
SDLTest_AssertCheck(result < 0, "Validate returned value from function; expected: <0; got: %d", result);
|
||||
|
||||
displayIndex = SDLTest_RandomIntegerInRange(1000, 2000);
|
||||
result = SDL_GetNumDisplayModes(displayIndex);
|
||||
SDLTest_AssertPass("Call to SDL_GetNumDisplayModes(%d=out-of-bounds/large positive)", displayIndex);
|
||||
SDLTest_AssertCheck(result < 0, "Validate returned value from function; expected: <0; got: %d", result);
|
||||
|
||||
return TEST_COMPLETED;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Tests the functionality of the SDL_GetClosestDisplayMode function against current resolution
|
||||
*/
|
||||
int
|
||||
video_getClosestDisplayModeCurrentResolution(void *arg)
|
||||
{
|
||||
int result;
|
||||
SDL_DisplayMode current;
|
||||
SDL_DisplayMode target;
|
||||
SDL_DisplayMode closest;
|
||||
SDL_DisplayMode* dResult;
|
||||
int displayNum;
|
||||
int i;
|
||||
int variation;
|
||||
|
||||
/* Get number of displays */
|
||||
displayNum = SDL_GetNumVideoDisplays();
|
||||
SDLTest_AssertPass("Call to SDL_GetNumVideoDisplays");
|
||||
|
||||
/* Make calls for each display */
|
||||
for (i=0; i<displayNum; i++) {
|
||||
SDLTest_Log("Testing against display: %d", i);
|
||||
|
||||
/* Get first display mode to get a sane resolution; this should always work */
|
||||
result = SDL_GetDisplayMode(i, 0, ¤t);
|
||||
SDLTest_AssertPass("Call to SDL_GetDisplayMode");
|
||||
SDLTest_AssertCheck(result == 0, "Verify return value, expected: 0, got: %d", result);
|
||||
if (result != 0) {
|
||||
return TEST_ABORTED;
|
||||
}
|
||||
|
||||
/* Set the desired resolution equals to current resolution */
|
||||
target.w = current.w;
|
||||
target.h = current.h;
|
||||
for (variation = 0; variation < 8; variation ++) {
|
||||
/* Vary constraints on other query parameters */
|
||||
target.format = (variation & 1) ? current.format : 0;
|
||||
target.refresh_rate = (variation & 2) ? current.refresh_rate : 0;
|
||||
target.driverdata = (variation & 4) ? current.driverdata : 0;
|
||||
|
||||
/* Make call */
|
||||
dResult = SDL_GetClosestDisplayMode(i, &target, &closest);
|
||||
SDLTest_AssertPass("Call to SDL_GetClosestDisplayMode(target=current/variation%d)", variation);
|
||||
SDLTest_AssertCheck(dResult != NULL, "Verify returned value is not NULL");
|
||||
|
||||
/* Check that one gets the current resolution back again */
|
||||
SDLTest_AssertCheck(closest.w == current.w, "Verify returned width matches current width; expected: %d, got: %d", current.w, closest.w);
|
||||
SDLTest_AssertCheck(closest.h == current.h, "Verify returned height matches current height; expected: %d, got: %d", current.h, closest.h);
|
||||
SDLTest_AssertCheck(closest.w == dResult->w, "Verify return value matches assigned value; expected: %d, got: %d", closest.w, dResult->w);
|
||||
SDLTest_AssertCheck(closest.h == dResult->h, "Verify return value matches assigned value; expected: %d, got: %d", closest.h, dResult->h);
|
||||
}
|
||||
}
|
||||
|
||||
return TEST_COMPLETED;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Tests the functionality of the SDL_GetClosestDisplayMode function against random resolution
|
||||
*/
|
||||
int
|
||||
video_getClosestDisplayModeRandomResolution(void *arg)
|
||||
{
|
||||
SDL_DisplayMode target;
|
||||
SDL_DisplayMode closest;
|
||||
SDL_DisplayMode* dResult;
|
||||
int displayNum;
|
||||
int i;
|
||||
int variation;
|
||||
|
||||
/* Get number of displays */
|
||||
displayNum = SDL_GetNumVideoDisplays();
|
||||
SDLTest_AssertPass("Call to SDL_GetNumVideoDisplays");
|
||||
|
||||
/* Make calls for each display */
|
||||
for (i=0; i<displayNum; i++) {
|
||||
SDLTest_Log("Testing against display: %d", i);
|
||||
|
||||
for (variation = 0; variation < 16; variation ++) {
|
||||
|
||||
/* Set random constraints */
|
||||
target.w = (variation & 1) ? SDLTest_RandomIntegerInRange(1, 4096) : 0;
|
||||
target.h = (variation & 2) ? SDLTest_RandomIntegerInRange(1, 4096) : 0;
|
||||
target.format = (variation & 4) ? SDLTest_RandomIntegerInRange(1, 10) : 0;
|
||||
target.refresh_rate = (variation & 8) ? SDLTest_RandomIntegerInRange(25, 120) : 0;
|
||||
target.driverdata = 0;
|
||||
|
||||
/* Make call; may or may not find anything, so don't validate any further */
|
||||
dResult = SDL_GetClosestDisplayMode(i, &target, &closest);
|
||||
SDLTest_AssertPass("Call to SDL_GetClosestDisplayMode(target=random/variation%d)", variation);
|
||||
}
|
||||
}
|
||||
|
||||
return TEST_COMPLETED;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Tests call to SDL_GetWindowBrightness
|
||||
*/
|
||||
int
|
||||
video_getWindowBrightness(void *arg)
|
||||
{
|
||||
SDL_Window* window;
|
||||
const char* title = "video_getWindowBrightness Test Window";
|
||||
float result;
|
||||
|
||||
/* Call against new test window */
|
||||
window = _createVideoSuiteTestWindow(title);
|
||||
if (window != NULL) {
|
||||
result = SDL_GetWindowBrightness(window);
|
||||
SDLTest_AssertPass("Call to SDL_GetWindowBrightness");
|
||||
SDLTest_AssertCheck(result >= 0.0 && result <= 1.0, "Validate range of result value; expected: [0.0, 1.0], got: %f", result);
|
||||
}
|
||||
|
||||
/* Clean up */
|
||||
_destroyVideoSuiteTestWindow(window);
|
||||
|
||||
return TEST_COMPLETED;
|
||||
}
|
||||
|
||||
|
@ -329,11 +535,27 @@ static const SDLTest_TestCaseReference videoTest4 =
|
|||
{ (SDLTest_TestCaseFp)video_createWindowVariousFlags, "video_createWindowVariousFlags", "Create windows using various flags", TEST_ENABLED };
|
||||
|
||||
static const SDLTest_TestCaseReference videoTest5 =
|
||||
{ (SDLTest_TestCaseFp)video_getWindowFlags, "video_getWindowFlags", "Set and get window flags", TEST_ENABLED };
|
||||
{ (SDLTest_TestCaseFp)video_getWindowFlags, "video_getWindowFlags", "Get window flags set during SDL_CreateWindow", TEST_ENABLED };
|
||||
|
||||
static const SDLTest_TestCaseReference videoTest6 =
|
||||
{ (SDLTest_TestCaseFp)video_getNumDisplayModes, "video_getNumDisplayModes", "Use SDL_GetNumDisplayModes function to get number of display modes", TEST_ENABLED };
|
||||
|
||||
static const SDLTest_TestCaseReference videoTest7 =
|
||||
{ (SDLTest_TestCaseFp)video_getNumDisplayModesNegative, "video_getNumDisplayModesNegative", "Negative tests for SDL_GetNumDisplayModes", TEST_ENABLED };
|
||||
|
||||
static const SDLTest_TestCaseReference videoTest8 =
|
||||
{ (SDLTest_TestCaseFp)video_getClosestDisplayModeCurrentResolution, "video_getClosestDisplayModeCurrentResolution", "Use function to get closes match to requested display mode for current resolution", TEST_ENABLED };
|
||||
|
||||
static const SDLTest_TestCaseReference videoTest9 =
|
||||
{ (SDLTest_TestCaseFp)video_getClosestDisplayModeRandomResolution, "video_getClosestDisplayModeRandomResolution", "Use function to get closes match to requested display mode for random resolution", TEST_ENABLED };
|
||||
|
||||
static const SDLTest_TestCaseReference videoTest10 =
|
||||
{ (SDLTest_TestCaseFp)video_getWindowBrightness, "video_getWindowBrightness", "Get window brightness", TEST_ENABLED };
|
||||
|
||||
/* Sequence of Video test cases */
|
||||
static const SDLTest_TestCaseReference *videoTests[] = {
|
||||
&videoTest1, &videoTest2, &videoTest3, &videoTest4, &videoTest5, NULL
|
||||
&videoTest1, &videoTest2, &videoTest3, &videoTest4, &videoTest5, &videoTest6,
|
||||
&videoTest7, &videoTest8, &videoTest9, &videoTest10, NULL
|
||||
};
|
||||
|
||||
/* Video test suite (global) */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue