Home | History | Annotate | Download | only in test
      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 };
    202