Edit

kc3-lang/SDL/test/testautomation_events.c

Branch :

  • Show log

    Commit

  • Author : Ryan C. Gordon
    Date : 2021-04-01 12:20:04
    Hash : da667554
    Message : Fixed up legacy MoinMoin URLs at wiki.libsdl.org Fixes #4064.

  • test/testautomation_events.c
  • /**
     * Events test suite
     */
    
    #include <stdio.h>
    
    #include "SDL.h"
    #include "SDL_test.h"
    
    /* ================= Test Case Implementation ================== */
    
    /* Test case functions */
    
    /* Flag indicating if the userdata should be checked */
    int _userdataCheck = 0;
    
    /* Userdata value to check */
    int _userdataValue = 0;
    
    /* Flag indicating that the filter was called */
    int _eventFilterCalled = 0;
    
    /* Userdata values for event */
    int _userdataValue1 = 1;
    int _userdataValue2 = 2;
    
    /* Event filter that sets some flags and optionally checks userdata */
    int SDLCALL _events_sampleNullEventFilter(void *userdata, SDL_Event *event)
    {
       _eventFilterCalled = 1;
    
       if (_userdataCheck != 0) {
           SDLTest_AssertCheck(userdata != NULL, "Check userdata pointer, expected: non-NULL, got: %s", (userdata != NULL) ? "non-NULL" : "NULL");
           if (userdata != NULL) {
              SDLTest_AssertCheck(*(int *)userdata == _userdataValue, "Check userdata value, expected: %i, got: %i", _userdataValue, *(int *)userdata);
           }
       }
    
       return 0;
    }
    
    /**
     * @brief Test pumping and peeking events.
     *
     * @sa http://wiki.libsdl.org/SDL_PumpEvents
     * @sa http://wiki.libsdl.org/SDL_PollEvent
     */
    int
    events_pushPumpAndPollUserevent(void *arg)
    {
       SDL_Event event1;
       SDL_Event event2;
       int result;
    
       /* Create user event */
       event1.type = SDL_USEREVENT;
       event1.user.code = SDLTest_RandomSint32();
       event1.user.data1 = (void *)&_userdataValue1;
       event1.user.data2 = (void *)&_userdataValue2;
    
       /* Push a user event onto the queue and force queue update */
       SDL_PushEvent(&event1);
       SDLTest_AssertPass("Call to SDL_PushEvent()");
       SDL_PumpEvents();
       SDLTest_AssertPass("Call to SDL_PumpEvents()");
    
       /* Poll for user event */
       result = SDL_PollEvent(&event2);
       SDLTest_AssertPass("Call to SDL_PollEvent()");
       SDLTest_AssertCheck(result == 1, "Check result from SDL_PollEvent, expected: 1, got: %d", result);
    
       return TEST_COMPLETED;
    }
    
    
    /**
     * @brief Adds and deletes an event watch function with NULL userdata
     *
     * @sa http://wiki.libsdl.org/SDL_AddEventWatch
     * @sa http://wiki.libsdl.org/SDL_DelEventWatch
     *
     */
    int
    events_addDelEventWatch(void *arg)
    {
       SDL_Event event;
    
       /* Create user event */
       event.type = SDL_USEREVENT;
       event.user.code = SDLTest_RandomSint32();
       event.user.data1 = (void *)&_userdataValue1;
       event.user.data2 = (void *)&_userdataValue2;
    
       /* Disable userdata check */
       _userdataCheck = 0;
    
       /* Reset event filter call tracker */
       _eventFilterCalled = 0;
    
       /* Add watch */
       SDL_AddEventWatch(_events_sampleNullEventFilter, NULL);
       SDLTest_AssertPass("Call to SDL_AddEventWatch()");
    
       /* Push a user event onto the queue and force queue update */
       SDL_PushEvent(&event);
       SDLTest_AssertPass("Call to SDL_PushEvent()");
       SDL_PumpEvents();
       SDLTest_AssertPass("Call to SDL_PumpEvents()");
       SDLTest_AssertCheck(_eventFilterCalled == 1, "Check that event filter was called");
    
       /* Delete watch */
       SDL_DelEventWatch(_events_sampleNullEventFilter, NULL);
       SDLTest_AssertPass("Call to SDL_DelEventWatch()");
    
       /* Push a user event onto the queue and force queue update */
       _eventFilterCalled = 0;
       SDL_PushEvent(&event);
       SDLTest_AssertPass("Call to SDL_PushEvent()");
       SDL_PumpEvents();
       SDLTest_AssertPass("Call to SDL_PumpEvents()");
       SDLTest_AssertCheck(_eventFilterCalled == 0, "Check that event filter was NOT called");
    
       return TEST_COMPLETED;
    }
    
    /**
     * @brief Adds and deletes an event watch function with userdata
     *
     * @sa http://wiki.libsdl.org/SDL_AddEventWatch
     * @sa http://wiki.libsdl.org/SDL_DelEventWatch
     *
     */
    int
    events_addDelEventWatchWithUserdata(void *arg)
    {
       SDL_Event event;
    
       /* Create user event */
       event.type = SDL_USEREVENT;
       event.user.code = SDLTest_RandomSint32();
       event.user.data1 = (void *)&_userdataValue1;
       event.user.data2 = (void *)&_userdataValue2;
    
       /* Enable userdata check and set a value to check */
       _userdataCheck = 1;
       _userdataValue = SDLTest_RandomIntegerInRange(-1024, 1024);
    
       /* Reset event filter call tracker */
       _eventFilterCalled = 0;
    
       /* Add watch */
       SDL_AddEventWatch(_events_sampleNullEventFilter, (void *)&_userdataValue);
       SDLTest_AssertPass("Call to SDL_AddEventWatch()");
    
       /* Push a user event onto the queue and force queue update */
       SDL_PushEvent(&event);
       SDLTest_AssertPass("Call to SDL_PushEvent()");
       SDL_PumpEvents();
       SDLTest_AssertPass("Call to SDL_PumpEvents()");
       SDLTest_AssertCheck(_eventFilterCalled == 1, "Check that event filter was called");
    
       /* Delete watch */
       SDL_DelEventWatch(_events_sampleNullEventFilter, (void *)&_userdataValue);
       SDLTest_AssertPass("Call to SDL_DelEventWatch()");
    
       /* Push a user event onto the queue and force queue update */
       _eventFilterCalled = 0;
       SDL_PushEvent(&event);
       SDLTest_AssertPass("Call to SDL_PushEvent()");
       SDL_PumpEvents();
       SDLTest_AssertPass("Call to SDL_PumpEvents()");
       SDLTest_AssertCheck(_eventFilterCalled == 0, "Check that event filter was NOT called");
    
       return TEST_COMPLETED;
    }
    
    
    /* ================= Test References ================== */
    
    /* Events test cases */
    static const SDLTest_TestCaseReference eventsTest1 =
            { (SDLTest_TestCaseFp)events_pushPumpAndPollUserevent, "events_pushPumpAndPollUserevent", "Pushes, pumps and polls a user event", TEST_ENABLED };
    
    static const SDLTest_TestCaseReference eventsTest2 =
            { (SDLTest_TestCaseFp)events_addDelEventWatch, "events_addDelEventWatch", "Adds and deletes an event watch function with NULL userdata", TEST_ENABLED };
    
    static const SDLTest_TestCaseReference eventsTest3 =
            { (SDLTest_TestCaseFp)events_addDelEventWatchWithUserdata, "events_addDelEventWatchWithUserdata", "Adds and deletes an event watch function with userdata", TEST_ENABLED };
    
    /* Sequence of Events test cases */
    static const SDLTest_TestCaseReference *eventsTests[] =  {
        &eventsTest1, &eventsTest2, &eventsTest3, NULL
    };
    
    /* Events test suite (global) */
    SDLTest_TestSuiteReference eventsTestSuite = {
        "Events",
        NULL,
        eventsTests,
        NULL
    };