test/testautomation_hints.c
author Ryan C. Gordon <icculus@icculus.org>
Thu, 19 Feb 2015 23:52:10 -0500
changeset 9370 795d4866e4db
parent 8645 d69fdbefeecf
permissions -rw-r--r--
Mac OS X: Better way to stop duplicate joystick reports (thanks, Kyungdahm!).

Fixes Bugzilla #2822.
     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 };