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