test/testautomation_mouse.c
author Andreas Schiffler <aschiffler@ferzkopp.net>
Wed, 23 Jan 2013 08:03:19 -0800
changeset 6821 f36771112651
parent 6801 f92e3d5f71a2
child 6822 18f6818ba281
permissions -rw-r--r--
Add tests to mouse suite; fix VS compiler warnings in tests
aschiffler@6801
     1
/**
aschiffler@6801
     2
 * Mouse test suite
aschiffler@6801
     3
 */
aschiffler@6801
     4
aschiffler@6801
     5
#include <stdio.h>
aschiffler@6801
     6
#include <limits.h>
aschiffler@6801
     7
aschiffler@6801
     8
#include "SDL.h"
aschiffler@6801
     9
#include "SDL_test.h"
aschiffler@6801
    10
aschiffler@6801
    11
/* ================= Test Case Implementation ================== */
aschiffler@6801
    12
aschiffler@6801
    13
/* Test case functions */
aschiffler@6801
    14
aschiffler@6801
    15
/* Helper to evaluate state returned from SDL_GetMouseState */
aschiffler@6801
    16
int _mouseStateCheck(Uint8 state)
aschiffler@6801
    17
{
aschiffler@6801
    18
  return (state == 0) || 
aschiffler@6801
    19
         SDL_BUTTON(SDL_BUTTON_LEFT) || 
aschiffler@6801
    20
         SDL_BUTTON(SDL_BUTTON_MIDDLE) || 
aschiffler@6801
    21
         SDL_BUTTON(SDL_BUTTON_RIGHT) || 
aschiffler@6801
    22
         SDL_BUTTON(SDL_BUTTON_X1) || 
aschiffler@6801
    23
         SDL_BUTTON(SDL_BUTTON_X2);
aschiffler@6801
    24
}
aschiffler@6801
    25
aschiffler@6801
    26
/**
aschiffler@6801
    27
 * @brief Check call to SDL_GetMouseState
aschiffler@6801
    28
 * 
aschiffler@6801
    29
 */
aschiffler@6801
    30
int
aschiffler@6801
    31
mouse_getMouseState(void *arg)
aschiffler@6801
    32
{
aschiffler@6801
    33
   int x;
aschiffler@6801
    34
   int y;
aschiffler@6801
    35
   Uint8 state;
aschiffler@6801
    36
aschiffler@6801
    37
   /* Pump some events to update mouse state */
aschiffler@6801
    38
   SDL_PumpEvents();
aschiffler@6801
    39
   SDLTest_AssertPass("Call to SDL_PumpEvents()");
aschiffler@6801
    40
aschiffler@6801
    41
   /* Case where x, y pointer is NULL */    
aschiffler@6801
    42
   state = SDL_GetMouseState(NULL, NULL);
aschiffler@6801
    43
   SDLTest_AssertPass("Call to SDL_GetMouseState(NULL, NULL)");
aschiffler@6801
    44
   SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state);
aschiffler@6801
    45
aschiffler@6801
    46
   /* Case where x pointer is not NULL */
aschiffler@6801
    47
   x = INT_MIN;
aschiffler@6801
    48
   state = SDL_GetMouseState(&x, NULL);
aschiffler@6801
    49
   SDLTest_AssertPass("Call to SDL_GetMouseState(&x, NULL)");
aschiffler@6801
    50
   SDLTest_AssertCheck(x > INT_MIN, "Validate that value of x is > INT_MIN, got: %i", x);
aschiffler@6801
    51
   SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state);
aschiffler@6801
    52
aschiffler@6801
    53
   /* Case where y pointer is not NULL */
aschiffler@6801
    54
   y = INT_MIN;
aschiffler@6801
    55
   state = SDL_GetMouseState(NULL, &y);
aschiffler@6801
    56
   SDLTest_AssertPass("Call to SDL_GetMouseState(NULL, &y)");
aschiffler@6801
    57
   SDLTest_AssertCheck(y > INT_MIN, "Validate that value of y is > INT_MIN, got: %i", y);
aschiffler@6801
    58
   SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state);
aschiffler@6801
    59
aschiffler@6801
    60
   /* Case where x and y pointer is not NULL */
aschiffler@6801
    61
   x = INT_MIN;
aschiffler@6801
    62
   y = INT_MIN;
aschiffler@6801
    63
   state = SDL_GetMouseState(&x, &y);
aschiffler@6801
    64
   SDLTest_AssertPass("Call to SDL_GetMouseState(&x, &y)");
aschiffler@6801
    65
   SDLTest_AssertCheck(x > INT_MIN, "Validate that value of x is > INT_MIN, got: %i", x);
aschiffler@6801
    66
   SDLTest_AssertCheck(y > INT_MIN, "Validate that value of y is > INT_MIN, got: %i", y);
aschiffler@6801
    67
   SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state);
aschiffler@6801
    68
   
aschiffler@6801
    69
   return TEST_COMPLETED;
aschiffler@6801
    70
}
aschiffler@6801
    71
aschiffler@6801
    72
/**
aschiffler@6801
    73
 * @brief Check call to SDL_GetRelativeMouseState
aschiffler@6801
    74
 * 
aschiffler@6801
    75
 */
aschiffler@6801
    76
int
aschiffler@6801
    77
mouse_getRelativeMouseState(void *arg)
aschiffler@6801
    78
{
aschiffler@6801
    79
   int x;
aschiffler@6801
    80
   int y;
aschiffler@6801
    81
   Uint8 state;
aschiffler@6801
    82
aschiffler@6801
    83
   /* Pump some events to update mouse state */
aschiffler@6801
    84
   SDL_PumpEvents();
aschiffler@6801
    85
   SDLTest_AssertPass("Call to SDL_PumpEvents()");
aschiffler@6801
    86
aschiffler@6801
    87
   /* Case where x, y pointer is NULL */    
aschiffler@6801
    88
   state = SDL_GetRelativeMouseState(NULL, NULL);
aschiffler@6801
    89
   SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(NULL, NULL)");
aschiffler@6801
    90
   SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state);
aschiffler@6801
    91
aschiffler@6801
    92
   /* Case where x pointer is not NULL */
aschiffler@6801
    93
   x = INT_MIN;
aschiffler@6801
    94
   state = SDL_GetRelativeMouseState(&x, NULL);
aschiffler@6801
    95
   SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(&x, NULL)");
aschiffler@6801
    96
   SDLTest_AssertCheck(x > INT_MIN, "Validate that value of x is > INT_MIN, got: %i", x);
aschiffler@6801
    97
   SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state);
aschiffler@6801
    98
aschiffler@6801
    99
   /* Case where y pointer is not NULL */
aschiffler@6801
   100
   y = INT_MIN;
aschiffler@6801
   101
   state = SDL_GetRelativeMouseState(NULL, &y);
aschiffler@6801
   102
   SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(NULL, &y)");
aschiffler@6801
   103
   SDLTest_AssertCheck(y > INT_MIN, "Validate that value of y is > INT_MIN, got: %i", y);
aschiffler@6801
   104
   SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state);
aschiffler@6801
   105
aschiffler@6801
   106
   /* Case where x and y pointer is not NULL */
aschiffler@6801
   107
   x = INT_MIN;
aschiffler@6801
   108
   y = INT_MIN;
aschiffler@6801
   109
   state = SDL_GetRelativeMouseState(&x, &y);
aschiffler@6801
   110
   SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(&x, &y)");
aschiffler@6801
   111
   SDLTest_AssertCheck(x > INT_MIN, "Validate that value of x is > INT_MIN, got: %i", x);
aschiffler@6801
   112
   SDLTest_AssertCheck(y > INT_MIN, "Validate that value of y is > INT_MIN, got: %i", y);
aschiffler@6801
   113
   SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state);
aschiffler@6801
   114
   
aschiffler@6801
   115
   return TEST_COMPLETED;
aschiffler@6801
   116
}
aschiffler@6801
   117
aschiffler@6821
   118
aschiffler@6821
   119
/* XPM definition of mouse Cursor */
aschiffler@6821
   120
static const char *_mouseArrowData[] = {
aschiffler@6821
   121
  /* pixels */
aschiffler@6821
   122
  "X                               ",
aschiffler@6821
   123
  "XX                              ",
aschiffler@6821
   124
  "X.X                             ",
aschiffler@6821
   125
  "X..X                            ",
aschiffler@6821
   126
  "X...X                           ",
aschiffler@6821
   127
  "X....X                          ",
aschiffler@6821
   128
  "X.....X                         ",
aschiffler@6821
   129
  "X......X                        ",
aschiffler@6821
   130
  "X.......X                       ",
aschiffler@6821
   131
  "X........X                      ",
aschiffler@6821
   132
  "X.....XXXXX                     ",
aschiffler@6821
   133
  "X..X..X                         ",
aschiffler@6821
   134
  "X.X X..X                        ",
aschiffler@6821
   135
  "XX  X..X                        ",
aschiffler@6821
   136
  "X    X..X                       ",
aschiffler@6821
   137
  "     X..X                       ",
aschiffler@6821
   138
  "      X..X                      ",
aschiffler@6821
   139
  "      X..X                      ",
aschiffler@6821
   140
  "       XX                       ",
aschiffler@6821
   141
  "                                ",
aschiffler@6821
   142
  "                                ",
aschiffler@6821
   143
  "                                ",
aschiffler@6821
   144
  "                                ",
aschiffler@6821
   145
  "                                ",
aschiffler@6821
   146
  "                                ",
aschiffler@6821
   147
  "                                ",
aschiffler@6821
   148
  "                                ",
aschiffler@6821
   149
  "                                ",
aschiffler@6821
   150
  "                                ",
aschiffler@6821
   151
  "                                ",
aschiffler@6821
   152
  "                                ",
aschiffler@6821
   153
  "                                "
aschiffler@6821
   154
};
aschiffler@6821
   155
aschiffler@6821
   156
/* Helper that creates a new mouse cursor from an XPM */
aschiffler@6821
   157
static SDL_Cursor *_initArrowCursor(const char *image[])
aschiffler@6821
   158
{
aschiffler@6821
   159
  SDL_Cursor *cursor;
aschiffler@6821
   160
  int i, row, col;
aschiffler@6821
   161
  Uint8 data[4*32];
aschiffler@6821
   162
  Uint8 mask[4*32];
aschiffler@6821
   163
aschiffler@6821
   164
  i = -1;
aschiffler@6821
   165
  for ( row=0; row<32; ++row ) {
aschiffler@6821
   166
    for ( col=0; col<32; ++col ) {
aschiffler@6821
   167
      if ( col % 8 ) {
aschiffler@6821
   168
        data[i] <<= 1;
aschiffler@6821
   169
        mask[i] <<= 1;
aschiffler@6821
   170
      } else {
aschiffler@6821
   171
        ++i;
aschiffler@6821
   172
        data[i] = mask[i] = 0;
aschiffler@6821
   173
      }
aschiffler@6821
   174
      switch (image[row][col]) {
aschiffler@6821
   175
        case 'X':
aschiffler@6821
   176
          data[i] |= 0x01;
aschiffler@6821
   177
          mask[i] |= 0x01;
aschiffler@6821
   178
          break;
aschiffler@6821
   179
        case '.':
aschiffler@6821
   180
          mask[i] |= 0x01;
aschiffler@6821
   181
          break;
aschiffler@6821
   182
        case ' ':
aschiffler@6821
   183
          break;
aschiffler@6821
   184
      }
aschiffler@6821
   185
    }
aschiffler@6821
   186
  }
aschiffler@6821
   187
aschiffler@6821
   188
  cursor = SDL_CreateCursor(data, mask, 32, 32, 0, 0);
aschiffler@6821
   189
  return cursor;
aschiffler@6821
   190
}
aschiffler@6801
   191
aschiffler@6801
   192
/**
aschiffler@6801
   193
 * @brief Check call to SDL_CreateCursor and SDL_FreeCursor
aschiffler@6801
   194
 * 
aschiffler@6801
   195
 * @sa http://wiki.libsdl.org/moin.cgi/SDL_CreateCursor
aschiffler@6801
   196
 * @sa http://wiki.libsdl.org/moin.cgi/SDL_FreeCursor
aschiffler@6801
   197
 */
aschiffler@6801
   198
int
aschiffler@6801
   199
mouse_createFreeCursor(void *arg)
aschiffler@6801
   200
{
aschiffler@6801
   201
	SDL_Cursor *cursor;	
aschiffler@6801
   202
aschiffler@6801
   203
	/* Create a cursor */
aschiffler@6801
   204
	cursor = _initArrowCursor(_mouseArrowData);
aschiffler@6821
   205
        SDLTest_AssertPass("Call to SDL_CreateCursor()");
aschiffler@6821
   206
        SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_CreateCursor() is not NULL");	
aschiffler@6801
   207
	if (cursor == NULL) {
aschiffler@6801
   208
		return TEST_ABORTED;
aschiffler@6801
   209
	}
aschiffler@6801
   210
aschiffler@6801
   211
	/* Free cursor again */
aschiffler@6801
   212
	SDL_FreeCursor(cursor);
aschiffler@6801
   213
	SDLTest_AssertPass("Call to SDL_FreeCursor()");
aschiffler@6801
   214
aschiffler@6801
   215
	return TEST_COMPLETED;
aschiffler@6801
   216
}
aschiffler@6801
   217
aschiffler@6801
   218
/* Helper that changes cursor visibility */
aschiffler@6801
   219
void _changeCursorVisibility(int state)
aschiffler@6801
   220
{
aschiffler@6801
   221
	int oldState;
aschiffler@6801
   222
	int newState;
aschiffler@6801
   223
	int result;
aschiffler@6801
   224
aschiffler@6821
   225
        oldState = SDL_ShowCursor(SDL_QUERY);
aschiffler@6801
   226
	SDLTest_AssertPass("Call to SDL_ShowCursor(SDL_QUERY)");
aschiffler@6801
   227
aschiffler@6821
   228
        result = SDL_ShowCursor(state);
aschiffler@6801
   229
	SDLTest_AssertPass("Call to SDL_ShowCursor(%s)", (state == SDL_ENABLE) ? "SDL_ENABLE" : "SDL_DISABLE");
aschiffler@6801
   230
	SDLTest_AssertCheck(result == oldState, "Validate result from SDL_ShowCursor(%s), expected: %i, got: %i", 
aschiffler@6801
   231
		(state == SDL_ENABLE) ? "SDL_ENABLE" : "SDL_DISABLE", oldState, result);
aschiffler@6801
   232
    
aschiffler@6801
   233
	newState = SDL_ShowCursor(SDL_QUERY);
aschiffler@6801
   234
	SDLTest_AssertPass("Call to SDL_ShowCursor(SDL_QUERY)");
aschiffler@6801
   235
	SDLTest_AssertCheck(state == newState, "Validate new state, expected: %i, got: %i", 
aschiffler@6801
   236
		state, newState);
aschiffler@6801
   237
}
aschiffler@6801
   238
aschiffler@6801
   239
/**
aschiffler@6801
   240
 * @brief Check call to SDL_ShowCursor
aschiffler@6801
   241
 * 
aschiffler@6801
   242
 * @sa http://wiki.libsdl.org/moin.cgi/SDL_ShowCursor
aschiffler@6801
   243
 */
aschiffler@6801
   244
int
aschiffler@6801
   245
mouse_showCursor(void *arg)
aschiffler@6801
   246
{
aschiffler@6801
   247
	int currentState;
aschiffler@6801
   248
aschiffler@6801
   249
	/* Get current state */
aschiffler@6801
   250
	currentState = SDL_ShowCursor(SDL_QUERY);
aschiffler@6801
   251
	SDLTest_AssertPass("Call to SDL_ShowCursor(SDL_QUERY)");
aschiffler@6801
   252
	SDLTest_AssertCheck(currentState == SDL_DISABLE || currentState == SDL_ENABLE, 
aschiffler@6801
   253
		"Validate result is %i or %i, got: %i", SDL_DISABLE, SDL_ENABLE, currentState);
aschiffler@6801
   254
	if (currentState == SDL_DISABLE) {
aschiffler@6801
   255
		/* Show the cursor, then hide it again */
aschiffler@6801
   256
		_changeCursorVisibility(SDL_ENABLE);
aschiffler@6801
   257
		_changeCursorVisibility(SDL_DISABLE);
aschiffler@6801
   258
	} else if (currentState == SDL_ENABLE) {
aschiffler@6801
   259
		/* Hide the cursor, then show it again */
aschiffler@6801
   260
		_changeCursorVisibility(SDL_DISABLE);
aschiffler@6801
   261
		_changeCursorVisibility(SDL_ENABLE);
aschiffler@6801
   262
	} else {
aschiffler@6801
   263
		return TEST_ABORTED;
aschiffler@6801
   264
	}
aschiffler@6801
   265
aschiffler@6801
   266
	return TEST_COMPLETED;
aschiffler@6801
   267
}
aschiffler@6801
   268
aschiffler@6801
   269
/**
aschiffler@6801
   270
 * @brief Check call to SDL_SetCursor
aschiffler@6801
   271
 * 
aschiffler@6801
   272
 * @sa http://wiki.libsdl.org/moin.cgi/SDL_SetCursor
aschiffler@6801
   273
 */
aschiffler@6801
   274
int
aschiffler@6801
   275
mouse_setCursor(void *arg)
aschiffler@6801
   276
{
aschiffler@6801
   277
	SDL_Cursor *cursor;	
aschiffler@6801
   278
aschiffler@6801
   279
	/* Create a cursor */
aschiffler@6801
   280
	cursor = _initArrowCursor(_mouseArrowData);
aschiffler@6821
   281
        SDLTest_AssertPass("Call to SDL_CreateCursor()");
aschiffler@6821
   282
        SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_CreateCursor() is not NULL");	
aschiffler@6801
   283
	if (cursor == NULL) {
aschiffler@6801
   284
		return TEST_ABORTED;
aschiffler@6801
   285
	}
aschiffler@6801
   286
aschiffler@6801
   287
	/* Set the arrow cursor */
aschiffler@6821
   288
	SDL_SetCursor(cursor);
aschiffler@6801
   289
	SDLTest_AssertPass("Call to SDL_SetCursor(cursor)");
aschiffler@6801
   290
aschiffler@6801
   291
	/* Force redraw */
aschiffler@6821
   292
	SDL_SetCursor(NULL);
aschiffler@6801
   293
	SDLTest_AssertPass("Call to SDL_SetCursor(NULL)");
aschiffler@6801
   294
aschiffler@6801
   295
	/* Free cursor again */
aschiffler@6801
   296
	SDL_FreeCursor(cursor);
aschiffler@6801
   297
	SDLTest_AssertPass("Call to SDL_FreeCursor()");
aschiffler@6801
   298
aschiffler@6801
   299
	return TEST_COMPLETED;
aschiffler@6801
   300
}
aschiffler@6801
   301
aschiffler@6821
   302
#define MOUSE_TESTWINDOW_WIDTH	320
aschiffler@6821
   303
#define MOUSE_TESTWINDOW_HEIGHT 200
aschiffler@6821
   304
aschiffler@6821
   305
/**
aschiffler@6821
   306
 * Create s test window
aschiffler@6821
   307
 */
aschiffler@6821
   308
SDL_Window *_createTestWindow()
aschiffler@6821
   309
{
aschiffler@6821
   310
  int posX = 100, posY = 100, width = MOUSE_TESTWINDOW_WIDTH, height = MOUSE_TESTWINDOW_HEIGHT;
aschiffler@6821
   311
  SDL_Window *window;
aschiffler@6821
   312
  window = SDL_CreateWindow("mouse_createTestWindow", posX, posY, width, height, 0);
aschiffler@6821
   313
  SDLTest_AssertPass("SDL_CreateWindow()");
aschiffler@6821
   314
  SDLTest_AssertCheck(window != NULL, "Check SDL_CreateWindow result");
aschiffler@6821
   315
  return window;
aschiffler@6821
   316
}
aschiffler@6821
   317
aschiffler@6821
   318
/*
aschiffler@6821
   319
 * Destroy test window  
aschiffler@6821
   320
 */
aschiffler@6821
   321
void _destroyTestWindow(SDL_Window *window)
aschiffler@6821
   322
{
aschiffler@6821
   323
  if (window != NULL) {  
aschiffler@6821
   324
     SDL_DestroyWindow(window);
aschiffler@6821
   325
     window = NULL;
aschiffler@6821
   326
     SDLTest_AssertPass("SDL_DestroyWindow");
aschiffler@6821
   327
  }
aschiffler@6821
   328
}
aschiffler@6821
   329
aschiffler@6821
   330
/**
aschiffler@6821
   331
 * @brief Check call to SDL_WarpMouseInWindow
aschiffler@6821
   332
 * 
aschiffler@6821
   333
 * @sa http://wiki.libsdl.org/moin.cgi/SDL_WarpMouseInWindow
aschiffler@6821
   334
 */
aschiffler@6821
   335
int
aschiffler@6821
   336
mouse_warpMouseInWindow(void *arg)
aschiffler@6821
   337
{
aschiffler@6821
   338
  	const int w = MOUSE_TESTWINDOW_WIDTH, h = MOUSE_TESTWINDOW_HEIGHT;
aschiffler@6821
   339
  	int numPositions = 6;
aschiffler@6821
   340
  	int xPositions[] = {-1, 0, 1, w-1, w, w+1 };  
aschiffler@6821
   341
  	int yPositions[] = {-1, 0, 1, h-1, h, h+1 };
aschiffler@6821
   342
	int x, y, i, j;
aschiffler@6821
   343
	SDL_Window *window;
aschiffler@6821
   344
	
aschiffler@6821
   345
	/* Create test window */
aschiffler@6821
   346
	window = _createTestWindow();
aschiffler@6821
   347
	if (window == NULL) return TEST_ABORTED;
aschiffler@6821
   348
aschiffler@6821
   349
	/* Mouse to random position inside window */	
aschiffler@6821
   350
	x = SDLTest_RandomIntegerInRange(1, w-1);
aschiffler@6821
   351
	y = SDLTest_RandomIntegerInRange(1, h-1);
aschiffler@6821
   352
	SDL_WarpMouseInWindow(window, x, y);
aschiffler@6821
   353
	SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%i,%i)", x, y);
aschiffler@6821
   354
aschiffler@6821
   355
        /* Same position again */
aschiffler@6821
   356
   	SDL_WarpMouseInWindow(window, x, y);
aschiffler@6821
   357
	SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%i,%i)", x, y);
aschiffler@6821
   358
aschiffler@6821
   359
	/* Mouse to various boundary positions */
aschiffler@6821
   360
	for (i=0; i<numPositions; i++) {	
aschiffler@6821
   361
	  for (j=0; j<numPositions; j++) {	
aschiffler@6821
   362
	    x = xPositions[i];
aschiffler@6821
   363
	    y = yPositions[j];
aschiffler@6821
   364
	    SDL_WarpMouseInWindow(window, x, y);
aschiffler@6821
   365
	    SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%i,%i)", x, y);
aschiffler@6821
   366
aschiffler@6821
   367
	    /* TODO: add tracking of events and check that each call generates a mouse motion event */
aschiffler@6821
   368
	    SDL_PumpEvents();
aschiffler@6821
   369
	    SDLTest_AssertPass("SDL_PumpEvents()");
aschiffler@6821
   370
	  }
aschiffler@6821
   371
	}
aschiffler@6821
   372
	
aschiffler@6821
   373
aschiffler@6821
   374
        /* Clean up test window */	
aschiffler@6821
   375
	_destroyTestWindow(window);
aschiffler@6821
   376
	
aschiffler@6821
   377
	return TEST_COMPLETED;
aschiffler@6821
   378
}
aschiffler@6821
   379
aschiffler@6821
   380
/**
aschiffler@6821
   381
 * @brief Check call to SDL_GetMouseFocus
aschiffler@6821
   382
 * 
aschiffler@6821
   383
 * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetMouseFocus
aschiffler@6821
   384
 */
aschiffler@6821
   385
int
aschiffler@6821
   386
mouse_getMouseFocus(void *arg)
aschiffler@6821
   387
{
aschiffler@6821
   388
  	const int w = MOUSE_TESTWINDOW_WIDTH, h = MOUSE_TESTWINDOW_HEIGHT;
aschiffler@6821
   389
  	int x, y;
aschiffler@6821
   390
	SDL_Window *window;
aschiffler@6821
   391
	SDL_Window *focusWindow;	
aschiffler@6821
   392
aschiffler@6821
   393
	/* Get focus - focus non-deterministic */
aschiffler@6821
   394
	focusWindow = SDL_GetMouseFocus();
aschiffler@6821
   395
	SDLTest_AssertPass("SDL_GetMouseFocus()");
aschiffler@6821
   396
aschiffler@6821
   397
        /* Create test window */	
aschiffler@6821
   398
	window = _createTestWindow();
aschiffler@6821
   399
	if (window == NULL) return TEST_ABORTED;
aschiffler@6821
   400
aschiffler@6821
   401
	/* Mouse to random position inside window */	
aschiffler@6821
   402
	x = SDLTest_RandomIntegerInRange(1, w-1);
aschiffler@6821
   403
	y = SDLTest_RandomIntegerInRange(1, h-1);
aschiffler@6821
   404
	SDL_WarpMouseInWindow(window, x, y);
aschiffler@6821
   405
	SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%i,%i)", x, y);
aschiffler@6821
   406
aschiffler@6821
   407
	/* Pump events to update focus state */
aschiffler@6821
   408
	SDL_PumpEvents();
aschiffler@6821
   409
	SDLTest_AssertPass("SDL_PumpEvents()");
aschiffler@6821
   410
aschiffler@6821
   411
        /* Get focus with explicit window setup - focus deterministic */	
aschiffler@6821
   412
	focusWindow = SDL_GetMouseFocus();
aschiffler@6821
   413
	SDLTest_AssertPass("SDL_GetMouseFocus()");
aschiffler@6821
   414
	SDLTest_AssertCheck (focusWindow != NULL, "Check returned window value is not NULL");
aschiffler@6821
   415
	SDLTest_AssertCheck (focusWindow == window, "Check returned window value is test window");
aschiffler@6821
   416
aschiffler@6821
   417
	/* Mouse to random position outside window */	
aschiffler@6821
   418
	x = SDLTest_RandomIntegerInRange(-9, -1);
aschiffler@6821
   419
	y = SDLTest_RandomIntegerInRange(-9, -1);
aschiffler@6821
   420
	SDL_WarpMouseInWindow(window, x, y);
aschiffler@6821
   421
	SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%i,%i)", x, y);
aschiffler@6821
   422
aschiffler@6821
   423
        /* Clean up test window */	
aschiffler@6821
   424
	_destroyTestWindow(window);
aschiffler@6821
   425
aschiffler@6821
   426
	/* Pump events to update focus state */
aschiffler@6821
   427
	SDL_PumpEvents();
aschiffler@6821
   428
	SDLTest_AssertPass("SDL_PumpEvents()");
aschiffler@6821
   429
aschiffler@6821
   430
        /* Get focus for non-existing window */	
aschiffler@6821
   431
	focusWindow = SDL_GetMouseFocus();
aschiffler@6821
   432
	SDLTest_AssertPass("SDL_GetMouseFocus()");
aschiffler@6821
   433
	SDLTest_AssertCheck (focusWindow == NULL, "Check returned window value is NULL");
aschiffler@6821
   434
aschiffler@6821
   435
	
aschiffler@6821
   436
	return TEST_COMPLETED;
aschiffler@6821
   437
}
aschiffler@6821
   438
aschiffler@6801
   439
/* ================= Test References ================== */
aschiffler@6801
   440
aschiffler@6801
   441
/* Mouse test cases */
aschiffler@6801
   442
static const SDLTest_TestCaseReference mouseTest1 =
aschiffler@6801
   443
		{ (SDLTest_TestCaseFp)mouse_getMouseState, "mouse_getMouseState", "Check call to SDL_GetMouseState", TEST_ENABLED };
aschiffler@6801
   444
aschiffler@6801
   445
static const SDLTest_TestCaseReference mouseTest2 =
aschiffler@6801
   446
		{ (SDLTest_TestCaseFp)mouse_getRelativeMouseState, "mouse_getRelativeMouseState", "Check call to SDL_GetRelativeMouseState", TEST_ENABLED };
aschiffler@6801
   447
aschiffler@6801
   448
static const SDLTest_TestCaseReference mouseTest3 =
aschiffler@6801
   449
		{ (SDLTest_TestCaseFp)mouse_createFreeCursor, "mouse_createFreeCursor", "Check call to SDL_CreateCursor and SDL_FreeCursor", TEST_ENABLED };
aschiffler@6801
   450
aschiffler@6801
   451
static const SDLTest_TestCaseReference mouseTest4 =
aschiffler@6801
   452
		{ (SDLTest_TestCaseFp)mouse_showCursor, "mouse_showCursor", "Check call to SDL_ShowCursor", TEST_ENABLED };
aschiffler@6801
   453
aschiffler@6801
   454
static const SDLTest_TestCaseReference mouseTest5 =
aschiffler@6801
   455
		{ (SDLTest_TestCaseFp)mouse_setCursor, "mouse_setCursor", "Check call to SDL_SetCursor", TEST_ENABLED };
aschiffler@6801
   456
aschiffler@6821
   457
static const SDLTest_TestCaseReference mouseTest6 =
aschiffler@6821
   458
		{ (SDLTest_TestCaseFp)mouse_warpMouseInWindow, "mouse_warpMouseInWindow", "Check call to SDL_WarpMouseInWindow", TEST_ENABLED };
aschiffler@6821
   459
aschiffler@6821
   460
static const SDLTest_TestCaseReference mouseTest7 =
aschiffler@6821
   461
		{ (SDLTest_TestCaseFp)mouse_getMouseFocus, "mouse_getMouseFocus", "Check call to SDL_getMouseFocus", TEST_ENABLED };
aschiffler@6821
   462
aschiffler@6801
   463
/* Sequence of Mouse test cases */
aschiffler@6801
   464
static const SDLTest_TestCaseReference *mouseTests[] =  {
aschiffler@6821
   465
	&mouseTest1, &mouseTest2, &mouseTest3, &mouseTest4, &mouseTest5, &mouseTest6, &mouseTest7, NULL
aschiffler@6801
   466
};
aschiffler@6801
   467
aschiffler@6801
   468
/* Mouse test suite (global) */
aschiffler@6801
   469
SDLTest_TestSuiteReference mouseTestSuite = {
aschiffler@6801
   470
	"Mouse",
aschiffler@6801
   471
	NULL,
aschiffler@6801
   472
	mouseTests,
aschiffler@6801
   473
	NULL
aschiffler@6801
   474
};