X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcontrol%2Ftestapi.c;h=8149f5b1c6159b19919e61fc99e868264df51e26;hb=f735a19308e260206e26325b26e68f072cb30371;hp=2c9176aa02c5c18c5a110eab0f70ddbe2c8fe917;hpb=eec109371725d6cf6c463c9cfe08068dee521579;p=vlc diff --git a/src/control/testapi.c b/src/control/testapi.c index 2c9176aa02..8149f5b1c6 100644 --- a/src/control/testapi.c +++ b/src/control/testapi.c @@ -50,9 +50,13 @@ static void catch (void) libvlc_exception_clear (&ex); } +/* Test we have */ static void test_core (const char ** argv, int argc); static void test_media_list (const char ** argv, int argc); +static void test_events (const char ** argv, int argc); +static void test_media_player_play_stop(const char** argv, int argc); +/* Tests implementations */ static void test_core (const char ** argv, int argc) { libvlc_instance_t *vlc; @@ -113,13 +117,121 @@ static void test_media_list (const char ** argv, int argc) catch (); } -static void test_file_playback (const char ** argv, int argc, const char * file) +/* This one is an internal API. We use it here to run tests that + * don't depends on playback, and only test the event framework */ +extern void libvlc_event_send( libvlc_event_manager_t *, libvlc_event_t *); + +static void test_events_dummy_callback( const libvlc_event_t * event, void * user_data) +{ + vlc_bool_t * callback_was_called = user_data; + *callback_was_called = VLC_TRUE; +} + +static void test_events_callback_and_detach( const libvlc_event_t * event, void * user_data) +{ + vlc_bool_t * callback_was_called = user_data; + libvlc_event_manager_t *em; + + em = libvlc_media_instance_event_manager (event->p_obj, &ex); + catch(); + + libvlc_event_detach (em, event->type, test_events_callback_and_detach, user_data, &ex); + *callback_was_called = VLC_TRUE; +} + +static void test_event_type_reception( libvlc_event_manager_t * em, libvlc_event_type_t event_type, vlc_bool_t * callback_was_called ) +{ + libvlc_event_t event; + event.type = event_type; + *callback_was_called = VLC_FALSE; + libvlc_event_send (em, &event); + assert (*callback_was_called); +} + +static void test_events (const char ** argv, int argc) +{ + libvlc_instance_t *vlc; + libvlc_media_instance_t *mi; + libvlc_event_manager_t *em; + vlc_bool_t callback_was_called; + libvlc_exception_t ex; + libvlc_event_type_t mi_events[] = { + libvlc_MediaInstancePlayed, + libvlc_MediaInstancePaused, + libvlc_MediaInstanceReachedEnd, + libvlc_MediaInstanceEncounteredError, + libvlc_MediaInstanceTimeChanged, + libvlc_MediaInstancePositionChanged, + }; + int i, mi_events_len = sizeof(mi_events)/sizeof(*mi_events); + + log ("Testing events\n"); + + libvlc_exception_init (&ex); + vlc = libvlc_new (argc, argv, &ex); + catch (); + + mi = libvlc_media_instance_new (vlc, &ex); + catch (); + + em = libvlc_media_instance_event_manager (mi, &ex); + + log ("+ Testing attaching to Media Instance\n"); + + for (i = 0; i < mi_events_len; i++) { + libvlc_event_attach (em, mi_events[i], test_events_dummy_callback, &callback_was_called, &ex); + catch (); + } + + log ("+ Testing event reception\n"); + + for (i = 0; i < mi_events_len; i++) + test_event_type_reception (em, mi_events[i], &callback_was_called); + + log ("+ Testing event detaching while in the event callback\n"); + + libvlc_event_t event; + event.type = mi_events[mi_events_len-1]; + callback_was_called = VLC_FALSE; + + libvlc_event_detach (em, mi_events[mi_events_len-1], test_events_dummy_callback, &callback_was_called, &ex); + catch (); + + libvlc_event_attach (em, mi_events[mi_events_len-1], test_events_callback_and_detach, &callback_was_called, &ex); + catch (); + + libvlc_event_send (em, &event); + assert( callback_was_called ); + + callback_was_called = VLC_FALSE; + libvlc_event_send (em, &event); + assert( !callback_was_called ); + + libvlc_event_detach (em, mi_events[mi_events_len-1], test_events_callback_and_detach, &callback_was_called, &ex); + catch (); + + log ("+ Testing regular detach()\n"); + + for (i = 0; i < mi_events_len - 1; i++) { + libvlc_event_detach (em, mi_events[i], test_events_dummy_callback, &callback_was_called, &ex); + catch (); + } + + libvlc_media_instance_release (mi); + catch (); + + libvlc_release (vlc); + catch (); +} + +static void test_media_player_play_stop(const char** argv, int argc) { libvlc_instance_t *vlc; libvlc_media_descriptor_t *md; libvlc_media_instance_t *mi; + const char * file = "file://../bindings/java/core/src/test/resources/raffa_voice.ogg"; - log ("Testing playback of %s\n", file); + log ("Testing play and pause of %s\n", file); libvlc_exception_init (&ex); vlc = libvlc_new (argc, argv, &ex); @@ -144,6 +256,7 @@ static void test_file_playback (const char ** argv, int argc, const char * file) libvlc_media_instance_stop (mi, &ex); catch (); + sleep(1); libvlc_media_instance_release (mi); catch (); @@ -157,11 +270,11 @@ int main (int argc, char *argv[]) const char *args[argc + 5]; int nlibvlc_args = sizeof (args) / sizeof (args[0]); - alarm (30); /* Make sure "make check" does not get stuck */ + alarm (50); /* Make sure "make check" does not get stuck */ args[0] = "-vvv"; args[1] = "-I"; - args[2] = "-dummy"; + args[2] = "dummy"; args[3] = "--plugin-path=../modules"; args[4] = "--vout=dummy"; args[5] = "--aout=dummy"; @@ -170,12 +283,11 @@ int main (int argc, char *argv[]) test_core (args, nlibvlc_args); + test_events (args, nlibvlc_args); + test_media_list (args, nlibvlc_args); - /* FIXME try to play all streams from a list. We may want to create an other test category for that. */ - test_file_playback (args, nlibvlc_args, "ftp://streams.videolan.org/streams-videolan/reference/mp4/aac_adts.mp4"); - test_file_playback (args, nlibvlc_args, "ftp://streams.videolan.org/streams-videolan/reference/flv/flash5_004.flv"); - /* ... */ - + test_media_player_play_stop(args, nlibvlc_args); + return 0; }