test/testautomation_hints.c
author Sam Lantinga <slouken@libsdl.org>
Thu, 07 Dec 2017 16:08:09 -0800
changeset 11730 ac6c607e065c
parent 8645 d69fdbefeecf
permissions -rw-r--r--
Enable building the Metal renderer by default, and weak link the Metal framework so the SDL library is safe to use on older Macs
Also generate iOS versions of the Metal shaders
     1 /**
     2  * Hints test suite
     3  */
     4 
     5 #include <stdio.h>
     6 
     7 #include "SDL.h"
     8 #include "SDL_test.h"
     9 
    10 
    11 const int _numHintsEnum = 25;
    12 char* _HintsEnum[] =
    13   {
    14     SDL_HINT_ACCELEROMETER_AS_JOYSTICK,
    15     SDL_HINT_FRAMEBUFFER_ACCELERATION,
    16     SDL_HINT_GAMECONTROLLERCONFIG,
    17     SDL_HINT_GRAB_KEYBOARD,
    18     SDL_HINT_IDLE_TIMER_DISABLED,
    19     SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS,
    20     SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK,
    21     SDL_HINT_MOUSE_RELATIVE_MODE_WARP,
    22     SDL_HINT_ORIENTATIONS,
    23     SDL_HINT_RENDER_DIRECT3D_THREADSAFE,
    24     SDL_HINT_RENDER_DRIVER,
    25     SDL_HINT_RENDER_OPENGL_SHADERS,
    26     SDL_HINT_RENDER_SCALE_QUALITY,
    27     SDL_HINT_RENDER_VSYNC,
    28     SDL_HINT_TIMER_RESOLUTION,
    29     SDL_HINT_VIDEO_ALLOW_SCREENSAVER,
    30     SDL_HINT_VIDEO_HIGHDPI_DISABLED,
    31     SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES,
    32     SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS,
    33     SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT,
    34     SDL_HINT_VIDEO_WIN_D3DCOMPILER,
    35     SDL_HINT_VIDEO_X11_XINERAMA,
    36     SDL_HINT_VIDEO_X11_XRANDR,
    37     SDL_HINT_VIDEO_X11_XVIDMODE,
    38     SDL_HINT_XINPUT_ENABLED,
    39   };
    40 char* _HintsVerbose[] =
    41   {
    42     "SDL_HINT_ACCELEROMETER_AS_JOYSTICK",
    43     "SDL_HINT_FRAMEBUFFER_ACCELERATION",
    44     "SDL_HINT_GAMECONTROLLERCONFIG",
    45     "SDL_HINT_GRAB_KEYBOARD",
    46     "SDL_HINT_IDLE_TIMER_DISABLED",
    47     "SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS",
    48     "SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK",
    49     "SDL_HINT_MOUSE_RELATIVE_MODE_WARP",
    50     "SDL_HINT_ORIENTATIONS",
    51     "SDL_HINT_RENDER_DIRECT3D_THREADSAFE",
    52     "SDL_HINT_RENDER_DRIVER",
    53     "SDL_HINT_RENDER_OPENGL_SHADERS",
    54     "SDL_HINT_RENDER_SCALE_QUALITY",
    55     "SDL_HINT_RENDER_VSYNC",
    56     "SDL_HINT_TIMER_RESOLUTION",
    57     "SDL_HINT_VIDEO_ALLOW_SCREENSAVER",
    58     "SDL_HINT_VIDEO_HIGHDPI_DISABLED",
    59     "SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES",
    60     "SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS",
    61     "SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT",
    62     "SDL_HINT_VIDEO_WIN_D3DCOMPILER",
    63     "SDL_HINT_VIDEO_X11_XINERAMA",
    64     "SDL_HINT_VIDEO_X11_XRANDR",
    65     "SDL_HINT_VIDEO_X11_XVIDMODE",
    66     "SDL_HINT_XINPUT_ENABLED"
    67   };
    68 
    69 
    70 /* Test case functions */
    71 
    72 /**
    73  * @brief Call to SDL_GetHint
    74  */
    75 int
    76 hints_getHint(void *arg)
    77 {
    78   char *result1;
    79   char *result2;
    80   int i;
    81     
    82   for (i=0; i<_numHintsEnum; i++) {
    83     result1 = (char *)SDL_GetHint((char*)_HintsEnum[i]);
    84     SDLTest_AssertPass("Call to SDL_GetHint(%s) - using define definition", (char*)_HintsEnum[i]);
    85     result2 = (char *)SDL_GetHint((char *)_HintsVerbose[i]);
    86     SDLTest_AssertPass("Call to SDL_GetHint(%s) - using string definition", (char*)_HintsVerbose[i]);
    87     SDLTest_AssertCheck(
    88       (result1 == NULL && result2 == NULL) || (SDL_strcmp(result1, result2) == 0),
    89       "Verify returned values are equal; got: result1='%s' result2='%s",
    90       (result1 == NULL) ? "null" : result1,
    91       (result2 == NULL) ? "null" : result2);
    92   }
    93   
    94   return TEST_COMPLETED;
    95 }
    96 
    97 /**
    98  * @brief Call to SDL_SetHint
    99  */
   100 int
   101 hints_setHint(void *arg)
   102 {
   103   char *originalValue;
   104   char *value;
   105   char *testValue;
   106   SDL_bool result;
   107   int i, j;
   108 
   109   /* Create random values to set */                    
   110   value = SDLTest_RandomAsciiStringOfSize(10);
   111     
   112   for (i=0; i<_numHintsEnum; i++) {
   113     /* Capture current value */
   114     originalValue = (char *)SDL_GetHint((char*)_HintsEnum[i]);
   115     SDLTest_AssertPass("Call to SDL_GetHint(%s)", (char*)_HintsEnum[i]);
   116     
   117     /* Set value (twice) */
   118     for (j=1; j<=2; j++) {
   119       result = SDL_SetHint((char*)_HintsEnum[i], value);
   120       SDLTest_AssertPass("Call to SDL_SetHint(%s, %s) (iteration %i)", (char*)_HintsEnum[i], value, j);
   121       SDLTest_AssertCheck(
   122         result == SDL_TRUE || result == SDL_FALSE, 
   123         "Verify valid result was returned, got: %i",
   124         (int)result);
   125       testValue = (char *)SDL_GetHint((char*)_HintsEnum[i]);
   126       SDLTest_AssertPass("Call to SDL_GetHint(%s) - using string definition", (char*)_HintsVerbose[i]);
   127       SDLTest_AssertCheck(
   128         (SDL_strcmp(value, testValue) == 0),
   129         "Verify returned value equals set value; got: testValue='%s' value='%s",
   130         (testValue == NULL) ? "null" : testValue,
   131         value);
   132     }
   133       
   134     /* Reset original value */
   135     result = SDL_SetHint((char*)_HintsEnum[i], originalValue);
   136     SDLTest_AssertPass("Call to SDL_SetHint(%s, originalValue)", (char*)_HintsEnum[i]);
   137     SDLTest_AssertCheck(
   138       result == SDL_TRUE || result == SDL_FALSE, 
   139       "Verify valid result was returned, got: %i",
   140       (int)result);
   141   }
   142   
   143   SDL_free(value);
   144   
   145   return TEST_COMPLETED;
   146 }
   147 
   148 /* ================= Test References ================== */
   149 
   150 /* Hints test cases */
   151 static const SDLTest_TestCaseReference hintsTest1 =
   152         { (SDLTest_TestCaseFp)hints_getHint, "hints_getHint", "Call to SDL_GetHint", TEST_ENABLED };
   153 
   154 static const SDLTest_TestCaseReference hintsTest2 =
   155         { (SDLTest_TestCaseFp)hints_setHint, "hints_setHint", "Call to SDL_SetHint", TEST_ENABLED };
   156 
   157 /* Sequence of Hints test cases */
   158 static const SDLTest_TestCaseReference *hintsTests[] =  {
   159     &hintsTest1, &hintsTest2, NULL
   160 };
   161 
   162 /* Hints test suite (global) */
   163 SDLTest_TestSuiteReference hintsTestSuite = {
   164     "Hints",
   165     NULL,
   166     hintsTests,
   167     NULL
   168 };