Eobj: Improve signals test.

SVN revision: 70144
This commit is contained in:
Tom Hacohen 2012-04-12 12:42:33 +00:00
parent 17527c5307
commit 0395f7943c
3 changed files with 21 additions and 7 deletions

View File

@ -27,6 +27,7 @@ main(int argc, char *argv[])
eobj_init();
Eobj *obj = eobj_add(SIMPLE_CLASS, NULL);
Simple_Public_Data *pd = eobj_data_get(obj, SIMPLE_CLASS);
/* The order of these two is undetermined. */
eobj_event_callback_priority_add(obj, SIG_A_CHANGED, EOBJ_CALLBACK_PRIORITY_BEFORE, _a_changed_cb, (void *) 2);
@ -40,7 +41,14 @@ main(int argc, char *argv[])
fail_if(cb_count != 3);
eobj_event_callback_del_full(obj, SIG_A_CHANGED, _a_changed_cb, NULL);
eobj_event_callback_del_full(obj, SIG_A_CHANGED, _a_changed_cb, (void *) 3);
fail_if(pd->cb_count != 3);
eobj_event_callback_del_full(obj, SIG_A_CHANGED, _a_changed_cb, (void *) 4);
fail_if(pd->cb_count != 2);
eobj_event_callback_del(obj, SIG_A_CHANGED, _a_changed_cb);
fail_if(pd->cb_count != 1);
eobj_event_callback_del(obj, SIG_A_CHANGED, _a_changed_cb);
fail_if(pd->cb_count != 0);
eobj_unref(obj);
eobj_shutdown();

View File

@ -5,6 +5,7 @@ EAPI Eobj_Op SIMPLE_BASE_ID = 0;
typedef struct
{
Simple_Public_Data pub;
int a;
} Private_Data;
@ -29,6 +30,7 @@ _a_set(Eobj *obj, Eobj_Op op, va_list *list)
Eina_Bool
_cb_added(void *data, Eobj *obj, const Eobj_Event_Description *desc, void *event_info)
{
Simple_Public_Data *pd = eobj_data_get(obj, _my_class);
const Eobj_Event_Description *cb_desc = event_info;
(void) data;
(void) desc;
@ -36,16 +38,16 @@ _cb_added(void *data, Eobj *obj, const Eobj_Event_Description *desc, void *event
if (cb_desc != SIG_A_CHANGED)
return EINA_TRUE;
int count = (int) eobj_generic_data_get(obj, "cb_count") + 1;
eobj_generic_data_set(obj, "cb_count", (void *) count);
pd->cb_count++;
printf("Added SIG_A_CHANGED callback to %p. Count: %d\n", obj, count);
printf("Added SIG_A_CHANGED callback to %p. Count: %d\n", obj, pd->cb_count);
return EINA_TRUE;
}
Eina_Bool
_cb_deled(void *data, Eobj *obj, const Eobj_Event_Description *desc, void *event_info)
{
Simple_Public_Data *pd = eobj_data_get(obj, _my_class);
const Eobj_Event_Description *cb_desc = event_info;
(void) data;
(void) desc;
@ -53,10 +55,9 @@ _cb_deled(void *data, Eobj *obj, const Eobj_Event_Description *desc, void *event
if (cb_desc != SIG_A_CHANGED)
return EINA_TRUE;
int count = (int) eobj_generic_data_get(obj, "cb_count") - 1;
eobj_generic_data_set(obj, "cb_count", (void *) count);
pd->cb_count--;
printf("Removed SIG_A_CHANGED callback from %p. Count: %d\n", obj, count);
printf("Removed SIG_A_CHANGED callback from %p. Count: %d\n", obj, pd->cb_count);
return EINA_TRUE;
}

View File

@ -10,6 +10,11 @@ enum {
SIMPLE_SUB_ID_LAST
};
typedef struct
{
int cb_count;
} Simple_Public_Data;
#define SIMPLE_ID(sub_id) (SIMPLE_BASE_ID + sub_id)
#define SIMPLE_A_SET(a) SIMPLE_ID(SIMPLE_SUB_ID_A_SET), EOBJ_TYPECHECK(int, a)