test/testautomation_events.c
author Alex Baines <alex@abaines.me.uk>
Tue, 19 Aug 2014 23:31:50 +0100
changeset 9097 56d712662a82
parent 7677 871d43c6968a
child 10517 563edd87e287
permissions -rw-r--r--
Add a SDL_IM_INTERNAL_EDITING event to make IMs like iBus render editing text in its own UI instead of sending TEXTEDITING events.
This is useful for applications that handle TEXTINPUT events but not TEXTEDITING events.
     1 /**
     2  * Events test suite
     3  */
     4 
     5 #include <stdio.h>
     6 
     7 #include "SDL.h"
     8 #include "SDL_test.h"
     9 
    10 /* ================= Test Case Implementation ================== */
    11 
    12 /* Test case functions */
    13 
    14 /* Flag indicating if the userdata should be checked */
    15 int _userdataCheck = 0;
    16 
    17 /* Userdata value to check */
    18 int _userdataValue = 0;
    19 
    20 /* Flag indicating that the filter was called */
    21 int _eventFilterCalled = 0;
    22 
    23 /* Userdata values for event */
    24 int _userdataValue1 = 1;
    25 int _userdataValue2 = 2;
    26 
    27 /* Event filter that sets some flags and optionally checks userdata */
    28 int _events_sampleNullEventFilter(void *userdata, SDL_Event *event)
    29 {
    30    _eventFilterCalled = 1;
    31 
    32    if (_userdataCheck != 0) {
    33        SDLTest_AssertCheck(userdata != NULL, "Check userdata pointer, expected: non-NULL, got: %s", (userdata != NULL) ? "non-NULL" : "NULL");
    34        if (userdata != NULL) {
    35           SDLTest_AssertCheck(*(int *)userdata == _userdataValue, "Check userdata value, expected: %i, got: %i", _userdataValue, *(int *)userdata);
    36        }
    37    }
    38 
    39    return 0;
    40 }
    41 
    42 /**
    43  * @brief Test pumping and peeking events.
    44  *
    45  * @sa http://wiki.libsdl.org/moin.cgi/SDL_PumpEvents
    46  * @sa http://wiki.libsdl.org/moin.cgi/SDL_PollEvent
    47  */
    48 int
    49 events_pushPumpAndPollUserevent(void *arg)
    50 {
    51    SDL_Event event1;
    52    SDL_Event event2;
    53    int result;
    54 
    55    /* Create user event */
    56    event1.type = SDL_USEREVENT;
    57    event1.user.code = SDLTest_RandomSint32();
    58    event1.user.data1 = (void *)&_userdataValue1;
    59    event1.user.data2 = (void *)&_userdataValue2;
    60 
    61    /* Push a user event onto the queue and force queue update */
    62    SDL_PushEvent(&event1);
    63    SDLTest_AssertPass("Call to SDL_PushEvent()");
    64    SDL_PumpEvents();
    65    SDLTest_AssertPass("Call to SDL_PumpEvents()");
    66 
    67    /* Poll for user event */
    68    result = SDL_PollEvent(&event2);
    69    SDLTest_AssertPass("Call to SDL_PollEvent()");
    70    SDLTest_AssertCheck(result == 1, "Check result from SDL_PollEvent, expected: 1, got: %d", result);
    71 
    72    return TEST_COMPLETED;
    73 }
    74 
    75 
    76 /**
    77  * @brief Adds and deletes an event watch function with NULL userdata
    78  *
    79  * @sa http://wiki.libsdl.org/moin.cgi/SDL_AddEventWatch
    80  * @sa http://wiki.libsdl.org/moin.cgi/SDL_DelEventWatch
    81  *
    82  */
    83 int
    84 events_addDelEventWatch(void *arg)
    85 {
    86    SDL_Event event;
    87 
    88    /* Create user event */
    89    event.type = SDL_USEREVENT;
    90    event.user.code = SDLTest_RandomSint32();;
    91    event.user.data1 = (void *)&_userdataValue1;
    92    event.user.data2 = (void *)&_userdataValue2;
    93 
    94    /* Disable userdata check */
    95    _userdataCheck = 0;
    96 
    97    /* Reset event filter call tracker */
    98    _eventFilterCalled = 0;
    99 
   100    /* Add watch */
   101    SDL_AddEventWatch(_events_sampleNullEventFilter, NULL);
   102    SDLTest_AssertPass("Call to SDL_AddEventWatch()");
   103 
   104    /* Push a user event onto the queue and force queue update */
   105    SDL_PushEvent(&event);
   106    SDLTest_AssertPass("Call to SDL_PushEvent()");
   107    SDL_PumpEvents();
   108    SDLTest_AssertPass("Call to SDL_PumpEvents()");
   109    SDLTest_AssertCheck(_eventFilterCalled == 1, "Check that event filter was called");
   110 
   111    /* Delete watch */
   112    SDL_DelEventWatch(_events_sampleNullEventFilter, NULL);
   113    SDLTest_AssertPass("Call to SDL_DelEventWatch()");
   114 
   115    /* Push a user event onto the queue and force queue update */
   116    _eventFilterCalled = 0;
   117    SDL_PushEvent(&event);
   118    SDLTest_AssertPass("Call to SDL_PushEvent()");
   119    SDL_PumpEvents();
   120    SDLTest_AssertPass("Call to SDL_PumpEvents()");
   121    SDLTest_AssertCheck(_eventFilterCalled == 0, "Check that event filter was NOT called");
   122 
   123    return TEST_COMPLETED;
   124 }
   125 
   126 /**
   127  * @brief Adds and deletes an event watch function with userdata
   128  *
   129  * @sa http://wiki.libsdl.org/moin.cgi/SDL_AddEventWatch
   130  * @sa http://wiki.libsdl.org/moin.cgi/SDL_DelEventWatch
   131  *
   132  */
   133 int
   134 events_addDelEventWatchWithUserdata(void *arg)
   135 {
   136    SDL_Event event;
   137 
   138    /* Create user event */
   139    event.type = SDL_USEREVENT;
   140    event.user.code = SDLTest_RandomSint32();;
   141    event.user.data1 = (void *)&_userdataValue1;
   142    event.user.data2 = (void *)&_userdataValue2;
   143 
   144    /* Enable userdata check and set a value to check */
   145    _userdataCheck = 1;
   146    _userdataValue = SDLTest_RandomIntegerInRange(-1024, 1024);
   147 
   148    /* Reset event filter call tracker */
   149    _eventFilterCalled = 0;
   150 
   151    /* Add watch */
   152    SDL_AddEventWatch(_events_sampleNullEventFilter, (void *)&_userdataValue);
   153    SDLTest_AssertPass("Call to SDL_AddEventWatch()");
   154 
   155    /* Push a user event onto the queue and force queue update */
   156    SDL_PushEvent(&event);
   157    SDLTest_AssertPass("Call to SDL_PushEvent()");
   158    SDL_PumpEvents();
   159    SDLTest_AssertPass("Call to SDL_PumpEvents()");
   160    SDLTest_AssertCheck(_eventFilterCalled == 1, "Check that event filter was called");
   161 
   162    /* Delete watch */
   163    SDL_DelEventWatch(_events_sampleNullEventFilter, (void *)&_userdataValue);
   164    SDLTest_AssertPass("Call to SDL_DelEventWatch()");
   165 
   166    /* Push a user event onto the queue and force queue update */
   167    _eventFilterCalled = 0;
   168    SDL_PushEvent(&event);
   169    SDLTest_AssertPass("Call to SDL_PushEvent()");
   170    SDL_PumpEvents();
   171    SDLTest_AssertPass("Call to SDL_PumpEvents()");
   172    SDLTest_AssertCheck(_eventFilterCalled == 0, "Check that event filter was NOT called");
   173 
   174    return TEST_COMPLETED;
   175 }
   176 
   177 
   178 /* ================= Test References ================== */
   179 
   180 /* Events test cases */
   181 static const SDLTest_TestCaseReference eventsTest1 =
   182         { (SDLTest_TestCaseFp)events_pushPumpAndPollUserevent, "events_pushPumpAndPollUserevent", "Pushes, pumps and polls a user event", TEST_ENABLED };
   183 
   184 static const SDLTest_TestCaseReference eventsTest2 =
   185         { (SDLTest_TestCaseFp)events_addDelEventWatch, "events_addDelEventWatch", "Adds and deletes an event watch function with NULL userdata", TEST_ENABLED };
   186 
   187 static const SDLTest_TestCaseReference eventsTest3 =
   188         { (SDLTest_TestCaseFp)events_addDelEventWatchWithUserdata, "events_addDelEventWatchWithUserdata", "Adds and deletes an event watch function with userdata", TEST_ENABLED };
   189 
   190 /* Sequence of Events test cases */
   191 static const SDLTest_TestCaseReference *eventsTests[] =  {
   192     &eventsTest1, &eventsTest2, &eventsTest3, NULL
   193 };
   194 
   195 /* Events test suite (global) */
   196 SDLTest_TestSuiteReference eventsTestSuite = {
   197     "Events",
   198     NULL,
   199     eventsTests,
   200     NULL
   201 };