Atlas - testautomation_keyboard.c
Home / ext / SDL / test Lines: 1 | Size: 26256 bytes [Download] [Show on GitHub] [Search similar files] [Raw] [Raw (proxy)][FILE BEGIN]1/** 2 * Keyboard test suite 3 */ 4 5#include <SDL3/SDL.h> 6#include <SDL3/SDL_test.h> 7#include "testautomation_suites.h" 8 9/* ================= Test Case Implementation ================== */ 10 11/* Test case functions */ 12 13/** 14 * Check call to SDL_GetKeyboardState with and without numkeys reference. 15 * 16 * \sa SDL_GetKeyboardState 17 */ 18static int SDLCALL keyboard_getKeyboardState(void *arg) 19{ 20 int numkeys; 21 const bool *state; 22 23 /* Case where numkeys pointer is NULL */ 24 state = SDL_GetKeyboardState(NULL); 25 SDLTest_AssertPass("Call to SDL_GetKeyboardState(NULL)"); 26 SDLTest_AssertCheck(state != NULL, "Validate that return value from SDL_GetKeyboardState is not NULL"); 27 28 /* Case where numkeys pointer is not NULL */ 29 numkeys = -1; 30 state = SDL_GetKeyboardState(&numkeys); 31 SDLTest_AssertPass("Call to SDL_GetKeyboardState(&numkeys)"); 32 SDLTest_AssertCheck(state != NULL, "Validate that return value from SDL_GetKeyboardState is not NULL"); 33 SDLTest_AssertCheck(numkeys >= 0, "Validate that value of numkeys is >= 0, got: %d", numkeys); 34 35 return TEST_COMPLETED; 36} 37 38/** 39 * Check call to SDL_GetKeyboardFocus 40 * 41 * \sa SDL_GetKeyboardFocus 42 */ 43static int SDLCALL keyboard_getKeyboardFocus(void *arg) 44{ 45 /* Call, but ignore return value */ 46 SDL_GetKeyboardFocus(); 47 SDLTest_AssertPass("Call to SDL_GetKeyboardFocus()"); 48 49 return TEST_COMPLETED; 50} 51 52/** 53 * Check call to SDL_GetKeyFromName for known, unknown and invalid name. 54 * 55 * \sa SDL_GetKeyFromName 56 */ 57static int SDLCALL keyboard_getKeyFromName(void *arg) 58{ 59 SDL_Keycode result; 60 61 /* Case where Key is known, 1 character input */ 62 result = SDL_GetKeyFromName("A"); 63 SDLTest_AssertPass("Call to SDL_GetKeyFromName('A', true)"); 64 SDLTest_AssertCheck(result == SDLK_A, "Verify result from call, expected: %d, got: %" SDL_PRIu32, SDLK_A, result); 65 66 /* Case where Key is known, 2 character input */ 67 result = SDL_GetKeyFromName("F1"); 68 SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/double)"); 69 SDLTest_AssertCheck(result == SDLK_F1, "Verify result from call, expected: %d, got: %" SDL_PRIu32, SDLK_F1, result); 70 71 /* Case where Key is known, 3 character input */ 72 result = SDL_GetKeyFromName("End"); 73 SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/triple)"); 74 SDLTest_AssertCheck(result == SDLK_END, "Verify result from call, expected: %d, got: %" SDL_PRIu32, SDLK_END, result); 75 76 /* Case where Key is known, 4 character input */ 77 result = SDL_GetKeyFromName("Find"); 78 SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/quad)"); 79 SDLTest_AssertCheck(result == SDLK_FIND, "Verify result from call, expected: %d, got: %" SDL_PRIu32, SDLK_FIND, result); 80 81 /* Case where Key is known, multiple character input */ 82 result = SDL_GetKeyFromName("MediaStop"); 83 SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/multi)"); 84 SDLTest_AssertCheck(result == SDLK_MEDIA_STOP, "Verify result from call, expected: %d, got: %" SDL_PRIu32, SDLK_MEDIA_STOP, result); 85 86 /* Case where Key is unknown */ 87 result = SDL_GetKeyFromName("NotThere"); 88 SDLTest_AssertPass("Call to SDL_GetKeyFromName(unknown)"); 89 SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %d, got: %" SDL_PRIu32, SDLK_UNKNOWN, result); 90 91 /* Case where input is NULL/invalid */ 92 result = SDL_GetKeyFromName(NULL); 93 SDLTest_AssertPass("Call to SDL_GetKeyFromName(NULL)"); 94 SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %d, got: %" SDL_PRIu32, SDLK_UNKNOWN, result); 95 96 return TEST_COMPLETED; 97} 98 99/* 100 * Local helper to check for the invalid scancode error message 101 */ 102static void checkInvalidScancodeError(void) 103{ 104 const char *expectedError = "Parameter 'scancode' is invalid"; 105 const char *error; 106 error = SDL_GetError(); 107 SDLTest_AssertPass("Call to SDL_GetError()"); 108 SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); 109 if (error != NULL) { 110 SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, 111 "Validate error message, expected: '%s', got: '%s'", expectedError, error); 112 SDL_ClearError(); 113 SDLTest_AssertPass("Call to SDL_ClearError()"); 114 } 115} 116 117/** 118 * Check call to SDL_GetKeyFromScancode 119 * 120 * \sa SDL_GetKeyFromScancode 121 */ 122static int SDLCALL keyboard_getKeyFromScancode(void *arg) 123{ 124 SDL_Keycode result; 125 126 /* Case where input is valid */ 127 result = SDL_GetKeyFromScancode(SDL_SCANCODE_SPACE, SDL_KMOD_NONE, false); 128 SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(valid)"); 129 SDLTest_AssertCheck(result == SDLK_SPACE, "Verify result from call, expected: %d, got: %" SDL_PRIu32, SDLK_SPACE, result); 130 131 /* Case where input is zero */ 132 result = SDL_GetKeyFromScancode(SDL_SCANCODE_UNKNOWN, SDL_KMOD_NONE, false); 133 SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(0)"); 134 SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %d, got: %" SDL_PRIu32, SDLK_UNKNOWN, result); 135 136 /* Clear error message */ 137 SDL_ClearError(); 138 SDLTest_AssertPass("Call to SDL_ClearError()"); 139 140 /* Case where input is invalid (too small) */ 141 result = SDL_GetKeyFromScancode((SDL_Scancode)-999, SDL_KMOD_NONE, false); 142 SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(-999)"); 143 SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %d, got: %" SDL_PRIu32, SDLK_UNKNOWN, result); 144 checkInvalidScancodeError(); 145 146 /* Case where input is invalid (too big) */ 147 result = SDL_GetKeyFromScancode((SDL_Scancode)999, SDL_KMOD_NONE, false); 148 SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(999)"); 149 SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %d, got: %" SDL_PRIu32, SDLK_UNKNOWN, result); 150 checkInvalidScancodeError(); 151 152 return TEST_COMPLETED; 153} 154 155/** 156 * Check call to SDL_GetKeyName 157 * 158 * \sa SDL_GetKeyName 159 */ 160static int SDLCALL keyboard_getKeyName(void *arg) 161{ 162 const char *result; 163 const char *expected; 164 165 /* Case where key has a 1 character name */ 166 expected = "3"; 167 result = SDL_GetKeyName(SDLK_3); 168 SDLTest_AssertPass("Call to SDL_GetKeyName()"); 169 SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); 170 SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); 171 172 /* Case where key has a 2 character name */ 173 expected = "F1"; 174 result = SDL_GetKeyName(SDLK_F1); 175 SDLTest_AssertPass("Call to SDL_GetKeyName()"); 176 SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); 177 SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); 178 179 /* Case where key has a 3 character name */ 180 expected = "Cut"; 181 result = SDL_GetKeyName(SDLK_CUT); 182 SDLTest_AssertPass("Call to SDL_GetKeyName()"); 183 SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); 184 SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); 185 186 /* Case where key has a 4 character name */ 187 expected = "Down"; 188 result = SDL_GetKeyName(SDLK_DOWN); 189 SDLTest_AssertPass("Call to SDL_GetKeyName()"); 190 SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); 191 SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); 192 193 /* Case where key has a N character name */ 194 expected = "MediaPlay"; 195 result = SDL_GetKeyName(SDLK_MEDIA_PLAY); 196 SDLTest_AssertPass("Call to SDL_GetKeyName()"); 197 SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); 198 SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); 199 200 /* Case where key has a N character name with space */ 201 expected = "Keypad MemStore"; 202 result = SDL_GetKeyName(SDLK_KP_MEMSTORE); 203 SDLTest_AssertPass("Call to SDL_GetKeyName()"); 204 SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); 205 SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); 206 207 return TEST_COMPLETED; 208} 209 210/** 211 * SDL_GetScancodeName negative cases 212 * 213 * \sa SDL_GetScancodeName 214 */ 215static int SDLCALL keyboard_getScancodeNameNegative(void *arg) 216{ 217 SDL_Scancode scancode; 218 const char *result; 219 const char *expected = ""; 220 221 /* Clear error message */ 222 SDL_ClearError(); 223 SDLTest_AssertPass("Call to SDL_ClearError()"); 224 225 /* Out-of-bounds scancode */ 226 scancode = (SDL_Scancode)SDL_SCANCODE_COUNT; 227 result = SDL_GetScancodeName(scancode); 228 SDLTest_AssertPass("Call to SDL_GetScancodeName(%d/large)", scancode); 229 SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); 230 SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: '%s', got: '%s'", expected, result); 231 checkInvalidScancodeError(); 232 233 return TEST_COMPLETED; 234} 235 236/** 237 * SDL_GetKeyName negative cases 238 * 239 * \sa SDL_GetKeyName 240 */ 241static int SDLCALL keyboard_getKeyNameNegative(void *arg) 242{ 243 SDL_Keycode keycode; 244 const char *result; 245 const char *expected = ""; 246 247 /* Unknown keycode */ 248 keycode = SDLK_UNKNOWN; 249 result = SDL_GetKeyName(keycode); 250 SDLTest_AssertPass("Call to SDL_GetKeyName(%" SDL_PRIu32 "/unknown)", keycode); 251 SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); 252 SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: '%s', got: '%s'", expected, result); 253 254 /* Clear error message */ 255 SDL_ClearError(); 256 SDLTest_AssertPass("Call to SDL_ClearError()"); 257 258 /* Negative keycode */ 259 keycode = (SDL_Keycode)SDLTest_RandomIntegerInRange(-255, -1); 260 result = SDL_GetKeyName(keycode); 261 SDLTest_AssertPass("Call to SDL_GetKeyName(%" SDL_PRIu32 "/negative)", keycode); 262 SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); 263 SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: '%s', got: '%s'", expected, result); 264 checkInvalidScancodeError(); 265 266 SDL_ClearError(); 267 SDLTest_AssertPass("Call to SDL_ClearError()"); 268 269 return TEST_COMPLETED; 270} 271 272/** 273 * Check call to SDL_GetModState and SDL_SetModState 274 * 275 * \sa SDL_GetModState 276 * \sa SDL_SetModState 277 */ 278static int SDLCALL keyboard_getSetModState(void *arg) 279{ 280 SDL_Keymod result; 281 SDL_Keymod currentState; 282 SDL_Keymod newState; 283 SDL_Keymod allStates = 284 SDL_KMOD_NONE | 285 SDL_KMOD_LSHIFT | 286 SDL_KMOD_RSHIFT | 287 SDL_KMOD_LCTRL | 288 SDL_KMOD_RCTRL | 289 SDL_KMOD_LALT | 290 SDL_KMOD_RALT | 291 SDL_KMOD_LGUI | 292 SDL_KMOD_RGUI | 293 SDL_KMOD_NUM | 294 SDL_KMOD_CAPS | 295 SDL_KMOD_MODE | 296 SDL_KMOD_SCROLL; 297 298 /* Get state, cache for later reset */ 299 result = SDL_GetModState(); 300 SDLTest_AssertPass("Call to SDL_GetModState()"); 301 SDLTest_AssertCheck(/*result >= 0 &&*/ result <= allStates, "Verify result from call is valid, expected: 0 <= result <= 0x%.4x, got: 0x%.4x", allStates, result); 302 currentState = result; 303 304 /* Set random state */ 305 newState = (SDL_Keymod)SDLTest_RandomIntegerInRange(0, allStates); 306 SDL_SetModState(newState); 307 SDLTest_AssertPass("Call to SDL_SetModState(0x%.4x)", newState); 308 result = SDL_GetModState(); 309 SDLTest_AssertPass("Call to SDL_GetModState()"); 310 SDLTest_AssertCheck(result == newState, "Verify result from call is valid, expected: 0x%.4x, got: 0x%.4x", newState, result); 311 312 /* Set zero state */ 313 SDL_SetModState(0); 314 SDLTest_AssertPass("Call to SDL_SetModState(0)"); 315 result = SDL_GetModState(); 316 SDLTest_AssertPass("Call to SDL_GetModState()"); 317 SDLTest_AssertCheck(result == 0, "Verify result from call is valid, expected: 0, got: 0x%.4x", result); 318 319 /* Revert back to cached current state if needed */ 320 if (currentState != 0) { 321 SDL_SetModState(currentState); 322 SDLTest_AssertPass("Call to SDL_SetModState(0x%.4x)", currentState); 323 result = SDL_GetModState(); 324 SDLTest_AssertPass("Call to SDL_GetModState()"); 325 SDLTest_AssertCheck(result == currentState, "Verify result from call is valid, expected: 0x%.4x, got: 0x%.4x", currentState, result); 326 } 327 328 return TEST_COMPLETED; 329} 330 331/** 332 * Check call to SDL_StartTextInput and SDL_StopTextInput 333 * 334 * \sa SDL_StartTextInput 335 * \sa SDL_StopTextInput 336 */ 337static int SDLCALL keyboard_startStopTextInput(void *arg) 338{ 339 SDL_Window *window = SDL_GetKeyboardFocus(); 340 341 /* Start-Stop */ 342 SDL_StartTextInput(window); 343 SDLTest_AssertPass("Call to SDL_StartTextInput()"); 344 SDL_StopTextInput(window); 345 SDLTest_AssertPass("Call to SDL_StopTextInput()"); 346 347 /* Stop-Start */ 348 SDL_StartTextInput(window); 349 SDLTest_AssertPass("Call to SDL_StartTextInput()"); 350 351 /* Start-Start */ 352 SDL_StartTextInput(window); 353 SDLTest_AssertPass("Call to SDL_StartTextInput()"); 354 355 /* Stop-Stop */ 356 SDL_StopTextInput(window); 357 SDLTest_AssertPass("Call to SDL_StopTextInput()"); 358 SDL_StopTextInput(window); 359 SDLTest_AssertPass("Call to SDL_StopTextInput()"); 360 361 return TEST_COMPLETED; 362} 363 364/* Internal function to test SDL_SetTextInputArea */ 365static void testSetTextInputArea(SDL_Window *window, SDL_Rect refRect) 366{ 367 SDL_Rect testRect; 368 369 testRect = refRect; 370 SDL_SetTextInputArea(window, &testRect, 0); 371 SDLTest_AssertPass("Call to SDL_SetTextInputArea with refRect(x:%d,y:%d,w:%d,h:%d)", refRect.x, refRect.y, refRect.w, refRect.h); 372 SDLTest_AssertCheck( 373 (refRect.x == testRect.x) && (refRect.y == testRect.y) && (refRect.w == testRect.w) && (refRect.h == testRect.h), 374 "Check that input data was not modified, expected: x:%d,y:%d,w:%d,h:%d, got: x:%d,y:%d,w:%d,h:%d", 375 refRect.x, refRect.y, refRect.w, refRect.h, 376 testRect.x, testRect.y, testRect.w, testRect.h); 377} 378 379/** 380 * Check call to SDL_SetTextInputArea 381 * 382 * \sa SDL_SetTextInputArea 383 */ 384static int SDLCALL keyboard_setTextInputArea(void *arg) 385{ 386 SDL_Window *window = SDL_GetKeyboardFocus(); 387 SDL_Rect refRect; 388 389 /* Normal visible refRect, origin inside */ 390 refRect.x = SDLTest_RandomIntegerInRange(1, 50); 391 refRect.y = SDLTest_RandomIntegerInRange(1, 50); 392 refRect.w = SDLTest_RandomIntegerInRange(10, 50); 393 refRect.h = SDLTest_RandomIntegerInRange(10, 50); 394 testSetTextInputArea(window, refRect); 395 396 /* Normal visible refRect, origin 0,0 */ 397 refRect.x = 0; 398 refRect.y = 0; 399 refRect.w = SDLTest_RandomIntegerInRange(10, 50); 400 refRect.h = SDLTest_RandomIntegerInRange(10, 50); 401 testSetTextInputArea(window, refRect); 402 403 /* 1Pixel refRect */ 404 refRect.x = SDLTest_RandomIntegerInRange(10, 50); 405 refRect.y = SDLTest_RandomIntegerInRange(10, 50); 406 refRect.w = 1; 407 refRect.h = 1; 408 testSetTextInputArea(window, refRect); 409 410 /* 0pixel refRect */ 411 refRect.x = 1; 412 refRect.y = 1; 413 refRect.w = 1; 414 refRect.h = 0; 415 testSetTextInputArea(window, refRect); 416 417 /* 0pixel refRect */ 418 refRect.x = 1; 419 refRect.y = 1; 420 refRect.w = 0; 421 refRect.h = 1; 422 testSetTextInputArea(window, refRect); 423 424 /* 0pixel refRect */ 425 refRect.x = 1; 426 refRect.y = 1; 427 refRect.w = 0; 428 refRect.h = 0; 429 testSetTextInputArea(window, refRect); 430 431 /* 0pixel refRect */ 432 refRect.x = 0; 433 refRect.y = 0; 434 refRect.w = 0; 435 refRect.h = 0; 436 testSetTextInputArea(window, refRect); 437 438 /* negative refRect */ 439 refRect.x = SDLTest_RandomIntegerInRange(-200, -100); 440 refRect.y = SDLTest_RandomIntegerInRange(-200, -100); 441 refRect.w = 50; 442 refRect.h = 50; 443 testSetTextInputArea(window, refRect); 444 445 /* oversized refRect */ 446 refRect.x = SDLTest_RandomIntegerInRange(1, 50); 447 refRect.y = SDLTest_RandomIntegerInRange(1, 50); 448 refRect.w = 5000; 449 refRect.h = 5000; 450 testSetTextInputArea(window, refRect); 451 452 /* NULL refRect */ 453 SDL_SetTextInputArea(window, NULL, 0); 454 SDLTest_AssertPass("Call to SDL_SetTextInputArea(NULL)"); 455 456 return TEST_COMPLETED; 457} 458 459/** 460 * Check call to SDL_SetTextInputArea with invalid data 461 * 462 * \sa SDL_SetTextInputArea 463 */ 464static int SDLCALL keyboard_setTextInputAreaNegative(void *arg) 465{ 466 /* Some platforms set also an error message; prepare for checking it */ 467#if defined(SDL_VIDEO_DRIVER_WINDOWS) || defined(SDL_VIDEO_DRIVER_ANDROID) || defined(SDL_VIDEO_DRIVER_COCOA) 468 const char *expectedError = "Parameter 'rect' is invalid"; 469 const char *error; 470 471 SDL_ClearError(); 472 SDLTest_AssertPass("Call to SDL_ClearError()"); 473#endif 474 475 /* NULL refRect */ 476 SDL_SetTextInputArea(SDL_GetKeyboardFocus(), NULL, 0); 477 SDLTest_AssertPass("Call to SDL_SetTextInputArea(NULL)"); 478 479 /* Some platforms set also an error message; so check it */ 480#if defined(SDL_VIDEO_DRIVER_WINDOWS) || defined(SDL_VIDEO_DRIVER_ANDROID) || defined(SDL_VIDEO_DRIVER_COCOA) 481 error = SDL_GetError(); 482 SDLTest_AssertPass("Call to SDL_GetError()"); 483 SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); 484 if (error != NULL) { 485 SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, 486 "Validate error message, expected: '%s', got: '%s'", expectedError, error); 487 } 488 489 SDL_ClearError(); 490 SDLTest_AssertPass("Call to SDL_ClearError()"); 491#endif 492 493 return TEST_COMPLETED; 494} 495 496/** 497 * Check call to SDL_GetScancodeFromName 498 * 499 * \sa SDL_GetScancodeFromName 500 * \sa SDL_Keycode 501 */ 502static int SDLCALL keyboard_getScancodeFromName(void *arg) 503{ 504 SDL_Scancode scancode; 505 506 /* Regular key, 1 character, first name in list */ 507 scancode = SDL_GetScancodeFromName("A"); 508 SDLTest_AssertPass("Call to SDL_GetScancodeFromName('A')"); 509 SDLTest_AssertCheck(scancode == SDL_SCANCODE_A, "Validate return value from SDL_GetScancodeFromName, expected: %d, got: %d", SDL_SCANCODE_A, scancode); 510 511 /* Regular key, 1 character */ 512 scancode = SDL_GetScancodeFromName("4"); 513 SDLTest_AssertPass("Call to SDL_GetScancodeFromName('4')"); 514 SDLTest_AssertCheck(scancode == SDL_SCANCODE_4, "Validate return value from SDL_GetScancodeFromName, expected: %d, got: %d", SDL_SCANCODE_4, scancode); 515 516 /* Regular key, 2 characters */ 517 scancode = SDL_GetScancodeFromName("F1"); 518 SDLTest_AssertPass("Call to SDL_GetScancodeFromName('F1')"); 519 SDLTest_AssertCheck(scancode == SDL_SCANCODE_F1, "Validate return value from SDL_GetScancodeFromName, expected: %d, got: %d", SDL_SCANCODE_F1, scancode); 520 521 /* Regular key, 3 characters */ 522 scancode = SDL_GetScancodeFromName("End"); 523 SDLTest_AssertPass("Call to SDL_GetScancodeFromName('End')"); 524 SDLTest_AssertCheck(scancode == SDL_SCANCODE_END, "Validate return value from SDL_GetScancodeFromName, expected: %d, got: %d", SDL_SCANCODE_END, scancode); 525 526 /* Regular key, 4 characters */ 527 scancode = SDL_GetScancodeFromName("Find"); 528 SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Find')"); 529 SDLTest_AssertCheck(scancode == SDL_SCANCODE_FIND, "Validate return value from SDL_GetScancodeFromName, expected: %d, got: %d", SDL_SCANCODE_FIND, scancode); 530 531 /* Regular key, several characters */ 532 scancode = SDL_GetScancodeFromName("Backspace"); 533 SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Backspace')"); 534 SDLTest_AssertCheck(scancode == SDL_SCANCODE_BACKSPACE, "Validate return value from SDL_GetScancodeFromName, expected: %d, got: %d", SDL_SCANCODE_BACKSPACE, scancode); 535 536 /* Regular key, several characters with space */ 537 scancode = SDL_GetScancodeFromName("Keypad Enter"); 538 SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Keypad Enter')"); 539 SDLTest_AssertCheck(scancode == SDL_SCANCODE_KP_ENTER, "Validate return value from SDL_GetScancodeFromName, expected: %d, got: %d", SDL_SCANCODE_KP_ENTER, scancode); 540 541 /* Regular key, last name in list */ 542 scancode = SDL_GetScancodeFromName("Sleep"); 543 SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Sleep')"); 544 SDLTest_AssertCheck(scancode == SDL_SCANCODE_SLEEP, "Validate return value from SDL_GetScancodeFromName, expected: %d, got: %d", SDL_SCANCODE_SLEEP, scancode); 545 546 return TEST_COMPLETED; 547} 548 549/* 550 * Local helper to check for the invalid scancode error message 551 */ 552static void checkInvalidNameError(void) 553{ 554 const char *expectedError = "Parameter 'name' is invalid"; 555 const char *error; 556 error = SDL_GetError(); 557 SDLTest_AssertPass("Call to SDL_GetError()"); 558 SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); 559 if (error != NULL) { 560 SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, 561 "Validate error message, expected: '%s', got: '%s'", expectedError, error); 562 SDL_ClearError(); 563 SDLTest_AssertPass("Call to SDL_ClearError()"); 564 } 565} 566 567/** 568 * Check call to SDL_GetScancodeFromName with invalid data 569 * 570 * \sa SDL_GetScancodeFromName 571 * \sa SDL_Keycode 572 */ 573static int SDLCALL keyboard_getScancodeFromNameNegative(void *arg) 574{ 575 char *name; 576 SDL_Scancode scancode; 577 578 /* Clear error message */ 579 SDL_ClearError(); 580 SDLTest_AssertPass("Call to SDL_ClearError()"); 581 582 /* Random string input */ 583 name = SDLTest_RandomAsciiStringOfSize(32); 584 SDLTest_Assert(name != NULL, "Check that random name is not NULL"); 585 if (name == NULL) { 586 return TEST_ABORTED; 587 } 588 scancode = SDL_GetScancodeFromName(name); 589 SDLTest_AssertPass("Call to SDL_GetScancodeFromName('%s')", name); 590 SDL_free(name); 591 SDLTest_AssertCheck(scancode == SDL_SCANCODE_UNKNOWN, "Validate return value from SDL_GetScancodeFromName, expected: %d, got: %d", SDL_SCANCODE_UNKNOWN, scancode); 592 checkInvalidNameError(); 593 594 /* Zero length string input */ 595 name = ""; 596 scancode = SDL_GetScancodeFromName(name); 597 SDLTest_AssertPass("Call to SDL_GetScancodeFromName(NULL)"); 598 SDLTest_AssertCheck(scancode == SDL_SCANCODE_UNKNOWN, "Validate return value from SDL_GetScancodeFromName, expected: %d, got: %d", SDL_SCANCODE_UNKNOWN, scancode); 599 checkInvalidNameError(); 600 601 /* NULL input */ 602 name = NULL; 603 scancode = SDL_GetScancodeFromName(name); 604 SDLTest_AssertPass("Call to SDL_GetScancodeFromName(NULL)"); 605 SDLTest_AssertCheck(scancode == SDL_SCANCODE_UNKNOWN, "Validate return value from SDL_GetScancodeFromName, expected: %d, got: %d", SDL_SCANCODE_UNKNOWN, scancode); 606 checkInvalidNameError(); 607 608 return TEST_COMPLETED; 609} 610 611/* ================= Test References ================== */ 612 613/* Keyboard test cases */ 614static const SDLTest_TestCaseReference keyboardTestGetKeyboardState = { 615 keyboard_getKeyboardState, "keyboard_getKeyboardState", "Check call to SDL_GetKeyboardState with and without numkeys reference", TEST_ENABLED 616}; 617 618static const SDLTest_TestCaseReference keyboardTestGetKeyboardFocus = { 619 keyboard_getKeyboardFocus, "keyboard_getKeyboardFocus", "Check call to SDL_GetKeyboardFocus", TEST_ENABLED 620}; 621 622static const SDLTest_TestCaseReference keyboardTestGetKeyFromName = { 623 keyboard_getKeyFromName, "keyboard_getKeyFromName", "Check call to SDL_GetKeyFromName for known, unknown and invalid name", TEST_ENABLED 624}; 625 626static const SDLTest_TestCaseReference keyboardTestGetKeyFromScancode = { 627 keyboard_getKeyFromScancode, "keyboard_getKeyFromScancode", "Check call to SDL_GetKeyFromScancode", TEST_ENABLED 628}; 629 630static const SDLTest_TestCaseReference keyboardTestGetKeyName = { 631 keyboard_getKeyName, "keyboard_getKeyName", "Check call to SDL_GetKeyName", TEST_ENABLED 632}; 633 634static const SDLTest_TestCaseReference keyboardTestGetSetModState = { 635 keyboard_getSetModState, "keyboard_getSetModState", "Check call to SDL_GetModState and SDL_SetModState", TEST_ENABLED 636}; 637 638static const SDLTest_TestCaseReference keyboardTestStartStopTextInput = { 639 keyboard_startStopTextInput, "keyboard_startStopTextInput", "Check call to SDL_StartTextInput and SDL_StopTextInput", TEST_ENABLED 640}; 641 642static const SDLTest_TestCaseReference keyboardTestSetTextInputArea = { 643 keyboard_setTextInputArea, "keyboard_setTextInputArea", "Check call to SDL_SetTextInputArea", TEST_ENABLED 644}; 645 646static const SDLTest_TestCaseReference keyboardTestSetTextInputAreaNegative = { 647 keyboard_setTextInputAreaNegative, "keyboard_setTextInputAreaNegative", "Check call to SDL_SetTextInputArea with invalid data", TEST_ENABLED 648}; 649 650static const SDLTest_TestCaseReference keyboardTestGetScancodeFromName = { 651 keyboard_getScancodeFromName, "keyboard_getScancodeFromName", "Check call to SDL_GetScancodeFromName", TEST_ENABLED 652}; 653 654static const SDLTest_TestCaseReference keyboardTestGetScancodeFromNameNegative = { 655 keyboard_getScancodeFromNameNegative, "keyboard_getScancodeFromNameNegative", "Check call to SDL_GetScancodeFromName with invalid data", TEST_ENABLED 656}; 657 658static const SDLTest_TestCaseReference keyboardTestGetKeyNameNegative = { 659 keyboard_getKeyNameNegative, "keyboard_getKeyNameNegative", "Check call to SDL_GetKeyName with invalid data", TEST_ENABLED 660}; 661 662static const SDLTest_TestCaseReference keyboardTestGetScancodeNameNegative = { 663 keyboard_getScancodeNameNegative, "keyboard_getScancodeNameNegative", "Check call to SDL_GetScancodeName with invalid data", TEST_ENABLED 664}; 665 666/* Sequence of Keyboard test cases */ 667static const SDLTest_TestCaseReference *keyboardTests[] = { 668 &keyboardTestGetKeyboardState, 669 &keyboardTestGetKeyboardFocus, 670 &keyboardTestGetKeyFromName, 671 &keyboardTestGetKeyFromScancode, 672 &keyboardTestGetKeyName, 673 &keyboardTestGetSetModState, 674 &keyboardTestStartStopTextInput, 675 &keyboardTestSetTextInputArea, 676 &keyboardTestSetTextInputAreaNegative, 677 &keyboardTestGetScancodeFromName, 678 &keyboardTestGetScancodeFromNameNegative, 679 &keyboardTestGetKeyNameNegative, 680 &keyboardTestGetScancodeNameNegative, 681 NULL 682}; 683 684/* Keyboard test suite (global) */ 685SDLTest_TestSuiteReference keyboardTestSuite = { 686 "Keyboard", 687 NULL, 688 keyboardTests, 689 NULL 690}; 691[FILE END](C) 2025 0x4248 (C) 2025 4248 Media and 4248 Systems, All part of 0x4248 See LICENCE files for more information. Not all files are by 0x4248 always check Licencing.