153a5a1b3Sopenharmony_ci#ifdef HAVE_CONFIG_H 253a5a1b3Sopenharmony_ci#include <config.h> 353a5a1b3Sopenharmony_ci#endif 453a5a1b3Sopenharmony_ci 553a5a1b3Sopenharmony_ci#include <check.h> 653a5a1b3Sopenharmony_ci 753a5a1b3Sopenharmony_ci#include <pulsecore/hook-list.h> 853a5a1b3Sopenharmony_ci#include <pulsecore/log.h> 953a5a1b3Sopenharmony_ci 1053a5a1b3Sopenharmony_cistatic pa_hook_result_t func1(const char *hook_data, const char *call_data, const char *slot_data) { 1153a5a1b3Sopenharmony_ci pa_log("(func1) hook=%s call=%s slot=%s", hook_data, call_data, slot_data); 1253a5a1b3Sopenharmony_ci /* succeed when it runs to here */ 1353a5a1b3Sopenharmony_ci fail_unless(1); 1453a5a1b3Sopenharmony_ci return PA_HOOK_OK; 1553a5a1b3Sopenharmony_ci} 1653a5a1b3Sopenharmony_ci 1753a5a1b3Sopenharmony_cistatic pa_hook_result_t func2(const char *hook_data, const char *call_data, const char *slot_data) { 1853a5a1b3Sopenharmony_ci pa_log("(func2) hook=%s call=%s slot=%s", hook_data, call_data, slot_data); 1953a5a1b3Sopenharmony_ci /* succeed when it runs to here */ 2053a5a1b3Sopenharmony_ci fail_unless(1); 2153a5a1b3Sopenharmony_ci return PA_HOOK_OK; 2253a5a1b3Sopenharmony_ci} 2353a5a1b3Sopenharmony_ci 2453a5a1b3Sopenharmony_ciSTART_TEST (hooklist_test) { 2553a5a1b3Sopenharmony_ci pa_hook hook; 2653a5a1b3Sopenharmony_ci pa_hook_slot *slot; 2753a5a1b3Sopenharmony_ci 2853a5a1b3Sopenharmony_ci pa_hook_init(&hook, (void*) "hook"); 2953a5a1b3Sopenharmony_ci 3053a5a1b3Sopenharmony_ci pa_hook_connect(&hook, PA_HOOK_LATE, (pa_hook_cb_t) func1, (void*) "slot1"); 3153a5a1b3Sopenharmony_ci slot = pa_hook_connect(&hook, PA_HOOK_NORMAL, (pa_hook_cb_t) func2, (void*) "slot2"); 3253a5a1b3Sopenharmony_ci pa_hook_connect(&hook, PA_HOOK_NORMAL, (pa_hook_cb_t) func1, (void*) "slot3"); 3353a5a1b3Sopenharmony_ci 3453a5a1b3Sopenharmony_ci pa_hook_fire(&hook, (void*) "call1"); 3553a5a1b3Sopenharmony_ci 3653a5a1b3Sopenharmony_ci pa_hook_slot_free(slot); 3753a5a1b3Sopenharmony_ci 3853a5a1b3Sopenharmony_ci pa_hook_fire(&hook, (void*) "call2"); 3953a5a1b3Sopenharmony_ci 4053a5a1b3Sopenharmony_ci pa_hook_done(&hook); 4153a5a1b3Sopenharmony_ci} 4253a5a1b3Sopenharmony_ciEND_TEST 4353a5a1b3Sopenharmony_ci 4453a5a1b3Sopenharmony_ciint main(int argc, char *argv[]) { 4553a5a1b3Sopenharmony_ci int failed = 0; 4653a5a1b3Sopenharmony_ci Suite *s; 4753a5a1b3Sopenharmony_ci TCase *tc; 4853a5a1b3Sopenharmony_ci SRunner *sr; 4953a5a1b3Sopenharmony_ci 5053a5a1b3Sopenharmony_ci s = suite_create("Hook List"); 5153a5a1b3Sopenharmony_ci tc = tcase_create("hooklist"); 5253a5a1b3Sopenharmony_ci tcase_add_test(tc, hooklist_test); 5353a5a1b3Sopenharmony_ci suite_add_tcase(s, tc); 5453a5a1b3Sopenharmony_ci 5553a5a1b3Sopenharmony_ci sr = srunner_create(s); 5653a5a1b3Sopenharmony_ci srunner_run_all(sr, CK_NORMAL); 5753a5a1b3Sopenharmony_ci failed = srunner_ntests_failed(sr); 5853a5a1b3Sopenharmony_ci srunner_free(sr); 5953a5a1b3Sopenharmony_ci 6053a5a1b3Sopenharmony_ci return (failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; 6153a5a1b3Sopenharmony_ci} 62