/**
 * Hints test suite
 */

#include <stdio.h>

#include "SDL.h"
#include "SDL_test.h"


const char* _HintsEnum[] =
  {
    SDL_HINT_ACCELEROMETER_AS_JOYSTICK,
    SDL_HINT_FRAMEBUFFER_ACCELERATION,
    SDL_HINT_GAMECONTROLLERCONFIG,
    SDL_HINT_GRAB_KEYBOARD,
    SDL_HINT_IDLE_TIMER_DISABLED,
    SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS,
    SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK,
    SDL_HINT_MOUSE_RELATIVE_MODE_WARP,
    SDL_HINT_ORIENTATIONS,
    SDL_HINT_RENDER_DIRECT3D_THREADSAFE,
    SDL_HINT_RENDER_DRIVER,
    SDL_HINT_RENDER_OPENGL_SHADERS,
    SDL_HINT_RENDER_SCALE_QUALITY,
    SDL_HINT_RENDER_VSYNC,
    SDL_HINT_TIMER_RESOLUTION,
    SDL_HINT_VIDEO_ALLOW_SCREENSAVER,
    SDL_HINT_VIDEO_HIGHDPI_DISABLED,
    SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES,
    SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS,
    SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT,
    SDL_HINT_VIDEO_WIN_D3DCOMPILER,
    SDL_HINT_VIDEO_X11_XRANDR,
    SDL_HINT_XINPUT_ENABLED,
  };
const char* _HintsVerbose[] =
  {
    "SDL_ACCELEROMETER_AS_JOYSTICK",
    "SDL_FRAMEBUFFER_ACCELERATION",
    "SDL_GAMECONTROLLERCONFIG",
    "SDL_GRAB_KEYBOARD",
    "SDL_IDLE_TIMER_DISABLED",
    "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS",
    "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK",
    "SDL_MOUSE_RELATIVE_MODE_WARP",
    "SDL_ORIENTATIONS",
    "SDL_RENDER_DIRECT3D_THREADSAFE",
    "SDL_RENDER_DRIVER",
    "SDL_RENDER_OPENGL_SHADERS",
    "SDL_RENDER_SCALE_QUALITY",
    "SDL_RENDER_VSYNC",
    "SDL_TIMER_RESOLUTION",
    "SDL_VIDEO_ALLOW_SCREENSAVER",
    "SDL_VIDEO_HIGHDPI_DISABLED",
    "SDL_VIDEO_MAC_FULLSCREEN_SPACES",
    "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS",
    "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT",
    "SDL_VIDEO_WIN_D3DCOMPILER",
    "SDL_VIDEO_X11_XRANDR",
    "SDL_XINPUT_ENABLED"
  };

SDL_COMPILE_TIME_ASSERT(HintsEnum, SDL_arraysize(_HintsEnum) == SDL_arraysize(_HintsVerbose));

const int _numHintsEnum = SDL_arraysize(_HintsEnum);

/* Test case functions */

/**
 * @brief Call to SDL_GetHint
 */
int
hints_getHint(void *arg)
{
  const char *result1;
  const char *result2;
  int i;

  for (i=0; i<_numHintsEnum; i++) {
    result1 = SDL_GetHint(_HintsEnum[i]);
    SDLTest_AssertPass("Call to SDL_GetHint(%s) - using define definition", (char*)_HintsEnum[i]);
    result2 = SDL_GetHint(_HintsVerbose[i]);
    SDLTest_AssertPass("Call to SDL_GetHint(%s) - using string definition", (char*)_HintsVerbose[i]);
    SDLTest_AssertCheck(
      (result1 == NULL && result2 == NULL) || (SDL_strcmp(result1, result2) == 0),
      "Verify returned values are equal; got: result1='%s' result2='%s",
      (result1 == NULL) ? "null" : result1,
      (result2 == NULL) ? "null" : result2);
  }

  return TEST_COMPLETED;
}

static void SDLCALL hints_testHintChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
{
  *(char **)userdata = hint ? SDL_strdup(hint) : NULL;
}

/**
 * @brief Call to SDL_SetHint
 */
int
hints_setHint(void *arg)
{
  const char *testHint = "SDL_AUTOMATED_TEST_HINT";
  const char *originalValue;
  char *value;
  const char *testValue;
  char *callbackValue;
  SDL_bool result;
  int i, j;

  /* Create random values to set */
  value = SDLTest_RandomAsciiStringOfSize(10);

  for (i=0; i<_numHintsEnum; i++) {
    /* Capture current value */
    originalValue = SDL_GetHint(_HintsEnum[i]);
    SDLTest_AssertPass("Call to SDL_GetHint(%s)", _HintsEnum[i]);

    /* Copy the original value, since it will be freed when we set it again */
    originalValue = originalValue ? SDL_strdup(originalValue) : NULL;

    /* Set value (twice) */
    for (j=1; j<=2; j++) {
      result = SDL_SetHint(_HintsEnum[i], value);
      SDLTest_AssertPass("Call to SDL_SetHint(%s, %s) (iteration %i)", _HintsEnum[i], value, j);
      SDLTest_AssertCheck(
        result == SDL_TRUE || result == SDL_FALSE, 
        "Verify valid result was returned, got: %i",
        (int)result);
      testValue = SDL_GetHint(_HintsEnum[i]);
      SDLTest_AssertPass("Call to SDL_GetHint(%s) - using string definition", _HintsVerbose[i]);
      SDLTest_AssertCheck(
        (SDL_strcmp(value, testValue) == 0),
        "Verify returned value equals set value; got: testValue='%s' value='%s",
        (testValue == NULL) ? "null" : testValue,
        value);
    }

    /* Reset original value */
    result = SDL_SetHint(_HintsEnum[i], originalValue);
    SDLTest_AssertPass("Call to SDL_SetHint(%s, originalValue)", _HintsEnum[i]);
    SDLTest_AssertCheck(
      result == SDL_TRUE || result == SDL_FALSE, 
      "Verify valid result was returned, got: %i",
      (int)result);
    SDL_free((void *)originalValue);
  }

  SDL_free(value);

  /* Set default value in environment */
  SDL_setenv(testHint, "original", 1);

  SDLTest_AssertPass("Call to SDL_GetHint() after saving and restoring hint");
  originalValue = SDL_GetHint(testHint);
  value = (originalValue == NULL) ? NULL : SDL_strdup(originalValue);
  SDL_SetHint(testHint, "temp");
  SDL_SetHint(testHint, value);
  SDL_free(value);
  testValue = SDL_GetHint(testHint);
  SDLTest_AssertCheck(
    testValue && SDL_strcmp(testValue, "original") == 0,
    "testValue = %s, expected \"original\"",
    testValue);

  SDLTest_AssertPass("Call to SDL_SetHintWithPriority(NULL, SDL_HINT_DEFAULT)");
  SDL_SetHintWithPriority(testHint, NULL, SDL_HINT_DEFAULT);
  testValue = SDL_GetHint(testHint);
  SDLTest_AssertCheck(
    testValue && SDL_strcmp(testValue, "original") == 0,
    "testValue = %s, expected \"original\"",
    testValue);

  SDLTest_AssertPass("Call to SDL_SetHintWithPriority(\"temp\", SDL_HINT_OVERRIDE)");
  SDL_SetHintWithPriority(testHint, "temp", SDL_HINT_OVERRIDE);
  testValue = SDL_GetHint(testHint);
  SDLTest_AssertCheck(
    testValue && SDL_strcmp(testValue, "temp") == 0,
    "testValue = %s, expected \"temp\"",
    testValue);

  SDLTest_AssertPass("Call to SDL_SetHintWithPriority(NULL, SDL_HINT_OVERRIDE)");
  SDL_SetHintWithPriority(testHint, NULL, SDL_HINT_OVERRIDE);
  testValue = SDL_GetHint(testHint);
  SDLTest_AssertCheck(
    testValue == NULL,
    "testValue = %s, expected NULL",
    testValue);

  SDLTest_AssertPass("Call to SDL_ResetHint()");
  SDL_ResetHint(testHint);
  testValue = SDL_GetHint(testHint);
  SDLTest_AssertCheck(
    testValue && SDL_strcmp(testValue, "original") == 0,
    "testValue = %s, expected \"original\"",
    testValue);

  /* Make sure callback functionality works past a reset */
  SDLTest_AssertPass("Call to SDL_AddHintCallback()");
  callbackValue = NULL;
  SDL_AddHintCallback(testHint, hints_testHintChanged, &callbackValue);
  SDLTest_AssertCheck(
    callbackValue && SDL_strcmp(callbackValue, "original") == 0,
    "callbackValue = %s, expected \"original\"",
    callbackValue);
  SDL_free(callbackValue);

  SDLTest_AssertPass("Call to SDL_SetHintWithPriority(\"temp\", SDL_HINT_OVERRIDE), using callback");
  callbackValue = NULL;
  SDL_SetHintWithPriority(testHint, "temp", SDL_HINT_OVERRIDE);
  SDLTest_AssertCheck(
      callbackValue && SDL_strcmp(callbackValue, "temp") == 0,
      "callbackValue = %s, expected \"temp\"",
      callbackValue);
  SDL_free(callbackValue);

  SDLTest_AssertPass("Call to SDL_ResetHint(), using callback");
  callbackValue = NULL;
  SDL_ResetHint(testHint);
  SDLTest_AssertCheck(
    callbackValue && SDL_strcmp(callbackValue, "original") == 0,
    "callbackValue = %s, expected \"original\"",
    callbackValue);

  SDLTest_AssertPass("Call to SDL_SetHintWithPriority(\"temp\", SDL_HINT_OVERRIDE), using callback after reset");
  callbackValue = NULL;
  SDL_SetHintWithPriority(testHint, "temp", SDL_HINT_OVERRIDE);
  SDLTest_AssertCheck(
      callbackValue && SDL_strcmp(callbackValue, "temp") == 0,
      "callbackValue = %s, expected \"temp\"",
      callbackValue);
  SDL_free(callbackValue);

  SDLTest_AssertPass("Call to SDL_ResetHint(), after clearing callback");
  callbackValue = NULL;
  SDL_DelHintCallback(testHint, hints_testHintChanged, &callbackValue);
  SDL_ResetHint(testHint);
  SDLTest_AssertCheck(
    callbackValue == NULL,
    "callbackValue = %s, expected \"(null)\"",
    callbackValue);

  return TEST_COMPLETED;
}

/* ================= Test References ================== */

/* Hints test cases */
static const SDLTest_TestCaseReference hintsTest1 =
        { (SDLTest_TestCaseFp)hints_getHint, "hints_getHint", "Call to SDL_GetHint", TEST_ENABLED };

static const SDLTest_TestCaseReference hintsTest2 =
        { (SDLTest_TestCaseFp)hints_setHint, "hints_setHint", "Call to SDL_SetHint", TEST_ENABLED };

/* Sequence of Hints test cases */
static const SDLTest_TestCaseReference *hintsTests[] =  {
    &hintsTest1, &hintsTest2, NULL
};

/* Hints test suite (global) */
SDLTest_TestSuiteReference hintsTestSuite = {
    "Hints",
    NULL,
    hintsTests,
    NULL
};
