2015-06-21 15:33:46 +00:00
/**
* Mouse test suite
*/
# include <stdio.h>
# include <limits.h>
# include "SDL.h"
# include "SDL_test.h"
/* ================= Test Case Implementation ================== */
/* Test case functions */
/* Helper to evaluate state returned from SDL_GetMouseState */
int _mouseStateCheck ( Uint32 state )
{
2022-11-30 20:51:59 +00:00
return ( state = = 0 ) | |
( state = = SDL_BUTTON ( SDL_BUTTON_LEFT ) ) | |
( state = = SDL_BUTTON ( SDL_BUTTON_MIDDLE ) ) | |
( state = = SDL_BUTTON ( SDL_BUTTON_RIGHT ) ) | |
( state = = SDL_BUTTON ( SDL_BUTTON_X1 ) ) | |
( state = = SDL_BUTTON ( SDL_BUTTON_X2 ) ) ;
2015-06-21 15:33:46 +00:00
}
/**
* @ brief Check call to SDL_GetMouseState
*
*/
2022-11-30 20:51:59 +00:00
int mouse_getMouseState ( void * arg )
2015-06-21 15:33:46 +00:00
{
2022-11-30 20:51:59 +00:00
int x ;
int y ;
Uint32 state ;
/* Pump some events to update mouse state */
SDL_PumpEvents ( ) ;
SDLTest_AssertPass ( " Call to SDL_PumpEvents() " ) ;
/* Case where x, y pointer is NULL */
state = SDL_GetMouseState ( NULL , NULL ) ;
SDLTest_AssertPass ( " Call to SDL_GetMouseState(NULL, NULL) " ) ;
SDLTest_AssertCheck ( _mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
/* Case where x pointer is not NULL */
x = INT_MIN ;
state = SDL_GetMouseState ( & x , NULL ) ;
SDLTest_AssertPass ( " Call to SDL_GetMouseState(&x, NULL) " ) ;
SDLTest_AssertCheck ( x > INT_MIN , " Validate that value of x is > INT_MIN, got: %i " , x ) ;
SDLTest_AssertCheck ( _mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
/* Case where y pointer is not NULL */
y = INT_MIN ;
state = SDL_GetMouseState ( NULL , & y ) ;
SDLTest_AssertPass ( " Call to SDL_GetMouseState(NULL, &y) " ) ;
SDLTest_AssertCheck ( y > INT_MIN , " Validate that value of y is > INT_MIN, got: %i " , y ) ;
SDLTest_AssertCheck ( _mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
/* Case where x and y pointer is not NULL */
x = INT_MIN ;
y = INT_MIN ;
state = SDL_GetMouseState ( & x , & y ) ;
SDLTest_AssertPass ( " Call to SDL_GetMouseState(&x, &y) " ) ;
SDLTest_AssertCheck ( x > INT_MIN , " Validate that value of x is > INT_MIN, got: %i " , x ) ;
SDLTest_AssertCheck ( y > INT_MIN , " Validate that value of y is > INT_MIN, got: %i " , y ) ;
SDLTest_AssertCheck ( _mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
return TEST_COMPLETED ;
2015-06-21 15:33:46 +00:00
}
/**
* @ brief Check call to SDL_GetRelativeMouseState
*
*/
2022-11-30 20:51:59 +00:00
int mouse_getRelativeMouseState ( void * arg )
2015-06-21 15:33:46 +00:00
{
2022-11-30 20:51:59 +00:00
int x ;
int y ;
Uint32 state ;
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
/* Pump some events to update mouse state */
SDL_PumpEvents ( ) ;
SDLTest_AssertPass ( " Call to SDL_PumpEvents() " ) ;
/* Case where x, y pointer is NULL */
state = SDL_GetRelativeMouseState ( NULL , NULL ) ;
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseState(NULL, NULL) " ) ;
SDLTest_AssertCheck ( _mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
/* Case where x pointer is not NULL */
x = INT_MIN ;
state = SDL_GetRelativeMouseState ( & x , NULL ) ;
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseState(&x, NULL) " ) ;
SDLTest_AssertCheck ( x > INT_MIN , " Validate that value of x is > INT_MIN, got: %i " , x ) ;
SDLTest_AssertCheck ( _mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
/* Case where y pointer is not NULL */
y = INT_MIN ;
state = SDL_GetRelativeMouseState ( NULL , & y ) ;
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseState(NULL, &y) " ) ;
SDLTest_AssertCheck ( y > INT_MIN , " Validate that value of y is > INT_MIN, got: %i " , y ) ;
SDLTest_AssertCheck ( _mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
/* Case where x and y pointer is not NULL */
x = INT_MIN ;
y = INT_MIN ;
state = SDL_GetRelativeMouseState ( & x , & y ) ;
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseState(&x, &y) " ) ;
SDLTest_AssertCheck ( x > INT_MIN , " Validate that value of x is > INT_MIN, got: %i " , x ) ;
SDLTest_AssertCheck ( y > INT_MIN , " Validate that value of y is > INT_MIN, got: %i " , y ) ;
SDLTest_AssertCheck ( _mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
return TEST_COMPLETED ;
}
2015-06-21 15:33:46 +00:00
/* XPM definition of mouse Cursor */
static const char * _mouseArrowData [ ] = {
2022-11-30 20:51:59 +00:00
/* pixels */
" X " ,
" XX " ,
" X.X " ,
" X..X " ,
" X...X " ,
" X....X " ,
" X.....X " ,
" X......X " ,
" X.......X " ,
" X........X " ,
" X.....XXXXX " ,
" X..X..X " ,
" X.X X..X " ,
" XX X..X " ,
" X X..X " ,
" X..X " ,
" X..X " ,
" X..X " ,
" XX " ,
" " ,
" " ,
" " ,
" " ,
" " ,
" " ,
" " ,
" " ,
" " ,
" " ,
" " ,
" " ,
" "
2015-06-21 15:33:46 +00:00
} ;
/* Helper that creates a new mouse cursor from an XPM */
static SDL_Cursor * _initArrowCursor ( const char * image [ ] )
{
2022-11-30 20:51:59 +00:00
SDL_Cursor * cursor ;
int i , row , col ;
Uint8 data [ 4 * 32 ] ;
Uint8 mask [ 4 * 32 ] ;
i = - 1 ;
for ( row = 0 ; row < 32 ; + + row ) {
for ( col = 0 ; col < 32 ; + + col ) {
if ( col % 8 ) {
data [ i ] < < = 1 ;
mask [ i ] < < = 1 ;
} else {
+ + i ;
data [ i ] = mask [ i ] = 0 ;
}
switch ( image [ row ] [ col ] ) {
case ' X ' :
data [ i ] | = 0x01 ;
mask [ i ] | = 0x01 ;
break ;
case ' . ' :
mask [ i ] | = 0x01 ;
break ;
case ' ' :
break ;
}
}
2015-06-21 15:33:46 +00:00
}
2022-11-30 20:51:59 +00:00
cursor = SDL_CreateCursor ( data , mask , 32 , 32 , 0 , 0 ) ;
return cursor ;
2015-06-21 15:33:46 +00:00
}
/**
* @ brief Check call to SDL_CreateCursor and SDL_FreeCursor
*
2021-04-01 16:20:04 +00:00
* @ sa http : //wiki.libsdl.org/SDL_CreateCursor
* @ sa http : //wiki.libsdl.org/SDL_FreeCursor
2015-06-21 15:33:46 +00:00
*/
2022-11-30 20:51:59 +00:00
int mouse_createFreeCursor ( void * arg )
2015-06-21 15:33:46 +00:00
{
SDL_Cursor * cursor ;
/* Create a cursor */
cursor = _initArrowCursor ( _mouseArrowData ) ;
2022-11-30 20:51:59 +00:00
SDLTest_AssertPass ( " Call to SDL_CreateCursor() " ) ;
SDLTest_AssertCheck ( cursor ! = NULL , " Validate result from SDL_CreateCursor() is not NULL " ) ;
2015-06-21 15:33:46 +00:00
if ( cursor = = NULL ) {
return TEST_ABORTED ;
}
/* Free cursor again */
SDL_FreeCursor ( cursor ) ;
SDLTest_AssertPass ( " Call to SDL_FreeCursor() " ) ;
return TEST_COMPLETED ;
}
/**
* @ brief Check call to SDL_CreateColorCursor and SDL_FreeCursor
*
2021-04-01 16:20:04 +00:00
* @ sa http : //wiki.libsdl.org/SDL_CreateColorCursor
* @ sa http : //wiki.libsdl.org/SDL_FreeCursor
2015-06-21 15:33:46 +00:00
*/
2022-11-30 20:51:59 +00:00
int mouse_createFreeColorCursor ( void * arg )
2015-06-21 15:33:46 +00:00
{
SDL_Surface * face ;
SDL_Cursor * cursor ;
/* Get sample surface */
face = SDLTest_ImageFace ( ) ;
SDLTest_AssertCheck ( face ! = NULL , " Validate sample input image is not NULL " ) ;
2022-11-27 16:38:43 +00:00
if ( face = = NULL ) {
return TEST_ABORTED ;
}
2015-06-21 15:33:46 +00:00
/* Create a color cursor from surface */
cursor = SDL_CreateColorCursor ( face , 0 , 0 ) ;
2022-11-30 20:51:59 +00:00
SDLTest_AssertPass ( " Call to SDL_CreateColorCursor() " ) ;
SDLTest_AssertCheck ( cursor ! = NULL , " Validate result from SDL_CreateColorCursor() is not NULL " ) ;
2015-06-21 15:33:46 +00:00
if ( cursor = = NULL ) {
SDL_FreeSurface ( face ) ;
return TEST_ABORTED ;
}
/* Free cursor again */
SDL_FreeCursor ( cursor ) ;
SDLTest_AssertPass ( " Call to SDL_FreeCursor() " ) ;
/* Clean up */
SDL_FreeSurface ( face ) ;
return TEST_COMPLETED ;
}
/* Helper that changes cursor visibility */
void _changeCursorVisibility ( int state )
{
int oldState ;
int newState ;
int result ;
2022-11-30 20:51:59 +00:00
oldState = SDL_ShowCursor ( SDL_QUERY ) ;
2015-06-21 15:33:46 +00:00
SDLTest_AssertPass ( " Call to SDL_ShowCursor(SDL_QUERY) " ) ;
2022-11-30 20:51:59 +00:00
result = SDL_ShowCursor ( state ) ;
2015-06-21 15:33:46 +00:00
SDLTest_AssertPass ( " Call to SDL_ShowCursor(%s) " , ( state = = SDL_ENABLE ) ? " SDL_ENABLE " : " SDL_DISABLE " ) ;
SDLTest_AssertCheck ( result = = oldState , " Validate result from SDL_ShowCursor(%s), expected: %i, got: %i " ,
2022-11-30 20:51:59 +00:00
( state = = SDL_ENABLE ) ? " SDL_ENABLE " : " SDL_DISABLE " , oldState , result ) ;
2015-06-21 15:33:46 +00:00
newState = SDL_ShowCursor ( SDL_QUERY ) ;
SDLTest_AssertPass ( " Call to SDL_ShowCursor(SDL_QUERY) " ) ;
SDLTest_AssertCheck ( state = = newState , " Validate new state, expected: %i, got: %i " ,
2022-11-30 20:51:59 +00:00
state , newState ) ;
2015-06-21 15:33:46 +00:00
}
/**
* @ brief Check call to SDL_ShowCursor
*
2021-04-01 16:20:04 +00:00
* @ sa http : //wiki.libsdl.org/SDL_ShowCursor
2015-06-21 15:33:46 +00:00
*/
2022-11-30 20:51:59 +00:00
int mouse_showCursor ( void * arg )
2015-06-21 15:33:46 +00:00
{
int currentState ;
/* Get current state */
currentState = SDL_ShowCursor ( SDL_QUERY ) ;
SDLTest_AssertPass ( " Call to SDL_ShowCursor(SDL_QUERY) " ) ;
SDLTest_AssertCheck ( currentState = = SDL_DISABLE | | currentState = = SDL_ENABLE ,
2022-11-30 20:51:59 +00:00
" Validate result is %i or %i, got: %i " , SDL_DISABLE , SDL_ENABLE , currentState ) ;
2015-06-21 15:33:46 +00:00
if ( currentState = = SDL_DISABLE ) {
/* Show the cursor, then hide it again */
_changeCursorVisibility ( SDL_ENABLE ) ;
_changeCursorVisibility ( SDL_DISABLE ) ;
} else if ( currentState = = SDL_ENABLE ) {
/* Hide the cursor, then show it again */
_changeCursorVisibility ( SDL_DISABLE ) ;
_changeCursorVisibility ( SDL_ENABLE ) ;
} else {
return TEST_ABORTED ;
}
return TEST_COMPLETED ;
}
/**
* @ brief Check call to SDL_SetCursor
*
2021-04-01 16:20:04 +00:00
* @ sa http : //wiki.libsdl.org/SDL_SetCursor
2015-06-21 15:33:46 +00:00
*/
2022-11-30 20:51:59 +00:00
int mouse_setCursor ( void * arg )
2015-06-21 15:33:46 +00:00
{
SDL_Cursor * cursor ;
/* Create a cursor */
cursor = _initArrowCursor ( _mouseArrowData ) ;
2022-11-30 20:51:59 +00:00
SDLTest_AssertPass ( " Call to SDL_CreateCursor() " ) ;
SDLTest_AssertCheck ( cursor ! = NULL , " Validate result from SDL_CreateCursor() is not NULL " ) ;
2015-06-21 15:33:46 +00:00
if ( cursor = = NULL ) {
return TEST_ABORTED ;
}
/* Set the arrow cursor */
SDL_SetCursor ( cursor ) ;
SDLTest_AssertPass ( " Call to SDL_SetCursor(cursor) " ) ;
/* Force redraw */
SDL_SetCursor ( NULL ) ;
SDLTest_AssertPass ( " Call to SDL_SetCursor(NULL) " ) ;
/* Free cursor again */
SDL_FreeCursor ( cursor ) ;
SDLTest_AssertPass ( " Call to SDL_FreeCursor() " ) ;
return TEST_COMPLETED ;
}
/**
* @ brief Check call to SDL_GetCursor
*
2021-04-01 16:20:04 +00:00
* @ sa http : //wiki.libsdl.org/SDL_GetCursor
2015-06-21 15:33:46 +00:00
*/
2022-11-30 20:51:59 +00:00
int mouse_getCursor ( void * arg )
2015-06-21 15:33:46 +00:00
{
SDL_Cursor * cursor ;
/* Get current cursor */
cursor = SDL_GetCursor ( ) ;
2022-11-30 20:51:59 +00:00
SDLTest_AssertPass ( " Call to SDL_GetCursor() " ) ;
SDLTest_AssertCheck ( cursor ! = NULL , " Validate result from SDL_GetCursor() is not NULL " ) ;
2015-06-21 15:33:46 +00:00
return TEST_COMPLETED ;
}
/**
* @ brief Check call to SDL_GetRelativeMouseMode and SDL_SetRelativeMouseMode
*
2021-04-01 16:20:04 +00:00
* @ sa http : //wiki.libsdl.org/SDL_GetRelativeMouseMode
* @ sa http : //wiki.libsdl.org/SDL_SetRelativeMouseMode
2015-06-21 15:33:46 +00:00
*/
2022-11-30 20:51:59 +00:00
int mouse_getSetRelativeMouseMode ( void * arg )
2015-06-21 15:33:46 +00:00
{
int result ;
2022-11-30 20:51:59 +00:00
int i ;
2015-06-21 15:33:46 +00:00
SDL_bool initialState ;
SDL_bool currentState ;
/* Capture original state so we can revert back to it later */
initialState = SDL_GetRelativeMouseMode ( ) ;
2022-11-30 20:51:59 +00:00
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseMode() " ) ;
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
/* Repeat twice to check D->D transition */
for ( i = 0 ; i < 2 ; i + + ) {
/* Disable - should always be supported */
result = SDL_SetRelativeMouseMode ( SDL_FALSE ) ;
SDLTest_AssertPass ( " Call to SDL_SetRelativeMouseMode(FALSE) " ) ;
SDLTest_AssertCheck ( result = = 0 , " Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i " , result ) ;
currentState = SDL_GetRelativeMouseMode ( ) ;
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseMode() " ) ;
SDLTest_AssertCheck ( currentState = = SDL_FALSE , " Validate current state is FALSE, got: %i " , currentState ) ;
}
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
/* Repeat twice to check D->E->E transition */
for ( i = 0 ; i < 2 ; i + + ) {
/* Enable - may not be supported */
result = SDL_SetRelativeMouseMode ( SDL_TRUE ) ;
SDLTest_AssertPass ( " Call to SDL_SetRelativeMouseMode(TRUE) " ) ;
if ( result ! = - 1 ) {
2015-06-21 15:33:46 +00:00
SDLTest_AssertCheck ( result = = 0 , " Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i " , result ) ;
2022-11-30 20:51:59 +00:00
currentState = SDL_GetRelativeMouseMode ( ) ;
2015-06-21 15:33:46 +00:00
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseMode() " ) ;
SDLTest_AssertCheck ( currentState = = SDL_TRUE , " Validate current state is TRUE, got: %i " , currentState ) ;
}
2022-11-30 20:51:59 +00:00
}
2015-06-21 15:33:46 +00:00
/* Disable to check E->D transition */
2022-11-30 20:51:59 +00:00
result = SDL_SetRelativeMouseMode ( SDL_FALSE ) ;
SDLTest_AssertPass ( " Call to SDL_SetRelativeMouseMode(FALSE) " ) ;
SDLTest_AssertCheck ( result = = 0 , " Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i " , result ) ;
2015-06-21 15:33:46 +00:00
currentState = SDL_GetRelativeMouseMode ( ) ;
2022-11-30 20:51:59 +00:00
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseMode() " ) ;
SDLTest_AssertCheck ( currentState = = SDL_FALSE , " Validate current state is FALSE, got: %i " , currentState ) ;
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
/* Revert to original state - ignore result */
result = SDL_SetRelativeMouseMode ( initialState ) ;
2015-06-21 15:33:46 +00:00
return TEST_COMPLETED ;
}
# define MOUSE_TESTWINDOW_WIDTH 320
# define MOUSE_TESTWINDOW_HEIGHT 200
/**
* Creates a test window
*/
SDL_Window * _createMouseSuiteTestWindow ( )
{
2022-11-30 20:51:59 +00:00
int posX = 100 , posY = 100 , width = MOUSE_TESTWINDOW_WIDTH , height = MOUSE_TESTWINDOW_HEIGHT ;
SDL_Window * window ;
window = SDL_CreateWindow ( " mouse_createMouseSuiteTestWindow " , posX , posY , width , height , 0 ) ;
SDLTest_AssertPass ( " SDL_CreateWindow() " ) ;
SDLTest_AssertCheck ( window ! = NULL , " Check SDL_CreateWindow result " ) ;
return window ;
2015-06-21 15:33:46 +00:00
}
/*
* Destroy test window
*/
void _destroyMouseSuiteTestWindow ( SDL_Window * window )
{
2023-11-10 14:30:56 +00:00
if ( window ) {
2022-11-30 20:51:59 +00:00
SDL_DestroyWindow ( window ) ;
window = NULL ;
SDLTest_AssertPass ( " SDL_DestroyWindow() " ) ;
}
2015-06-21 15:33:46 +00:00
}
/**
* @ brief Check call to SDL_WarpMouseInWindow
*
2021-04-01 16:20:04 +00:00
* @ sa http : //wiki.libsdl.org/SDL_WarpMouseInWindow
2015-06-21 15:33:46 +00:00
*/
2022-11-30 20:51:59 +00:00
int mouse_warpMouseInWindow ( void * arg )
2015-06-21 15:33:46 +00:00
{
const int w = MOUSE_TESTWINDOW_WIDTH , h = MOUSE_TESTWINDOW_HEIGHT ;
int numPositions = 6 ;
2017-08-14 04:15:44 +00:00
int xPositions [ 6 ] ;
int yPositions [ 6 ] ;
2015-06-21 15:33:46 +00:00
int x , y , i , j ;
SDL_Window * window ;
2017-08-14 04:15:44 +00:00
xPositions [ 0 ] = - 1 ;
xPositions [ 1 ] = 0 ;
xPositions [ 2 ] = 1 ;
2022-11-30 20:51:59 +00:00
xPositions [ 3 ] = w - 1 ;
2017-08-14 04:15:44 +00:00
xPositions [ 4 ] = w ;
2022-11-30 20:51:59 +00:00
xPositions [ 5 ] = w + 1 ;
2017-08-14 04:15:44 +00:00
yPositions [ 0 ] = - 1 ;
yPositions [ 1 ] = 0 ;
yPositions [ 2 ] = 1 ;
2022-11-30 20:51:59 +00:00
yPositions [ 3 ] = h - 1 ;
2017-08-14 04:15:44 +00:00
yPositions [ 4 ] = h ;
2022-11-30 20:51:59 +00:00
yPositions [ 5 ] = h + 1 ;
2015-06-21 15:33:46 +00:00
/* Create test window */
window = _createMouseSuiteTestWindow ( ) ;
2023-11-10 14:30:56 +00:00
if ( ! window ) {
2022-11-30 20:51:59 +00:00
return TEST_ABORTED ;
2022-11-27 16:38:43 +00:00
}
2015-06-21 15:33:46 +00:00
/* Mouse to random position inside window */
2022-11-30 20:51:59 +00:00
x = SDLTest_RandomIntegerInRange ( 1 , w - 1 ) ;
y = SDLTest_RandomIntegerInRange ( 1 , h - 1 ) ;
2015-06-21 15:33:46 +00:00
SDL_WarpMouseInWindow ( window , x , y ) ;
SDLTest_AssertPass ( " SDL_WarpMouseInWindow(...,%i,%i) " , x , y ) ;
2022-11-30 20:51:59 +00:00
/* Same position again */
2015-06-21 15:33:46 +00:00
SDL_WarpMouseInWindow ( window , x , y ) ;
SDLTest_AssertPass ( " SDL_WarpMouseInWindow(...,%i,%i) " , x , y ) ;
/* Mouse to various boundary positions */
2022-11-30 20:51:59 +00:00
for ( i = 0 ; i < numPositions ; i + + ) {
for ( j = 0 ; j < numPositions ; j + + ) {
x = xPositions [ i ] ;
y = yPositions [ j ] ;
SDL_WarpMouseInWindow ( window , x , y ) ;
SDLTest_AssertPass ( " SDL_WarpMouseInWindow(...,%i,%i) " , x , y ) ;
/* TODO: add tracking of events and check that each call generates a mouse motion event */
SDL_PumpEvents ( ) ;
SDLTest_AssertPass ( " SDL_PumpEvents() " ) ;
}
2015-06-21 15:33:46 +00:00
}
2022-11-30 20:51:59 +00:00
/* Clean up test window */
2015-06-21 15:33:46 +00:00
_destroyMouseSuiteTestWindow ( window ) ;
return TEST_COMPLETED ;
}
/**
* @ brief Check call to SDL_GetMouseFocus
*
2021-04-01 16:20:04 +00:00
* @ sa http : //wiki.libsdl.org/SDL_GetMouseFocus
2015-06-21 15:33:46 +00:00
*/
2022-11-30 20:51:59 +00:00
int mouse_getMouseFocus ( void * arg )
2015-06-21 15:33:46 +00:00
{
const int w = MOUSE_TESTWINDOW_WIDTH , h = MOUSE_TESTWINDOW_HEIGHT ;
int x , y ;
SDL_Window * window ;
SDL_Window * focusWindow ;
2023-10-02 23:29:02 +00:00
const SDL_bool video_driver_is_wayland = ! SDL_strcmp ( SDL_GetCurrentVideoDriver ( ) , " wayland " ) ;
2015-06-21 15:33:46 +00:00
/* Get focus - focus non-deterministic */
focusWindow = SDL_GetMouseFocus ( ) ;
SDLTest_AssertPass ( " SDL_GetMouseFocus() " ) ;
2022-11-30 20:51:59 +00:00
/* Create test window */
2015-06-21 15:33:46 +00:00
window = _createMouseSuiteTestWindow ( ) ;
2023-11-10 14:30:56 +00:00
if ( ! window ) {
2022-11-27 16:38:43 +00:00
return TEST_ABORTED ;
}
2015-06-21 15:33:46 +00:00
2023-10-02 23:29:02 +00:00
/* Wayland explicitly disallows warping the mouse pointer, so this test must be skipped. */
if ( ! video_driver_is_wayland ) {
/* Mouse to random position inside window */
x = SDLTest_RandomIntegerInRange ( 1 , w - 1 ) ;
y = SDLTest_RandomIntegerInRange ( 1 , h - 1 ) ;
SDL_WarpMouseInWindow ( window , x , y ) ;
SDLTest_AssertPass ( " SDL_WarpMouseInWindow(...,%i,%i) " , x , y ) ;
/* Pump events to update focus state */
SDL_Delay ( 100 ) ;
SDL_PumpEvents ( ) ;
SDLTest_AssertPass ( " SDL_PumpEvents() " ) ;
/* Get focus with explicit window setup - focus deterministic */
focusWindow = SDL_GetMouseFocus ( ) ;
SDLTest_AssertPass ( " SDL_GetMouseFocus() " ) ;
SDLTest_AssertCheck ( focusWindow ! = NULL , " Check returned window value is not NULL " ) ;
SDLTest_AssertCheck ( focusWindow = = window , " Check returned window value is test window " ) ;
/* Mouse to random position outside window */
x = SDLTest_RandomIntegerInRange ( - 9 , - 1 ) ;
y = SDLTest_RandomIntegerInRange ( - 9 , - 1 ) ;
SDL_WarpMouseInWindow ( window , x , y ) ;
SDLTest_AssertPass ( " SDL_WarpMouseInWindow(...,%i,%i) " , x , y ) ;
} else {
SDLTest_Log ( " Skipping mouse warp focus tests: Wayland does not support warping the mouse pointer " ) ;
}
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
/* Clean up test window */
2015-06-21 15:33:46 +00:00
_destroyMouseSuiteTestWindow ( window ) ;
/* Pump events to update focus state */
SDL_PumpEvents ( ) ;
SDLTest_AssertPass ( " SDL_PumpEvents() " ) ;
2022-11-30 20:51:59 +00:00
/* Get focus for non-existing window */
2015-06-21 15:33:46 +00:00
focusWindow = SDL_GetMouseFocus ( ) ;
SDLTest_AssertPass ( " SDL_GetMouseFocus() " ) ;
2022-11-30 20:51:59 +00:00
SDLTest_AssertCheck ( focusWindow = = NULL , " Check returned window value is NULL " ) ;
2015-06-21 15:33:46 +00:00
return TEST_COMPLETED ;
}
/* ================= Test References ================== */
/* Mouse test cases */
2022-11-30 20:51:59 +00:00
static const SDLTest_TestCaseReference mouseTest1 = {
( SDLTest_TestCaseFp ) mouse_getMouseState , " mouse_getMouseState " , " Check call to SDL_GetMouseState " , TEST_ENABLED
} ;
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
static const SDLTest_TestCaseReference mouseTest2 = {
( SDLTest_TestCaseFp ) mouse_getRelativeMouseState , " mouse_getRelativeMouseState " , " Check call to SDL_GetRelativeMouseState " , TEST_ENABLED
} ;
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
static const SDLTest_TestCaseReference mouseTest3 = {
( SDLTest_TestCaseFp ) mouse_createFreeCursor , " mouse_createFreeCursor " , " Check call to SDL_CreateCursor and SDL_FreeCursor " , TEST_ENABLED
} ;
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
static const SDLTest_TestCaseReference mouseTest4 = {
( SDLTest_TestCaseFp ) mouse_showCursor , " mouse_showCursor " , " Check call to SDL_ShowCursor " , TEST_ENABLED
} ;
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
static const SDLTest_TestCaseReference mouseTest5 = {
( SDLTest_TestCaseFp ) mouse_setCursor , " mouse_setCursor " , " Check call to SDL_SetCursor " , TEST_ENABLED
} ;
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
static const SDLTest_TestCaseReference mouseTest6 = {
( SDLTest_TestCaseFp ) mouse_getCursor , " mouse_getCursor " , " Check call to SDL_GetCursor " , TEST_ENABLED
} ;
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
static const SDLTest_TestCaseReference mouseTest7 = {
( SDLTest_TestCaseFp ) mouse_warpMouseInWindow , " mouse_warpMouseInWindow " , " Check call to SDL_WarpMouseInWindow " , TEST_ENABLED
} ;
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
static const SDLTest_TestCaseReference mouseTest8 = {
( SDLTest_TestCaseFp ) mouse_getMouseFocus , " mouse_getMouseFocus " , " Check call to SDL_getMouseFocus " , TEST_ENABLED
} ;
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
static const SDLTest_TestCaseReference mouseTest9 = {
( SDLTest_TestCaseFp ) mouse_createFreeColorCursor , " mouse_createFreeColorCursor " , " Check call to SDL_CreateColorCursor and SDL_FreeCursor " , TEST_ENABLED
} ;
2015-06-21 15:33:46 +00:00
2022-11-30 20:51:59 +00:00
static const SDLTest_TestCaseReference mouseTest10 = {
( SDLTest_TestCaseFp ) mouse_getSetRelativeMouseMode , " mouse_getSetRelativeMouseMode " , " Check call to SDL_GetRelativeMouseMode and SDL_SetRelativeMouseMode " , TEST_ENABLED
} ;
2015-06-21 15:33:46 +00:00
/* Sequence of Mouse test cases */
static const SDLTest_TestCaseReference * mouseTests [ ] = {
& mouseTest1 , & mouseTest2 , & mouseTest3 , & mouseTest4 , & mouseTest5 , & mouseTest6 ,
& mouseTest7 , & mouseTest8 , & mouseTest9 , & mouseTest10 , NULL
} ;
/* Mouse test suite (global) */
SDLTest_TestSuiteReference mouseTestSuite = {
" Mouse " ,
NULL ,
mouseTests ,
NULL
} ;