# sdl2-compat: test: pulled in some libSDL2\_test improvements recently made to real SDL2.

**URL:** <https://discourse.libsdl.org/t/sdl2-compat-test-pulled-in-some-libsdl2-test-improvements-recently-made-to-real-sdl2/47608>\
**Category:** SDL Commits\
**Created:** [November 30, 2023, 2:04am UTC](https://discourse.libsdl.org/t/sdl2-compat-test-pulled-in-some-libsdl2-test-improvements-recently-made-to-real-sdl2/47608 "2023-11-30T02:04:01Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![SDLPushPostBot](https://discourse.libsdl.org/user_avatar/discourse.libsdl.org/sdlpushpostbot/32/4370_2.png) [@SDLPushPostBot](https://discourse.libsdl.org/u/SDLPushPostBot)\
**Post date:** [November 30, 2023, 2:04am UTC](https://discourse.libsdl.org/t/sdl2-compat-test-pulled-in-some-libsdl2-test-improvements-recently-made-to-real-sdl2/47608/1 "2023-11-30T02:04:02Z")

</div>

> <https://github.com/libsdl-org/sdl2-compat/commit/ad98f071b8af3572c801b5382258ea3d8a85e889>

```diff
From ad98f071b8af3572c801b5382258ea3d8a85e889 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Wed, 29 Nov 2023 21:02:41 -0500
Subject: [PATCH] test: pulled in some libSDL2_test improvements recently made
 to real SDL2.

---
 src/test/SDL_test_common.c | 111 ++++++++++++++++++++++++++++++++++---
 1 file changed, 102 insertions(+), 9 deletions(-)

diff --git a/src/test/SDL_test_common.c b/src/test/SDL_test_common.c
index 350887c..f58316e 100644
--- a/src/test/SDL_test_common.c
+++ b/src/test/SDL_test_common.c
@@ -803,6 +803,82 @@ static void SDLTest_PrintWindowFlags(char *text, size_t maxlen, Uint32 flags)
     }
 }
 
+static void SDLTest_PrintModStateFlag(char *text, size_t maxlen, SDL_Keymod flag)
+{
+ switch (flag) {
+ case KMOD_LSHIFT:
+ SDL_snprintfcat(text, maxlen, "LSHIFT");
+ break;
+ case KMOD_RSHIFT:
+ SDL_snprintfcat(text, maxlen, "RSHIFT");
+ break;
+ case KMOD_LCTRL:
+ SDL_snprintfcat(text, maxlen, "LCTRL");
+ break;
+ case KMOD_RCTRL:
+ SDL_snprintfcat(text, maxlen, "RCTRL");
+ break;
+ case KMOD_LALT:
+ SDL_snprintfcat(text, maxlen, "LALT");
+ break;
+ case KMOD_RALT:
+ SDL_snprintfcat(text, maxlen, "RALT");
+ break;
+ case KMOD_LGUI:
+ SDL_snprintfcat(text, maxlen, "LGUI");
+ break;
+ case KMOD_RGUI:
+ SDL_snprintfcat(text, maxlen, "RGUI");
+ break;
+ case KMOD_NUM:
+ SDL_snprintfcat(text, maxlen, "NUM");
+ break;
+ case KMOD_CAPS:
+ SDL_snprintfcat(text, maxlen, "CAPS");
+ break;
+ case KMOD_MODE:
+ SDL_snprintfcat(text, maxlen, "MODE");
+ break;
+ case KMOD_SCROLL:
+ SDL_snprintfcat(text, maxlen, "SCROLL");
+ break;
+ default:
+ SDL_snprintfcat(text, maxlen, "0x%8.8x", (unsigned int) flag);
+ break;
+ }
+}
+
+static void SDLTest_PrintModState(char *text, size_t maxlen, SDL_Keymod keymod)
+{
+ const SDL_Keymod kmod_flags[] = {
+ KMOD_LSHIFT,
+ KMOD_RSHIFT,
+ KMOD_LCTRL,
+ KMOD_RCTRL,
+ KMOD_LALT,
+ KMOD_RALT,
+ KMOD_LGUI,
+ KMOD_RGUI,
+ KMOD_NUM,
+ KMOD_CAPS,
+ KMOD_MODE,
+ KMOD_SCROLL
+ };
+
+ int i;
+ int count = 0;
+ for (i = 0; i < SDL_arraysize(kmod_flags); ++i) {
+ const SDL_Keymod flag = kmod_flags[i];
+ if ((keymod & flag) == flag) {
+ if (count > 0) {
+ SDL_snprintfcat(text, maxlen, " | ");
+ }
+ SDLTest_PrintModStateFlag(text, maxlen, flag);
+ ++count;
+ }
+ }
+}
+
 static void SDLTest_PrintButtonMask(char *text, size_t maxlen, Uint32 flags)
 {
     int i;
@@ -1554,19 +1630,23 @@ static void SDLTest_PrintEvent(SDL_Event *event)
         }
         break;
     case SDL_KEYDOWN:
- SDL_Log("SDL EVENT: Keyboard: key pressed in window %" SDL_PRIu32 ": scancode 0x%08X = %s, keycode 0x%08" SDL_PRIX32 " = %s",
- event->key.windowID,
- event->key.keysym.scancode,
- SDL_GetScancodeName(event->key.keysym.scancode),
- event->key.keysym.sym, SDL_GetKeyName(event->key.keysym.sym));
- break;
- case SDL_KEYUP:
- SDL_Log("SDL EVENT: Keyboard: key released in window %" SDL_PRIu32 ": scancode 0x%08X = %s, keycode 0x%08" SDL_PRIX32 " = %s",
+ case SDL_KEYUP: {
+ char modstr[64];
+ if (event->key.keysym.mod) {
+ modstr[0] = '\0';
+ SDLTest_PrintModState(modstr, sizeof (modstr), event->key.keysym.mod);
+ } else {
+ SDL_strlcpy(modstr, "NONE", sizeof (modstr));
+ }
+ SDL_Log("SDL EVENT: Keyboard: key %s in window %" SDL_PRIu32 ": scancode 0x%08X = %s, keycode 0x%08" SDL_PRIX32 " = %s, mods = %s",
+ (event->type == SDL_KEYDOWN) ? "pressed" : "released",
                 event->key.windowID,
                 event->key.keysym.scancode,
                 SDL_GetScancodeName(event->key.keysym.scancode),
- event->key.keysym.sym, SDL_GetKeyName(event->key.keysym.sym));
+ event->key.keysym.sym, SDL_GetKeyName(event->key.keysym.sym),
+ modstr);
         break;
+ }
     case SDL_TEXTEDITING:
         SDL_Log("SDL EVENT: Keyboard: text editing \"%s\" in window %" SDL_PRIu32,
                 event->edit.text, event->edit.windowID);
@@ -2401,6 +2481,19 @@ void SDLTest_CommonDrawWindowInfo(SDL_Renderer *renderer, SDL_Window *window, in
     SDLTest_DrawString(renderer, 0, textY, text);
     textY += lineHeight;
 
+ /* Keyboard */
+
+ SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
+ SDLTest_DrawString(renderer, 0, textY, "-- Keyboard --");
+ textY += lineHeight;
+
+ SDL_SetRenderDrawColor(renderer, 170, 170, 170, 255);
+
+ (void)SDL_snprintf(text, sizeof(text), "SDL_GetModState: ");
+ SDLTest_PrintModState(text, sizeof(text), SDL_GetModState());
+ SDLTest_DrawString(renderer, 0, textY, text);
+ textY += lineHeight;
+
     if (usedHeight) {
         *usedHeight = textY;
     }

```
