2015-06-21 09:33:46 -06:00
/**
* Mouse test suite
*/
# include <limits.h>
2022-12-29 20:31:12 -07:00
# include <float.h>
2015-06-21 09:33:46 -06:00
2022-11-26 21:43:38 -07:00
# include <SDL3/SDL.h>
# include <SDL3/SDL_test.h>
2023-03-08 08:12:45 -07:00
# include "testautomation_suites.h"
2023-01-26 11:23:57 -07:00
# include "testautomation_images.h"
2015-06-21 09:33:46 -06:00
/* ================= Test Case Implementation ================== */
/* Test case functions */
/* Helper to evaluate state returned from SDL_GetMouseState */
2022-12-29 14:58:16 -07:00
static int mouseStateCheck ( Uint32 state )
2015-06-21 09:33:46 -06:00
{
2022-11-30 13:51:59 -07: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 09:33:46 -06:00
}
/**
2023-11-06 08:26:06 -07:00
* Check call to SDL_GetMouseState
2015-06-21 09:33:46 -06:00
*
*/
2023-03-08 08:12:45 -07:00
static int mouse_getMouseState ( void * arg )
2015-06-21 09:33:46 -06:00
{
2022-12-29 20:31:12 -07:00
float x ;
float y ;
2022-11-30 13:51:59 -07:00
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) " ) ;
2022-12-29 14:58:16 -07:00
SDLTest_AssertCheck ( mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
2022-11-30 13:51:59 -07:00
/* Case where x pointer is not NULL */
2023-01-08 05:28:10 -07:00
x = - FLT_MAX ;
2022-11-30 13:51:59 -07:00
state = SDL_GetMouseState ( & x , NULL ) ;
SDLTest_AssertPass ( " Call to SDL_GetMouseState(&x, NULL) " ) ;
2023-01-08 05:28:10 -07:00
SDLTest_AssertCheck ( x > - FLT_MAX , " Validate that value of x is > -FLT_MAX, got: %g " , x ) ;
2022-12-29 14:58:16 -07:00
SDLTest_AssertCheck ( mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
2022-11-30 13:51:59 -07:00
/* Case where y pointer is not NULL */
2023-01-08 05:28:10 -07:00
y = - FLT_MAX ;
2022-11-30 13:51:59 -07:00
state = SDL_GetMouseState ( NULL , & y ) ;
SDLTest_AssertPass ( " Call to SDL_GetMouseState(NULL, &y) " ) ;
2023-01-08 05:28:10 -07:00
SDLTest_AssertCheck ( y > - FLT_MAX , " Validate that value of y is > -FLT_MAX, got: %g " , y ) ;
2022-12-29 14:58:16 -07:00
SDLTest_AssertCheck ( mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
2022-11-30 13:51:59 -07:00
/* Case where x and y pointer is not NULL */
2023-01-08 05:28:10 -07:00
x = - FLT_MAX ;
y = - FLT_MAX ;
2022-11-30 13:51:59 -07:00
state = SDL_GetMouseState ( & x , & y ) ;
SDLTest_AssertPass ( " Call to SDL_GetMouseState(&x, &y) " ) ;
2023-01-08 05:28:10 -07:00
SDLTest_AssertCheck ( x > - FLT_MAX , " Validate that value of x is > -FLT_MAX, got: %g " , x ) ;
SDLTest_AssertCheck ( y > - FLT_MAX , " Validate that value of y is > -FLT_MAX, got: %g " , y ) ;
2022-12-29 14:58:16 -07:00
SDLTest_AssertCheck ( mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
2022-11-30 13:51:59 -07:00
return TEST_COMPLETED ;
2015-06-21 09:33:46 -06:00
}
/**
2023-11-06 08:26:06 -07:00
* Check call to SDL_GetRelativeMouseState
2015-06-21 09:33:46 -06:00
*
*/
2023-03-08 08:12:45 -07:00
static int mouse_getRelativeMouseState ( void * arg )
2015-06-21 09:33:46 -06:00
{
2022-12-29 20:31:12 -07:00
float x ;
float y ;
2022-11-30 13:51:59 -07:00
Uint32 state ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07: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) " ) ;
2022-12-29 14:58:16 -07:00
SDLTest_AssertCheck ( mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
2022-11-30 13:51:59 -07:00
/* Case where x pointer is not NULL */
2023-01-08 05:28:10 -07:00
x = - FLT_MAX ;
2022-11-30 13:51:59 -07:00
state = SDL_GetRelativeMouseState ( & x , NULL ) ;
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseState(&x, NULL) " ) ;
2023-01-08 05:28:10 -07:00
SDLTest_AssertCheck ( x > - FLT_MAX , " Validate that value of x is > -FLT_MAX, got: %g " , x ) ;
2022-12-29 14:58:16 -07:00
SDLTest_AssertCheck ( mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
2022-11-30 13:51:59 -07:00
/* Case where y pointer is not NULL */
2023-01-08 05:28:10 -07:00
y = - FLT_MAX ;
2022-11-30 13:51:59 -07:00
state = SDL_GetRelativeMouseState ( NULL , & y ) ;
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseState(NULL, &y) " ) ;
2023-01-08 05:28:10 -07:00
SDLTest_AssertCheck ( y > - FLT_MAX , " Validate that value of y is > -FLT_MAX, got: %g " , y ) ;
2022-12-29 14:58:16 -07:00
SDLTest_AssertCheck ( mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
2022-11-30 13:51:59 -07:00
/* Case where x and y pointer is not NULL */
2023-01-08 05:28:10 -07:00
x = - FLT_MAX ;
y = - FLT_MAX ;
2022-11-30 13:51:59 -07:00
state = SDL_GetRelativeMouseState ( & x , & y ) ;
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseState(&x, &y) " ) ;
2023-01-08 05:28:10 -07:00
SDLTest_AssertCheck ( x > - FLT_MAX , " Validate that value of x is > -FLT_MAX, got: %g " , x ) ;
SDLTest_AssertCheck ( y > - FLT_MAX , " Validate that value of y is > -FLT_MAX, got: %g " , y ) ;
2022-12-29 14:58:16 -07:00
SDLTest_AssertCheck ( mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
2022-11-30 13:51:59 -07:00
return TEST_COMPLETED ;
}
2015-06-21 09:33:46 -06:00
/* XPM definition of mouse Cursor */
2022-12-29 14:58:16 -07:00
static const char * g_mouseArrowData [ ] = {
2022-11-30 13:51:59 -07: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 09:33:46 -06:00
} ;
/* Helper that creates a new mouse cursor from an XPM */
2022-12-29 14:58:16 -07:00
static SDL_Cursor * initArrowCursor ( const char * image [ ] )
2015-06-21 09:33:46 -06:00
{
2022-11-30 13:51:59 -07: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 09:33:46 -06:00
}
2022-11-30 13:51:59 -07:00
cursor = SDL_CreateCursor ( data , mask , 32 , 32 , 0 , 0 ) ;
return cursor ;
2015-06-21 09:33:46 -06:00
}
/**
2023-11-06 08:26:06 -07:00
* Check call to SDL_CreateCursor and SDL_DestroyCursor
2015-06-21 09:33:46 -06:00
*
2023-02-01 16:21:53 -07:00
* \ sa SDL_CreateCursor
* \ sa SDL_DestroyCursor
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int mouse_createFreeCursor ( void * arg )
2015-06-21 09:33:46 -06:00
{
SDL_Cursor * cursor ;
/* Create a cursor */
2022-12-29 14:58:16 -07:00
cursor = initArrowCursor ( g_mouseArrowData ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertPass ( " Call to SDL_CreateCursor() " ) ;
SDLTest_AssertCheck ( cursor ! = NULL , " Validate result from SDL_CreateCursor() is not NULL " ) ;
2015-06-21 09:33:46 -06:00
if ( cursor = = NULL ) {
return TEST_ABORTED ;
}
/* Free cursor again */
2022-12-29 16:07:59 -07:00
SDL_DestroyCursor ( cursor ) ;
SDLTest_AssertPass ( " Call to SDL_DestroyCursor() " ) ;
2015-06-21 09:33:46 -06:00
return TEST_COMPLETED ;
}
/**
2023-11-06 08:26:06 -07:00
* Check call to SDL_CreateColorCursor and SDL_DestroyCursor
2015-06-21 09:33:46 -06:00
*
2023-02-01 16:21:53 -07:00
* \ sa SDL_CreateColorCursor
* \ sa SDL_DestroyCursor
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int mouse_createFreeColorCursor ( void * arg )
2015-06-21 09:33:46 -06: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 09:38:43 -07:00
if ( face = = NULL ) {
return TEST_ABORTED ;
}
2015-06-21 09:33:46 -06:00
/* Create a color cursor from surface */
cursor = SDL_CreateColorCursor ( face , 0 , 0 ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertPass ( " Call to SDL_CreateColorCursor() " ) ;
SDLTest_AssertCheck ( cursor ! = NULL , " Validate result from SDL_CreateColorCursor() is not NULL " ) ;
2015-06-21 09:33:46 -06:00
if ( cursor = = NULL ) {
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( face ) ;
2015-06-21 09:33:46 -06:00
return TEST_ABORTED ;
}
/* Free cursor again */
2022-12-29 16:07:59 -07:00
SDL_DestroyCursor ( cursor ) ;
SDLTest_AssertPass ( " Call to SDL_DestroyCursor() " ) ;
2015-06-21 09:33:46 -06:00
/* Clean up */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( face ) ;
2015-06-21 09:33:46 -06:00
return TEST_COMPLETED ;
}
/* Helper that changes cursor visibility */
2022-12-29 14:58:16 -07:00
static void changeCursorVisibility ( SDL_bool state )
2015-06-21 09:33:46 -06:00
{
2022-12-28 18:06:38 -07:00
SDL_bool newState ;
if ( state ) {
SDL_ShowCursor ( ) ;
} else {
SDL_HideCursor ( ) ;
}
SDLTest_AssertPass ( " Call to %s " , state ? " SDL_ShowCursor() " : " SDL_HideCursor() " ) ;
newState = SDL_CursorVisible ( ) ;
SDLTest_AssertPass ( " Call to SDL_CursorVisible() " ) ;
SDLTest_AssertCheck ( state = = newState , " Validate new state, expected: %s, got: %s " ,
state ? " SDL_TRUE " : " SDL_FALSE " ,
newState ? " SDL_TRUE " : " SDL_FALSE " ) ;
2015-06-21 09:33:46 -06:00
}
/**
2023-11-06 08:26:06 -07:00
* Check call to SDL_ShowCursor
2015-06-21 09:33:46 -06:00
*
2023-02-01 16:21:53 -07:00
* \ sa SDL_ShowCursor
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int mouse_showCursor ( void * arg )
2015-06-21 09:33:46 -06:00
{
2022-12-28 18:06:38 -07:00
SDL_bool currentState ;
2015-06-21 09:33:46 -06:00
/* Get current state */
2022-12-28 18:06:38 -07:00
currentState = SDL_CursorVisible ( ) ;
SDLTest_AssertPass ( " Call to SDL_CursorVisible() " ) ;
if ( currentState ) {
2015-06-21 09:33:46 -06:00
/* Hide the cursor, then show it again */
2022-12-29 14:58:16 -07:00
changeCursorVisibility ( SDL_FALSE ) ;
changeCursorVisibility ( SDL_TRUE ) ;
2015-06-21 09:33:46 -06:00
} else {
2022-12-28 18:06:38 -07:00
/* Show the cursor, then hide it again */
2022-12-29 14:58:16 -07:00
changeCursorVisibility ( SDL_TRUE ) ;
changeCursorVisibility ( SDL_FALSE ) ;
2015-06-21 09:33:46 -06:00
}
return TEST_COMPLETED ;
}
/**
2023-11-06 08:26:06 -07:00
* Check call to SDL_SetCursor
2015-06-21 09:33:46 -06:00
*
2023-02-01 16:21:53 -07:00
* \ sa SDL_SetCursor
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int mouse_setCursor ( void * arg )
2015-06-21 09:33:46 -06:00
{
SDL_Cursor * cursor ;
/* Create a cursor */
2022-12-29 14:58:16 -07:00
cursor = initArrowCursor ( g_mouseArrowData ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertPass ( " Call to SDL_CreateCursor() " ) ;
SDLTest_AssertCheck ( cursor ! = NULL , " Validate result from SDL_CreateCursor() is not NULL " ) ;
2015-06-21 09:33:46 -06: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 */
2022-12-29 16:07:59 -07:00
SDL_DestroyCursor ( cursor ) ;
SDLTest_AssertPass ( " Call to SDL_DestroyCursor() " ) ;
2015-06-21 09:33:46 -06:00
return TEST_COMPLETED ;
}
/**
2023-11-06 08:26:06 -07:00
* Check call to SDL_GetCursor
2015-06-21 09:33:46 -06:00
*
2023-02-01 16:21:53 -07:00
* \ sa SDL_GetCursor
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int mouse_getCursor ( void * arg )
2015-06-21 09:33:46 -06:00
{
SDL_Cursor * cursor ;
/* Get current cursor */
cursor = SDL_GetCursor ( ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertPass ( " Call to SDL_GetCursor() " ) ;
SDLTest_AssertCheck ( cursor ! = NULL , " Validate result from SDL_GetCursor() is not NULL " ) ;
2015-06-21 09:33:46 -06:00
return TEST_COMPLETED ;
}
/**
2023-11-06 08:26:06 -07:00
* Check call to SDL_GetRelativeMouseMode and SDL_SetRelativeMouseMode
2015-06-21 09:33:46 -06:00
*
2023-02-01 16:21:53 -07:00
* \ sa SDL_GetRelativeMouseMode
* \ sa SDL_SetRelativeMouseMode
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int mouse_getSetRelativeMouseMode ( void * arg )
2015-06-21 09:33:46 -06:00
{
int result ;
2022-11-30 13:51:59 -07:00
int i ;
2015-06-21 09:33:46 -06:00
SDL_bool initialState ;
SDL_bool currentState ;
/* Capture original state so we can revert back to it later */
initialState = SDL_GetRelativeMouseMode ( ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseMode() " ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07: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 09:33:46 -06:00
2022-11-30 13:51:59 -07: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 09:33:46 -06:00
SDLTest_AssertCheck ( result = = 0 , " Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i " , result ) ;
2022-11-30 13:51:59 -07:00
currentState = SDL_GetRelativeMouseMode ( ) ;
2015-06-21 09:33:46 -06:00
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseMode() " ) ;
SDLTest_AssertCheck ( currentState = = SDL_TRUE , " Validate current state is TRUE, got: %i " , currentState ) ;
}
2022-11-30 13:51:59 -07:00
}
2015-06-21 09:33:46 -06:00
/* Disable to check E->D transition */
2022-11-30 13:51:59 -07: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 09:33:46 -06:00
currentState = SDL_GetRelativeMouseMode ( ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertPass ( " Call to SDL_GetRelativeMouseMode() " ) ;
SDLTest_AssertCheck ( currentState = = SDL_FALSE , " Validate current state is FALSE, got: %i " , currentState ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Revert to original state - ignore result */
result = SDL_SetRelativeMouseMode ( initialState ) ;
2015-06-21 09:33:46 -06:00
return TEST_COMPLETED ;
}
# define MOUSE_TESTWINDOW_WIDTH 320
# define MOUSE_TESTWINDOW_HEIGHT 200
/**
* Creates a test window
*/
2023-03-08 08:12:45 -07:00
static SDL_Window * createMouseSuiteTestWindow ( void )
2015-06-21 09:33:46 -06:00
{
2023-03-05 15:44:38 -07:00
int width = MOUSE_TESTWINDOW_WIDTH , height = MOUSE_TESTWINDOW_HEIGHT ;
2022-11-30 13:51:59 -07:00
SDL_Window * window ;
2023-03-05 15:44:38 -07:00
window = SDL_CreateWindow ( " mousecreateMouseSuiteTestWindow " , width , height , 0 ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertPass ( " SDL_CreateWindow() " ) ;
SDLTest_AssertCheck ( window ! = NULL , " Check SDL_CreateWindow result " ) ;
return window ;
2015-06-21 09:33:46 -06:00
}
2023-02-01 16:21:53 -07:00
/**
2015-06-21 09:33:46 -06:00
* Destroy test window
*/
2022-12-29 14:58:16 -07:00
static void destroyMouseSuiteTestWindow ( SDL_Window * window )
2015-06-21 09:33:46 -06:00
{
2022-11-30 13:51:59 -07:00
if ( window ! = NULL ) {
SDL_DestroyWindow ( window ) ;
window = NULL ;
SDLTest_AssertPass ( " SDL_DestroyWindow() " ) ;
}
2015-06-21 09:33:46 -06:00
}
/**
2023-11-06 08:26:06 -07:00
* Check call to SDL_WarpMouseInWindow
2015-06-21 09:33:46 -06:00
*
2023-02-01 16:21:53 -07:00
* \ sa SDL_WarpMouseInWindow
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int mouse_warpMouseInWindow ( void * arg )
2015-06-21 09:33:46 -06:00
{
const int w = MOUSE_TESTWINDOW_WIDTH , h = MOUSE_TESTWINDOW_HEIGHT ;
int numPositions = 6 ;
2022-12-29 20:31:12 -07:00
float xPositions [ 6 ] ;
float yPositions [ 6 ] ;
float x , y ;
int i , j ;
2015-06-21 09:33:46 -06:00
SDL_Window * window ;
2017-08-13 22:15:44 -06:00
xPositions [ 0 ] = - 1 ;
xPositions [ 1 ] = 0 ;
xPositions [ 2 ] = 1 ;
2022-12-29 20:31:12 -07:00
xPositions [ 3 ] = ( float ) w - 1 ;
xPositions [ 4 ] = ( float ) w ;
xPositions [ 5 ] = ( float ) w + 1 ;
2017-08-13 22:15:44 -06:00
yPositions [ 0 ] = - 1 ;
yPositions [ 1 ] = 0 ;
yPositions [ 2 ] = 1 ;
2022-12-29 20:31:12 -07:00
yPositions [ 3 ] = ( float ) h - 1 ;
yPositions [ 4 ] = ( float ) h ;
yPositions [ 5 ] = ( float ) h + 1 ;
2015-06-21 09:33:46 -06:00
/* Create test window */
2022-12-29 14:58:16 -07:00
window = createMouseSuiteTestWindow ( ) ;
2022-11-27 09:38:43 -07:00
if ( window = = NULL ) {
2022-11-30 13:51:59 -07:00
return TEST_ABORTED ;
2022-11-27 09:38:43 -07:00
}
2015-06-21 09:33:46 -06:00
/* Mouse to random position inside window */
2022-12-29 20:31:12 -07:00
x = ( float ) SDLTest_RandomIntegerInRange ( 1 , w - 1 ) ;
y = ( float ) SDLTest_RandomIntegerInRange ( 1 , h - 1 ) ;
2015-06-21 09:33:46 -06:00
SDL_WarpMouseInWindow ( window , x , y ) ;
2022-12-29 20:31:12 -07:00
SDLTest_AssertPass ( " SDL_WarpMouseInWindow(...,%.f,%.f) " , x , y ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Same position again */
2015-06-21 09:33:46 -06:00
SDL_WarpMouseInWindow ( window , x , y ) ;
2022-12-29 20:31:12 -07:00
SDLTest_AssertPass ( " SDL_WarpMouseInWindow(...,%.f,%.f) " , x , y ) ;
2015-06-21 09:33:46 -06:00
/* Mouse to various boundary positions */
2022-11-30 13:51:59 -07:00
for ( i = 0 ; i < numPositions ; i + + ) {
for ( j = 0 ; j < numPositions ; j + + ) {
x = xPositions [ i ] ;
y = yPositions [ j ] ;
SDL_WarpMouseInWindow ( window , x , y ) ;
2022-12-29 20:31:12 -07:00
SDLTest_AssertPass ( " SDL_WarpMouseInWindow(...,%.f,%.f) " , x , y ) ;
2022-11-30 13:51:59 -07:00
/* TODO: add tracking of events and check that each call generates a mouse motion event */
SDL_PumpEvents ( ) ;
SDLTest_AssertPass ( " SDL_PumpEvents() " ) ;
}
2015-06-21 09:33:46 -06:00
}
2022-11-30 13:51:59 -07:00
/* Clean up test window */
2022-12-29 14:58:16 -07:00
destroyMouseSuiteTestWindow ( window ) ;
2015-06-21 09:33:46 -06:00
return TEST_COMPLETED ;
}
/**
2023-11-06 08:26:06 -07:00
* Check call to SDL_GetMouseFocus
2015-06-21 09:33:46 -06:00
*
2023-02-01 16:21:53 -07:00
* \ sa SDL_GetMouseFocus
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int mouse_getMouseFocus ( void * arg )
2015-06-21 09:33:46 -06:00
{
const int w = MOUSE_TESTWINDOW_WIDTH , h = MOUSE_TESTWINDOW_HEIGHT ;
2022-12-29 20:31:12 -07:00
float x , y ;
2015-06-21 09:33:46 -06:00
SDL_Window * window ;
SDL_Window * focusWindow ;
2023-10-02 17:29:02 -06:00
const SDL_bool video_driver_is_wayland = ! SDL_strcmp ( SDL_GetCurrentVideoDriver ( ) , " wayland " ) ;
2015-06-21 09:33:46 -06:00
/* Get focus - focus non-deterministic */
focusWindow = SDL_GetMouseFocus ( ) ;
SDLTest_AssertPass ( " SDL_GetMouseFocus() " ) ;
2022-11-30 13:51:59 -07:00
/* Create test window */
2022-12-29 14:58:16 -07:00
window = createMouseSuiteTestWindow ( ) ;
2022-11-27 09:38:43 -07:00
if ( window = = NULL ) {
return TEST_ABORTED ;
}
2015-06-21 09:33:46 -06:00
2023-10-02 17:29:02 -06: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 = ( float ) SDLTest_RandomIntegerInRange ( 1 , w - 1 ) ;
y = ( float ) SDLTest_RandomIntegerInRange ( 1 , h - 1 ) ;
SDL_WarpMouseInWindow ( window , x , y ) ;
SDLTest_AssertPass ( " SDL_WarpMouseInWindow(...,%.f,%.f) " , 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 = ( float ) SDLTest_RandomIntegerInRange ( - 9 , - 1 ) ;
y = ( float ) SDLTest_RandomIntegerInRange ( - 9 , - 1 ) ;
SDL_WarpMouseInWindow ( window , x , y ) ;
SDLTest_AssertPass ( " SDL_WarpMouseInWindow(...,%.f,%.f) " , x , y ) ;
} else {
2023-10-02 17:47:39 -06:00
SDLTest_Log ( " Skipping mouse warp focus tests: Wayland does not support warping the mouse pointer " ) ;
2023-10-02 17:29:02 -06:00
}
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Clean up test window */
2022-12-29 14:58:16 -07:00
destroyMouseSuiteTestWindow ( window ) ;
2015-06-21 09:33:46 -06:00
/* Pump events to update focus state */
SDL_PumpEvents ( ) ;
SDLTest_AssertPass ( " SDL_PumpEvents() " ) ;
2022-11-30 13:51:59 -07:00
/* Get focus for non-existing window */
2015-06-21 09:33:46 -06:00
focusWindow = SDL_GetMouseFocus ( ) ;
SDLTest_AssertPass ( " SDL_GetMouseFocus() " ) ;
2022-11-30 13:51:59 -07:00
SDLTest_AssertCheck ( focusWindow = = NULL , " Check returned window value is NULL " ) ;
2015-06-21 09:33:46 -06:00
return TEST_COMPLETED ;
}
2022-11-23 12:28:34 -07:00
/**
2023-11-06 08:26:06 -07:00
* Check call to SDL_GetDefaultCursor
2022-11-23 12:28:34 -07:00
*
2023-02-01 16:21:53 -07:00
* \ sa SDL_GetDefaultCursor
2022-11-23 12:28:34 -07:00
*/
2023-03-08 08:12:45 -07:00
static int mouse_getDefaultCursor ( void * arg )
2022-11-23 12:28:34 -07:00
{
SDL_Cursor * cursor ;
/* Get current cursor */
cursor = SDL_GetDefaultCursor ( ) ;
SDLTest_AssertPass ( " Call to SDL_GetDefaultCursor() " ) ;
SDLTest_AssertCheck ( cursor ! = NULL , " Validate result from SDL_GetDefaultCursor() is not NULL " ) ;
return TEST_COMPLETED ;
}
/**
2023-11-06 08:26:06 -07:00
* Check call to SDL_GetGlobalMouseState
2022-11-23 12:28:34 -07:00
*
2023-02-01 16:21:53 -07:00
* \ sa SDL_GetGlobalMouseState
2022-11-23 12:28:34 -07:00
*/
2023-03-08 08:12:45 -07:00
static int mouse_getGlobalMouseState ( void * arg )
2022-11-23 12:28:34 -07:00
{
2022-12-29 20:31:12 -07:00
float x ;
float y ;
2022-11-23 12:28:34 -07:00
Uint32 state ;
2023-01-08 05:28:10 -07:00
x = - FLT_MAX ;
y = - FLT_MAX ;
2022-11-23 12:28:34 -07:00
/* Get current cursor */
state = SDL_GetGlobalMouseState ( & x , & y ) ;
SDLTest_AssertPass ( " Call to SDL_GetGlobalMouseState() " ) ;
2023-01-08 05:28:10 -07:00
SDLTest_AssertCheck ( x > - FLT_MAX , " Validate that value of x is > -FLT_MAX, got: %.f " , x ) ;
SDLTest_AssertCheck ( y > - FLT_MAX , " Validate that value of y is > -FLT_MAX, got: %.f " , y ) ;
2022-12-29 14:58:16 -07:00
SDLTest_AssertCheck ( mouseStateCheck ( state ) , " Validate state returned from function, got: % " SDL_PRIu32 , state ) ;
2022-11-23 12:28:34 -07:00
return TEST_COMPLETED ;
}
2015-06-21 09:33:46 -06:00
/* ================= Test References ================== */
/* Mouse test cases */
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mouseTest1 = {
( SDLTest_TestCaseFp ) mouse_getMouseState , " mouse_getMouseState " , " Check call to SDL_GetMouseState " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mouseTest2 = {
( SDLTest_TestCaseFp ) mouse_getRelativeMouseState , " mouse_getRelativeMouseState " , " Check call to SDL_GetRelativeMouseState " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mouseTest3 = {
2022-12-29 16:07:59 -07:00
( SDLTest_TestCaseFp ) mouse_createFreeCursor , " mouse_createFreeCursor " , " Check call to SDL_CreateCursor and SDL_DestroyCursor " , TEST_ENABLED
2022-11-30 13:51:59 -07:00
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mouseTest4 = {
( SDLTest_TestCaseFp ) mouse_showCursor , " mouse_showCursor " , " Check call to SDL_ShowCursor " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mouseTest5 = {
( SDLTest_TestCaseFp ) mouse_setCursor , " mouse_setCursor " , " Check call to SDL_SetCursor " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mouseTest6 = {
( SDLTest_TestCaseFp ) mouse_getCursor , " mouse_getCursor " , " Check call to SDL_GetCursor " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mouseTest7 = {
( SDLTest_TestCaseFp ) mouse_warpMouseInWindow , " mouse_warpMouseInWindow " , " Check call to SDL_WarpMouseInWindow " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mouseTest8 = {
( SDLTest_TestCaseFp ) mouse_getMouseFocus , " mouse_getMouseFocus " , " Check call to SDL_getMouseFocus " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mouseTest9 = {
2022-12-29 16:07:59 -07:00
( SDLTest_TestCaseFp ) mouse_createFreeColorCursor , " mouse_createFreeColorCursor " , " Check call to SDL_CreateColorCursor and SDL_DestroyCursor " , TEST_ENABLED
2022-11-30 13:51:59 -07:00
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mouseTest10 = {
( SDLTest_TestCaseFp ) mouse_getSetRelativeMouseMode , " mouse_getSetRelativeMouseMode " , " Check call to SDL_GetRelativeMouseMode and SDL_SetRelativeMouseMode " , TEST_ENABLED
} ;
2022-11-23 12:28:34 -07:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mouseTest11 = {
( SDLTest_TestCaseFp ) mouse_getDefaultCursor , " mouse_getDefaultCursor " , " Check call to mouse_getDefaultCursor " , TEST_ENABLED
} ;
2022-11-23 12:28:34 -07:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference mouseTest12 = {
( SDLTest_TestCaseFp ) mouse_getGlobalMouseState , " mouse_getGlobalMouseState " , " Check call to mouse_getGlobalMouseState " , TEST_ENABLED
} ;
2022-11-23 12:28:34 -07:00
2022-11-30 13:51:59 -07:00
/* Sequence of Mouse test cases */
static const SDLTest_TestCaseReference * mouseTests [ ] = {
2015-06-21 09:33:46 -06:00
& mouseTest1 , & mouseTest2 , & mouseTest3 , & mouseTest4 , & mouseTest5 , & mouseTest6 ,
2022-11-23 12:28:34 -07:00
& mouseTest7 , & mouseTest8 , & mouseTest9 , & mouseTest10 , & mouseTest11 , & mouseTest12 , NULL
2015-06-21 09:33:46 -06:00
} ;
/* Mouse test suite (global) */
SDLTest_TestSuiteReference mouseTestSuite = {
" Mouse " ,
NULL ,
mouseTests ,
NULL
} ;