efl: make Efl.Model.properties_get return an Iterator<string>.
authorCedric BAIL <cedric.bail@free.fr>
Fri, 23 Nov 2018 16:25:19 +0000 (16:25 +0000)
committerHermet Park <hermetpark@gmail.com>
Wed, 5 Dec 2018 05:37:06 +0000 (14:37 +0900)
Reviewed-by: Vitor Sousa da Silva <vitorsousa@expertisesolutions.com.br>
Differential Revision: https://phab.enlightenment.org/D7289

20 files changed:
src/examples/eldbus/dbusmodel.c
src/lib/ecore/efl_model_composite.c
src/lib/ecore/efl_model_composite_boolean.c
src/lib/ecore/efl_model_container.c
src/lib/ecore/efl_model_container_item.c
src/lib/ecore/efl_model_item.c
src/lib/efl/interfaces/efl_model.eo
src/lib/eio/eio_model.c
src/lib/eldbus/eldbus_model.c
src/lib/eldbus/eldbus_model_arguments.c
src/lib/eldbus/eldbus_model_arguments_private.h
src/lib/eldbus/eldbus_model_method.c
src/lib/eldbus/eldbus_model_proxy.c
src/lib/elementary/efl_ui_list_view.c
src/tests/eldbus/eldbus_test_eldbus_model_connection.c
src/tests/eldbus/eldbus_test_eldbus_model_method.c
src/tests/eldbus/eldbus_test_eldbus_model_object.c
src/tests/eldbus/eldbus_test_eldbus_model_proxy.c
src/tests/eldbus/eldbus_test_eldbus_model_signal.c
src/tests/eldbus/eldbus_test_fake_server_eldbus_model_proxy.c

index 10150c4..cc09d79 100644 (file)
@@ -64,17 +64,16 @@ EFL_CALLBACKS_ARRAY_DEFINE(child_cbs,
 static void
 process(Eo *child, unsigned int index)
 {
-   Eina_Array *properties = efl_model_properties_get(child);
+   Eina_Iterator *properties = efl_model_properties_get(child);
    const char *property;
-   Eina_Array_Iterator it;
    Eina_Strbuf *buf;
-   unsigned int i;
+   Eina_Bool noproperties = EINA_TRUE;
 
    buf = eina_strbuf_new();
 
    const char *name = eldbus_model_proxy_name_get(child);
 
-   EINA_ARRAY_ITER_NEXT(properties, i, property, it)
+   EINA_ITERATOR_FOREACH(properties, property)
      {
         Eina_Value *v = efl_model_property_get(child, property);
         char *str;
@@ -90,16 +89,18 @@ process(Eo *child, unsigned int index)
         free(str);
 
         eina_value_free(v);
+
+        noproperties = EINA_FALSE;
      }
+   eina_iterator_free(properties);
 
-   if (eina_array_count(properties) <= 0)
+   if (noproperties)
      eina_strbuf_append_printf(buf,  " %2d: %s (no properties yet)\n", index, name);
    else
      eina_strbuf_prepend_printf(buf, " -> %s\n   Properties:\n", name);
 
    printf("%s", eina_strbuf_string_get(buf));
 
-   eina_array_free(properties);
    eina_strbuf_free(buf);
 
    efl_ref(child);
index 90cd8ad..dfb3019 100644 (file)
@@ -69,7 +69,7 @@ _efl_model_composite_efl_model_property_get(const Eo *obj EINA_UNUSED, Efl_Model
    return efl_model_property_get(pd->source, property);
 }
 
-static Eina_Array *
+static Eina_Iterator *
 _efl_model_composite_efl_model_properties_get(const Eo *obj EINA_UNUSED, Efl_Model_Composite_Data *pd)
 {
    return efl_model_properties_get(pd->source);
index 98dbbe5..ef9ec43 100644 (file)
@@ -67,23 +67,20 @@ _efl_model_composite_boolean_children_efl_object_finalize(Eo *obj,
    return obj;
 }
 
-static Eina_Array *
+static Eina_Iterator *
 _efl_model_composite_boolean_children_efl_model_properties_get(const Eo *obj,
                                                                Efl_Model_Composite_Boolean_Children_Data *pd)
 {
-   Eina_Iterator *it;
-   Eina_Stringshare *s;
-   Eina_Array *r;
+   Eina_Iterator *its;
+   Eina_Iterator *itr;
 
-   r = efl_model_properties_get(efl_super(obj, EFL_MODEL_COMPOSITE_BOOLEAN_CHILDREN_CLASS));
-   if (!r) r = eina_array_new(1);
+   its = efl_model_properties_get(efl_super(obj, EFL_MODEL_COMPOSITE_BOOLEAN_CHILDREN_CLASS));
+   itr = eina_hash_iterator_key_new(pd->parent->values);
 
-   it = eina_hash_iterator_key_new(pd->parent->values);
-   EINA_ITERATOR_FOREACH(it, s)
-     eina_array_push(r, s);
-   eina_array_push(r, "child.index");
+   if (!its) return itr;
+   if (!itr) return its;
 
-   return r;
+   return eina_multi_iterator_new(its, itr);
 }
 
 static Eina_Value *
index 0832a2f..5449ae4 100644 (file)
@@ -225,20 +225,10 @@ _efl_model_container_child_property_add(Eo *obj,
    return EINA_FALSE;
 }
 
-static Eina_Array *
+static Eina_Iterator *
 _efl_model_container_efl_model_properties_get(const Eo *obj EINA_UNUSED, Efl_Model_Container_Data *sd)
 {
-   Eina_Iterator *it;
-   Eina_Array *r;
-   Eina_Stringshare *s;
-
-   r = eina_array_new(1);
-   it = eina_hash_iterator_key_new(sd->properties);
-   EINA_ITERATOR_FOREACH(it, s)
-     eina_array_push(r, eina_stringshare_ref(s));
-   eina_iterator_free(it);
-
-   return r;
+   return eina_hash_iterator_key_new(sd->properties);
 }
 
 static Eina_Future *
index b87558a..c3fa8d0 100644 (file)
@@ -25,7 +25,7 @@ _efl_model_container_item_efl_object_invalidate(Eo *obj, Efl_Model_Container_Ite
    sd->index = 0;
 }
 
-static Eina_Array *
+static Eina_Iterator *
 _efl_model_container_item_efl_model_properties_get(const Eo *obj EINA_UNUSED, Efl_Model_Container_Item_Data *sd)
 {
    // FIXME: Not to sure here, shouldn't we extend a child of the parent actually ?
index e5058c1..104125a 100644 (file)
@@ -13,7 +13,6 @@ typedef struct _Efl_Model_Item_Data Efl_Model_Item_Data;
 struct _Efl_Model_Item_Data
 {
    Eina_Hash                        *properties;
-   Eina_Array                       *defined_properties;
    Eina_List                        *childrens;
 };
 
@@ -38,7 +37,6 @@ _efl_model_item_efl_object_constructor(Eo *obj, Efl_Model_Item_Data *sd)
      return NULL;
 
    sd->properties = eina_hash_stringshared_new(_item_value_free_cb);
-   sd->defined_properties = eina_array_new(8);
 
    return obj;
 }
@@ -57,15 +55,13 @@ _efl_model_item_efl_object_destructor(Eo *obj, Efl_Model_Item_Data *sd)
    eina_hash_foreach(sd->properties, _stringshared_keys_free, NULL);
    eina_hash_free(sd->properties);
 
-   eina_array_free(sd->defined_properties);
-
    efl_destructor(efl_super(obj, MY_CLASS));
 }
 
-static Eina_Array *
+static Eina_Iterator *
 _efl_model_item_efl_model_properties_get(const Eo *obj EINA_UNUSED, Efl_Model_Item_Data *pd)
 {
-   return pd->defined_properties;
+   return eina_hash_iterator_key_new(pd->properties);
 }
 
 static Eina_Future *
index 88260db..ffe8bf4 100644 (file)
@@ -33,7 +33,7 @@ interface Efl.Model ()
                ]]
             }
             values {
-               properties: array<string>; [[Array of current properties]]
+               properties: iterator<string> @owned; [[Array of current properties]]
             }
         }
        @property property {
index 62e52f4..ee8296a 100644 (file)
@@ -631,18 +631,11 @@ static struct {
 /**
  * Interfaces impl.
  */
-static Eina_Array *
+static Eina_Iterator *
 _eio_model_efl_model_properties_get(const Eo *obj EINA_UNUSED,
                                     Eio_Model_Data *pd EINA_UNUSED)
 {
-   Eina_Array *r;
-   unsigned int i;
-
-   r = eina_array_new(4);
-   for (i = 0; i < EINA_C_ARRAY_LENGTH(properties); ++i)
-     eina_array_push(r, properties[i].name);
-
-   return r;
+   return EINA_C_ARRAY_ITERATOR_NEW(properties);
 }
 
 static Eina_Value *
index 28faa0f..3a2115e 100644 (file)
@@ -152,16 +152,13 @@ _eldbus_model_efl_model_property_get(const Eo *obj,
    return eina_value_error_new(EFL_MODEL_ERROR_NOT_FOUND);
 }
 
-static Eina_Array *
+static Eina_Iterator *
 _eldbus_model_efl_model_properties_get(const Eo *obj EINA_UNUSED,
                                        Eldbus_Model_Data *pd EINA_UNUSED)
 {
-   Eina_Array *r;
+   char *unique[] = { UNIQUE_NAME_PROPERTY };
 
-   r = eina_array_new(1);
-   eina_array_push(r, eina_stringshare_add(UNIQUE_NAME_PROPERTY));
-
-   return r;
+   return EINA_C_ARRAY_ITERATOR_NEW(unique);
 }
 
 static Efl_Object *
index 1d22903..4c60930 100644 (file)
@@ -12,8 +12,6 @@
 #define MY_CLASS ELDBUS_MODEL_ARGUMENTS_CLASS
 #define MY_CLASS_NAME "Eldbus_Model_Arguments"
 
-#define ARGUMENT_FORMAT "arg%u"
-
 static void _eldbus_model_arguments_properties_load(Eldbus_Model_Arguments_Data *);
 static void _eldbus_model_arguments_unload(Eldbus_Model_Arguments_Data *);
 static Eina_Bool _eldbus_model_arguments_is_input_argument(Eldbus_Model_Arguments_Data *, const char *);
@@ -31,8 +29,8 @@ static Efl_Object*
 _eldbus_model_arguments_efl_object_constructor(Eo *obj, Eldbus_Model_Arguments_Data *pd)
 {
    pd->obj = obj;
-   pd->properties_array = NULL;
-   pd->properties_hash = eina_hash_string_superfast_new(EINA_FREE_CB(_eldbus_model_arguments_hash_free));
+   // We do keep strings here as some of our API are looking for arg%u as a key instead of just indexes.
+   pd->properties = eina_hash_string_superfast_new(EINA_FREE_CB(_eldbus_model_arguments_hash_free));
    pd->pending_list = NULL;
    pd->proxy = NULL;
    pd->arguments = NULL;
@@ -72,7 +70,7 @@ _eldbus_model_arguments_efl_object_destructor(Eo *obj, Eldbus_Model_Arguments_Da
 {
    _eldbus_model_arguments_unload(pd);
 
-   eina_hash_free(pd->properties_hash);
+   eina_hash_free(pd->properties);
 
    eina_stringshare_del(pd->name);
    eldbus_proxy_unref(pd->proxy);
@@ -80,14 +78,14 @@ _eldbus_model_arguments_efl_object_destructor(Eo *obj, Eldbus_Model_Arguments_Da
    efl_destructor(efl_super(obj, MY_CLASS));
 }
 
-static Eina_Array *
+static Eina_Iterator *
 _eldbus_model_arguments_efl_model_properties_get(const Eo *obj EINA_UNUSED,
                                                  Eldbus_Model_Arguments_Data *pd)
 {
    EINA_SAFETY_ON_NULL_RETURN_VAL(pd, NULL);
 
    _eldbus_model_arguments_properties_load(pd);
-   return pd->properties_array;
+   return eina_hash_iterator_key_new(pd->properties);
 }
 
 static void
@@ -96,30 +94,25 @@ _eldbus_model_arguments_properties_load(Eldbus_Model_Arguments_Data *pd)
    unsigned int arguments_count;
    unsigned int i;
 
-   if (pd->properties_array)
-     return;
+   if (eina_hash_population(pd->properties) > 0)
+     return ;
 
    arguments_count = eina_list_count(pd->arguments);
 
-   pd->properties_array = eina_array_new(arguments_count);
-   EINA_SAFETY_ON_NULL_RETURN(pd->properties_array);
-
    for (i = 0; i < arguments_count; ++i)
      {
         Eldbus_Introspection_Argument *arg;
         const Eina_Value_Type *type;
-        Eina_Stringshare *name;
+        Eina_Slstr *name;
         Eina_Value *value;
 
-        name = eina_stringshare_printf(ARGUMENT_FORMAT, i);
+        name = eina_slstr_printf(ARGUMENT_FORMAT, i);
         if (!name) continue;
 
-        eina_array_push(pd->properties_array, name);
-
         arg = eina_list_nth(pd->arguments, i);
         type = _dbus_type_to_eina_value_type(arg->type[0]);
         value = eina_value_new(type);
-        eina_hash_add(pd->properties_hash, name, value);
+        eina_hash_add(pd->properties, name, value);
      }
 }
 
@@ -144,7 +137,7 @@ _eldbus_model_arguments_efl_model_property_set(Eo *obj,
    if (!ret) goto on_error;
 
    err = EFL_MODEL_ERROR_NOT_FOUND;
-   prop_value = eina_hash_find(pd->properties_hash, property);
+   prop_value = eina_hash_find(pd->properties, property);
    if (!prop_value) goto on_error;
 
    eina_value_flush(prop_value);
@@ -168,7 +161,7 @@ _eldbus_model_arguments_efl_model_property_get(const Eo *obj, Eldbus_Model_Argum
 
    _eldbus_model_arguments_properties_load(pd);
 
-   value = eina_hash_find(pd->properties_hash, property);
+   value = eina_hash_find(pd->properties, property);
    if (!value) return eina_value_error_new(EFL_MODEL_ERROR_NOT_FOUND);
 
    ret = _eldbus_model_arguments_is_output_argument(pd, property);
@@ -193,19 +186,7 @@ _eldbus_model_arguments_unload(Eldbus_Model_Arguments_Data *pd)
    EINA_LIST_FREE(pd->pending_list, pending)
      eldbus_pending_cancel(pending);
 
-   if (pd->properties_array)
-     {
-        Eina_Stringshare *property;
-        Eina_Array_Iterator it;
-        unsigned int i;
-
-        EINA_ARRAY_ITER_NEXT(pd->properties_array, i, property, it)
-          eina_stringshare_del(property);
-        eina_array_free(pd->properties_array);
-        pd->properties_array = NULL;
-     }
-
-   eina_hash_free_buckets(pd->properties_hash);
+   eina_hash_free_buckets(pd->properties);
 }
 
 Eina_Bool
@@ -219,6 +200,7 @@ eldbus_model_arguments_process_arguments(Eldbus_Model_Arguments_Data *pd,
    Eina_Value *value_struct;
    Eina_Array *changed_properties;
    unsigned int i = 0;
+   Eina_Stringshare *property;
    Eina_Bool result = EINA_FALSE;
 
    _eldbus_model_arguments_properties_load(pd);
@@ -244,16 +226,14 @@ eldbus_model_arguments_process_arguments(Eldbus_Model_Arguments_Data *pd,
      {
         if (ELDBUS_INTROSPECTION_ARGUMENT_DIRECTION_IN != argument->direction)
           {
-             Eina_Stringshare *property;
              Eina_Bool ret;
 
-             property = eina_array_data_get(pd->properties_array, i);
-             EINA_SAFETY_ON_NULL_GOTO(property, on_error);
+             property = eina_stringshare_printf(ARGUMENT_FORMAT, i);
 
-             ret = _eldbus_model_arguments_property_set(pd, value_struct, property);
+             ret = eina_array_push(changed_properties, property);
              EINA_SAFETY_ON_FALSE_GOTO(ret, on_error);
 
-             ret = eina_array_push(changed_properties, property);
+             ret = _eldbus_model_arguments_property_set(pd, value_struct, property);
              EINA_SAFETY_ON_FALSE_GOTO(ret, on_error);
           }
 
@@ -269,6 +249,8 @@ eldbus_model_arguments_process_arguments(Eldbus_Model_Arguments_Data *pd,
    result = EINA_TRUE;
 
 on_error:
+   while (property = eina_array_pop(changed_properties))
+     eina_stringshare_del(property);
    eina_array_free(changed_properties);
    eina_value_free(value_struct);
 
@@ -286,7 +268,7 @@ _eldbus_model_arguments_property_set(Eldbus_Model_Arguments_Data *pd,
 
    _eldbus_model_arguments_properties_load(pd);
 
-   prop_value = eina_hash_find(pd->properties_hash, property);
+   prop_value = eina_hash_find(pd->properties, property);
    EINA_SAFETY_ON_NULL_RETURN_VAL(prop_value, EINA_FALSE);
 
    ret = eina_value_struct_value_get(value_struct, "arg0", &value);
@@ -311,7 +293,7 @@ _eldbus_model_arguments_is(Eldbus_Model_Arguments_Data *pd,
    _eldbus_model_arguments_properties_load(pd);
 
    i = _eldbus_model_arguments_argument_index_get(pd, argument);
-   if (i >= eina_array_count(pd->properties_array))
+   if (i >= eina_hash_population(pd->properties))
      {
         WRN("Argument not found: %s", argument);
         return false;
@@ -342,15 +324,10 @@ _eldbus_model_arguments_argument_index_get(Eldbus_Model_Arguments_Data *pd, cons
    Eina_Stringshare *name;
    Eina_Array_Iterator it;
    unsigned int i = 0;
-   _eldbus_model_arguments_properties_load(pd);
-
-   EINA_ARRAY_ITER_NEXT(pd->properties_array, i, name, it)
-     {
-        if (strcmp(name, argument) == 0)
-          return i;
-     }
 
-   return ++i;
+   if (sscanf(argument, ARGUMENT_FORMAT, &i) > 0)
+     return i;
+   return eina_hash_population(pd->properties);
 }
 
 #include "eldbus_model_arguments.eo.c"
index 06aa1ae..83d55dd 100644 (file)
@@ -14,8 +14,7 @@ struct _Eldbus_Model_Arguments_Data
 {
    Eo *obj;
    Eldbus_Proxy *proxy;
-   Eina_Array *properties_array;
-   Eina_Hash *properties_hash;
+   Eina_Hash *properties;
    Eina_Stringshare *name;
    Eina_List *pending_list;
    const Eina_List *arguments;
@@ -24,4 +23,6 @@ struct _Eldbus_Model_Arguments_Data
 
 Eina_Bool eldbus_model_arguments_process_arguments(Eldbus_Model_Arguments_Data *, const Eldbus_Message *, Eldbus_Pending *);
 
+#define ARGUMENT_FORMAT "arg%u"
+
 #endif
index 8e7e87b..dbdbdde 100644 (file)
@@ -69,7 +69,7 @@ _eldbus_model_method_call(Eo *obj EINA_UNUSED, Eldbus_Model_Method_Data *pd EINA
 
    EINA_LIST_FOREACH(data->arguments, it, argument)
      {
-        Eina_Stringshare *name;
+        Eina_Slstr *name;
         const Eina_Value *value;
         const char *signature;
         Eina_Bool ret;
@@ -77,11 +77,10 @@ _eldbus_model_method_call(Eo *obj EINA_UNUSED, Eldbus_Model_Method_Data *pd EINA
         if (ELDBUS_INTROSPECTION_ARGUMENT_DIRECTION_IN != argument->direction)
           continue;
 
-        name = eina_array_data_get(data->properties_array, i);
-        if (!name) continue;
+        name = eina_slstr_printf(ARGUMENT_FORMAT, i);
         EINA_SAFETY_ON_NULL_GOTO(name, on_error);
 
-        value = eina_hash_find(data->properties_hash, name);
+        value = eina_hash_find(data->properties, name);
         EINA_SAFETY_ON_NULL_GOTO(value, on_error);
 
         signature = argument->type;
index c1ab3b2..a159ecd 100644 (file)
@@ -190,22 +190,11 @@ _eldbus_model_proxy_efl_object_destructor(Eo *obj, Eldbus_Model_Proxy_Data *pd)
    efl_destructor(efl_super(obj, MY_CLASS));
 }
 
-static Eina_Array *
+static Eina_Iterator *
 _eldbus_model_proxy_efl_model_properties_get(const Eo *obj EINA_UNUSED,
                                              Eldbus_Model_Proxy_Data *pd)
 {
-   Eina_Iterator *it;
-   Eina_Array *r;
-   Eina_Stringshare *property;
-
-   r = eina_array_new(4);
-
-   it = eina_hash_iterator_key_new(pd->properties);
-   EINA_ITERATOR_FOREACH(it, property)
-     eina_array_push(r, property);
-   eina_iterator_free(it);
-
-   return r;
+   return eina_hash_iterator_key_new(pd->properties);
 }
 
 #define PROPERTY_EXIST 1
index cfc3ff1..78d253f 100644 (file)
@@ -141,25 +141,25 @@ _efl_ui_list_view_efl_ui_scrollable_interactive_viewport_geometry_get(const Eo *
 static Eina_Bool
 _efl_model_properties_has(Efl_Model *model, Eina_Stringshare *propfind)
 {
-   const Eina_Array *properties;
-   Eina_Array_Iterator iter_prop;
-   Eina_Stringshare *property;
+   Eina_Iterator *properties;
+   const char *property;
    Eina_Bool ret = EINA_FALSE;
-   unsigned i = 0;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(model, EINA_FALSE);
    EINA_SAFETY_ON_NULL_RETURN_VAL(propfind, EINA_FALSE);
 
    properties = efl_model_properties_get(model);
-
-   EINA_ARRAY_ITER_NEXT(properties, i, property, iter_prop)
+   EINA_ITERATOR_FOREACH(properties, property)
      {
-        if (property == propfind)
+        if (property == propfind ||
+            !strcmp(property, propfind))
           {
              ret = EINA_TRUE;
              break;
           }
      }
+   eina_iterator_free(properties);
+
    return ret;
 }
 
index aa3e710..4e57c75 100644 (file)
@@ -29,12 +29,18 @@ _teardown(void)
 
 EFL_START_TEST(properties_get)
 {
-   const Eina_Array *properties = NULL;
+   Eina_Iterator *properties = NULL;
    properties = efl_model_properties_get(connection);
    ck_assert_ptr_ne(NULL, properties);
 
    const unsigned int expected_properties_count = 1;
-   unsigned int actual_properties_count = eina_array_count(properties);
+   unsigned int actual_properties_count = 0;
+   const char *prop;
+
+   EINA_ITERATOR_FOREACH(properties, prop)
+     actual_properties_count++;
+   eina_iterator_free(properties);
+
    ck_assert_int_eq(expected_properties_count, actual_properties_count);
 }
 EFL_END_TEST
index f252fbc..1ac32f1 100644 (file)
@@ -52,12 +52,17 @@ _teardown(void)
 
 EFL_START_TEST(properties_get)
 {
-   const Eina_Array *properties = NULL;
+   Eina_Iterator *properties = NULL;
    properties = efl_model_properties_get(method);
    ck_assert_ptr_ne(NULL, properties);
 
    const unsigned int expected_properties_count = 3; // a, b and result arguments of 'sum' method
-   const unsigned int actual_properties_count = eina_array_count(properties);
+   unsigned int actual_properties_count = 0;
+   const char *prop;
+
+   EINA_ITERATOR_FOREACH(properties, prop)
+     actual_properties_count++;
+   eina_iterator_free(properties);
    ck_assert_int_eq(expected_properties_count, actual_properties_count);
 }
 EFL_END_TEST
index 7959a2e..e7539eb 100644 (file)
@@ -29,12 +29,17 @@ _teardown(void)
 
 EFL_START_TEST(properties_get)
 {
-   const Eina_Array *properties = NULL;
+   Eina_Iterator *properties = NULL;
    properties = efl_model_properties_get(object);
    ck_assert_ptr_ne(NULL, properties);
 
    const unsigned int expected_properties_count = 1;
-   unsigned int actual_properties_count = eina_array_count(properties);
+   unsigned int actual_properties_count = 0;
+   const char *prop;
+
+   EINA_ITERATOR_FOREACH(properties, prop)
+     actual_properties_count++;
+   eina_iterator_free(properties);
    ck_assert_int_eq(expected_properties_count, actual_properties_count);
 }
 EFL_END_TEST
index d966514..dabe81f 100644 (file)
@@ -54,7 +54,7 @@ _teardown(void)
 
 EFL_START_TEST(properties_get)
 {
-   const Eina_Array *properties = NULL;
+   Eina_Iterator *properties = NULL;
    // ELDBUS_FDO_INTERFACE have no properties
    properties = efl_model_properties_get(dbus_proxy);
    ck_assert_ptr_ne(NULL, properties);
@@ -63,6 +63,7 @@ EFL_START_TEST(properties_get)
    // due to an EFL change, but a change in the DBus interface:
    // properties contains 2 properties, "Interfaces" and "Features".
    //ck_assert_int_eq(0, eina_array_count(properties));
+   eina_iterator_free(properties);
 }
 EFL_END_TEST
 
index f896792..7651e02 100644 (file)
@@ -51,12 +51,17 @@ _teardown(void)
 
 EFL_START_TEST(properties_get)
 {
-   const Eina_Array *properties = NULL;
+   Eina_Iterator *properties = NULL;
    properties = efl_model_properties_get(pong_signal);
    ck_assert_ptr_ne(NULL, properties);
 
    const unsigned int expected_properties_count = 1; // 'response' only
-   const unsigned int actual_properties_count = eina_array_count(properties);
+   unsigned int actual_properties_count = 0;
+   const char *prop;
+
+   EINA_ITERATOR_FOREACH(properties, prop)
+     actual_properties_count += 1;
+   eina_iterator_free(properties);
    ck_assert_int_eq(expected_properties_count, actual_properties_count);
 }
 EFL_END_TEST
index 81d35df..69cf8ba 100644 (file)
@@ -52,12 +52,17 @@ _teardown(void)
 
 EFL_START_TEST(properties_get)
 {
-   const Eina_Array *properties = efl_model_properties_get(fake_server_proxy);
+   Eina_Iterator *properties = efl_model_properties_get(fake_server_proxy);
    ck_assert_ptr_ne(NULL, properties);
 
    // FAKE_SERVER_READONLY_PROPERTY, FAKE_SERVER_WRITEONLY_PROPERTY and FAKE_SERVER_READWRITE_PROPERTY properties
    const unsigned int expected_properties_count = 3;
-   const unsigned int actual_properties_count = eina_array_count(properties);
+   unsigned int actual_properties_count = 0;
+   const char *prop;
+
+   EINA_ITERATOR_FOREACH(properties, prop)
+     actual_properties_count++;
+   eina_iterator_free(properties);
    ck_assert_int_eq(expected_properties_count, actual_properties_count);
 
    _teardown();