SDL: testautomation: add an option to list all test suites and tests

From 80f51eeb1fc2d4637ade4dc9020623649ed38562 Mon Sep 17 00:00:00 2001
From: Sylvain <[EMAIL REDACTED]>
Date: Mon, 16 Jan 2023 10:50:52 +0100
Subject: [PATCH] testautomation: add an option to list all test suites and
 tests

---
 test/testautomation.c        | 21 ++++++++++++++++++++-
 test/testautomation_suites.h |  2 +-
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/test/testautomation.c b/test/testautomation.c
index c07ffdc16a61..60697040b3f7 100644
--- a/test/testautomation.c
+++ b/test/testautomation.c
@@ -37,6 +37,7 @@ int main(int argc, char *argv[])
     char *filter = NULL;
     int i, done;
     SDL_Event event;
+    int list = 0;
 
     /* Initialize test framework */
     state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
@@ -74,10 +75,13 @@ int main(int argc, char *argv[])
                     filter = SDL_strdup(argv[i + 1]);
                     consumed = 2;
                 }
+            } else if (SDL_strcasecmp(argv[i], "--list") == 0) {
+                consumed = 1;
+                list = 1;
             }
         }
         if (consumed < 0) {
-            static const char *options[] = { "[--iterations #]", "[--execKey #]", "[--seed string]", "[--filter suite_name|test_name]", NULL };
+            static const char *options[] = { "[--iterations #]", "[--execKey #]", "[--seed string]", "[--filter suite_name|test_name]", "[--list]", NULL };
             SDLTest_CommonLogUsage(state, argv[0], options);
             quit(1);
         }
@@ -85,6 +89,21 @@ int main(int argc, char *argv[])
         i += consumed;
     }
 
+    /* List all suites. */
+    if (list) {
+        int suiteCounter;
+        for (suiteCounter = 0; testSuites[suiteCounter]; ++suiteCounter) {
+            int testCounter;
+            SDLTest_TestSuiteReference *testSuite = testSuites[suiteCounter];
+            SDL_Log("Test suite: %s", testSuite->name);
+            for (testCounter = 0; testSuite->testCases[testCounter]; ++testCounter) {
+                const SDLTest_TestCaseReference *testCase = testSuite->testCases[testCounter];
+                SDL_Log("      test: %s", testCase->name);
+            }
+        }
+        return 0;
+    }
+
     /* Initialize common state */
     if (!SDLTest_CommonInit(state)) {
         quit(2);
diff --git a/test/testautomation_suites.h b/test/testautomation_suites.h
index 48f6d49dba19..ab0e86b68d7e 100644
--- a/test/testautomation_suites.h
+++ b/test/testautomation_suites.h
@@ -32,7 +32,7 @@ extern SDLTest_TestSuiteReference timerTestSuite;
 extern SDLTest_TestSuiteReference videoTestSuite;
 
 /* All test suites */
-SDLTest_TestSuiteReference *testSuites[] = {
+static SDLTest_TestSuiteReference *testSuites[] = {
     &audioTestSuite,
     &clipboardTestSuite,
     &eventsTestSuite,