From adb95630ef47abd0ea9e55a8e26f9b731e8fcdb1 Mon Sep 17 00:00:00 2001 From: Bruno Dilly Date: Wed, 30 Nov 2016 18:37:34 -0200 Subject: [PATCH] eina: remove tests, examples and docs for eina_model Summary: Since eina_model was dropped some years ago. Also a few other points where related stuff is just commented out. Reviewers: iscaro, barbieri Reviewed By: barbieri Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D4442 --- doc/eina_examples.dox | 18 - src/examples/eina/Makefile.am | 22 - src/examples/eina/eina_model_01.c | 235 ---- src/examples/eina/eina_model_02.c | 61 - src/examples/eina/eina_model_03.c | 236 ---- src/examples/eina/eina_model_04_animal.c | 76 -- src/examples/eina/eina_model_04_animal.h | 26 - src/examples/eina/eina_model_04_child.c | 81 -- src/examples/eina/eina_model_04_child.h | 23 - src/examples/eina/eina_model_04_human.c | 157 --- src/examples/eina/eina_model_04_human.h | 24 - src/examples/eina/eina_model_04_main.c | 110 -- src/examples/eina/eina_model_04_parrot.c | 95 -- src/examples/eina/eina_model_04_parrot.h | 24 - src/examples/eina/eina_model_04_whistler.c | 59 - src/examples/eina/eina_model_04_whistler.h | 45 - src/lib/eina/Eina.h | 1 - src/lib/eina/eina_main.c | 9 - src/lib/eina/eina_value.c | 133 +- src/tests/eina/eina_suite.c | 2 - src/tests/eina/eina_test_model.c | 1289 -------------------- src/tests/eina/eina_test_value.c | 48 - 22 files changed, 1 insertion(+), 2773 deletions(-) delete mode 100644 src/examples/eina/eina_model_01.c delete mode 100644 src/examples/eina/eina_model_02.c delete mode 100644 src/examples/eina/eina_model_03.c delete mode 100644 src/examples/eina/eina_model_04_animal.c delete mode 100644 src/examples/eina/eina_model_04_animal.h delete mode 100644 src/examples/eina/eina_model_04_child.c delete mode 100644 src/examples/eina/eina_model_04_child.h delete mode 100644 src/examples/eina/eina_model_04_human.c delete mode 100644 src/examples/eina/eina_model_04_human.h delete mode 100644 src/examples/eina/eina_model_04_main.c delete mode 100644 src/examples/eina/eina_model_04_parrot.c delete mode 100644 src/examples/eina/eina_model_04_parrot.h delete mode 100644 src/examples/eina/eina_model_04_whistler.c delete mode 100644 src/examples/eina/eina_model_04_whistler.h delete mode 100644 src/tests/eina/eina_test_model.c diff --git a/doc/eina_examples.dox b/doc/eina_examples.dox index 33e83de465..ad7fcc6b2a 100644 --- a/doc/eina_examples.dox +++ b/doc/eina_examples.dox @@ -30,15 +30,6 @@ * @li @ref eina_log_02.c * @li @ref eina_log_03.c * @li @ref eina_magic_01.c - * @li @ref eina_model_01.c - * @li @ref eina_model_02.c - * @li @ref eina_model_03.c - * @li @ref eina_model_04_animal.c - * @li @ref eina_model_04_child.c - * @li @ref eina_model_04_human.c - * @li @ref eina_model_04_main.c - * @li @ref eina_model_04_parrot.c - * @li @ref eina_model_04_whistler.c * @li @ref eina_simple_xml_parser_01.c * @li @ref eina_str_01.c * @li @ref eina_strbuf_01.c @@ -87,15 +78,6 @@ * @example eina_log_02.c * @example eina_log_03.c * @example eina_magic_01.c - * @example eina_model_01.c - * @example eina_model_02.c - * @example eina_model_03.c - * @example eina_model_04_animal.c - * @example eina_model_04_child.c - * @example eina_model_04_human.c - * @example eina_model_04_main.c - * @example eina_model_04_parrot.c - * @example eina_model_04_whistler.c * @example eina_simple_xml_parser_01.c * @example eina_str_01.c * @example eina_strbuf_01.c diff --git a/src/examples/eina/Makefile.am b/src/examples/eina/Makefile.am index 56eb2777e8..4ce1258197 100644 --- a/src/examples/eina/Makefile.am +++ b/src/examples/eina/Makefile.am @@ -58,10 +58,6 @@ eina_magic_01.c \ eina_xattr_01.c \ eina_xattr_02.c -#eina_model_01.c \ -#eina_model_02.c \ -#eina_model_03.c - EXTRA_PROGRAMS = \ eina_accessor_01 \ eina_array_01 \ @@ -103,24 +99,6 @@ eina_inarray_03 \ eina_xattr_01 \ eina_xattr_02 -#eina_model_01 \ -#eina_model_02 \ -#eina_model_03 \ -#eina_model_04 - -#eina_model_04_SOURCES = \ -#eina_model_04_animal.c \ -#eina_model_04_child.c \ -#eina_model_04_human.c \ -#eina_model_04_main.c \ -#eina_model_04_parrot.c \ -#eina_model_04_whistler.c \ -#eina_model_04_animal.h \ -#eina_model_04_child.h \ -#eina_model_04_human.h \ -#eina_model_04_parrot.h \ -#eina_model_04_whistler.h - EXTRA_PROGRAMS += eina_tiler_01 eina_tiler_01_CPPFLAGS = \ diff --git a/src/examples/eina/eina_model_01.c b/src/examples/eina/eina_model_01.c deleted file mode 100644 index 28895aa666..0000000000 --- a/src/examples/eina/eina_model_01.c +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Compile with: - * gcc -o eina_model_01 eina_model_01.c `pkg-config --cflags --libs eina` - */ - -/* - * This example demonstrates the usage of Eina Model by implementing - * Bank Account Class, which is inherited from Base Class; - * and Credit Card Class, which is inherited from Bank Account Class. - * - * Base Class(Eina_Model_Type) --> Bank Account Class --> Credit Card Class - * - * Bank Account Class implements "bank_account_data_set()" and "print()" methods; - * Credit Card Class inherits these two and implements "credit_card_data_set()" - * - * - * Bank Account Class::print() calls for "_bank_account_data_print" - * Credit Card Class ::print() is reloaded with "_credit_card_data_print()" - * which calls for parent function "_bank_account_data_print" - * - */ - - -#include -#include - -/* - * Defining type for new model type - * Model will have two methods - */ -typedef struct _Bank_Account_Type -{ - Eina_Model_Type parent_class; - void (*bank_account_data_set)(Eina_Model *, const char *name, const char *number); - void (*print)(Eina_Model *); -} Bank_Account_Type; - -/* - * Defining type for Bank Account private data - */ -typedef struct _Bank_Account_Data -{ - char name[30]; - char number[30]; -} Bank_Account_Data; - -/* - * Defining type for Credit Card model type, which will be inherited from Bank Account model type - * Model will have two parent's methods and additional one - */ -typedef struct _Credit_Card_Type -{ - Bank_Account_Type parent_class; - void (*credit_card_data_set)(Eina_Model *, const char *, const char *, int) ; -} Credit_Card_Type; - -/* - * Defining type for Credit Card private data - */ -typedef struct _Credit_Card_Data -{ - char number[30]; - char expiry_date[30]; - int pin; -} Credit_Card_Data; - -static Bank_Account_Type _BANK_ACCOUNT_TYPE; -static Credit_Card_Type _CREDIT_CARD_TYPE; -static Eina_Model_Type *BANK_ACCOUNT_TYPE = (Eina_Model_Type *) &_BANK_ACCOUNT_TYPE; -static Eina_Model_Type *CREDIT_CARD_TYPE = (Eina_Model_Type *) &_CREDIT_CARD_TYPE; - - -/* - * Defining method for for Bank Account data - */ -static void -_bank_account_data_set(Eina_Model *mdl, const char *name, const char *number) -{ - Bank_Account_Data *bdata = eina_model_type_private_data_get(mdl, BANK_ACCOUNT_TYPE); - - if (!bdata) - printf("ERROR\n"); - - if (name != NULL) - { - strncpy(bdata->name, name, sizeof(bdata->name)); - bdata->name[sizeof(bdata->number) - 1] = '\0'; - } - - if (number != NULL) - { - strncpy(bdata->number, number, sizeof(bdata->number)); - bdata->number[sizeof(bdata->number) - 1] = '\0'; - } - - printf("%s :: %s %p\n", eina_model_type_name_get(eina_model_type_get(mdl)) ,__func__, mdl); -} - - -static void -_credit_card_data_set(Eina_Model *mdl, const char *number, const char *expiry_date, int pin) -{ - Credit_Card_Data *cdata = eina_model_type_private_data_get(mdl, CREDIT_CARD_TYPE); - - if (!cdata) - printf("ERROR\n"); - - if (number != NULL) - { - strncpy(cdata->number, number, sizeof(cdata->number)); - cdata->number[sizeof(cdata->number) - 1] = '\0'; - } - - if (expiry_date != NULL) - { - strncpy(cdata->expiry_date, expiry_date, sizeof(cdata->expiry_date)); - cdata->expiry_date[sizeof(cdata->expiry_date) - 1] = '\0'; - } - - cdata->pin = pin; - printf("%s :: %s %p\n", eina_model_type_name_get(eina_model_type_get(mdl)) ,__func__, mdl); -} - -static void -_bank_account_data_print(Eina_Model *mdl) -{ - const Bank_Account_Data *bdata = eina_model_type_private_data_get(mdl, BANK_ACCOUNT_TYPE); - - printf("\n%s :: %s %p \n\tName: %s(%p)\n\tAccount: %s(%p)\n", eina_model_type_name_get(eina_model_type_get(mdl)) ,__func__, mdl - , bdata->name, bdata->name, bdata->number, bdata->number); -} - -static void -_credit_card_data_print(Eina_Model *mdl) -{ - void (*pf)(Eina_Model *); - const Eina_Model_Type *ptype = eina_model_type_parent_get(eina_model_type_get(mdl)); - //const Eina_Model_Type *ptype = eina_model_type_get(mdl); - - pf = eina_model_type_method_resolve(ptype, mdl, Bank_Account_Type, print); - if (pf) - pf(mdl); - else - printf("ERROR: %d", __LINE__); - const Credit_Card_Data *cdata = eina_model_type_private_data_get(mdl, CREDIT_CARD_TYPE); - printf("%s :: %s %p \n\tNumber: %s(%p)\n\tCC Expiry Date: %s(%p)\n\tCC PIN: %d(%p)\n", eina_model_type_name_get(eina_model_type_get(mdl)) ,__func__, mdl - , cdata->number, cdata->number, cdata->expiry_date, cdata->expiry_date, cdata->pin, &cdata->pin); -} - -#define BANK_ACCOUNT(x) ((Bank_Account_Type *) x) -#define CREDIT_CARD(x) ((Credit_Card_Type *) x) - -void -bank_account_data_set(Eina_Model *mdl, const char *name, char *number) -{ - - EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(mdl, BANK_ACCOUNT_TYPE)); - - void (*pf)(Eina_Model *, const char *, const char *); - pf = eina_model_method_resolve(mdl, Bank_Account_Type, bank_account_data_set); - if (pf) - pf(mdl, name, number); - else - printf("ERROR %d\n", __LINE__); -} - -void -data_print(Eina_Model *mdl) -{ - EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(mdl, BANK_ACCOUNT_TYPE)); - - void (*pf)(Eina_Model *); - pf = eina_model_method_resolve(mdl, Bank_Account_Type, print); - if (pf) - pf(mdl); - else - printf("ERROR %d\n", __LINE__); -} - -void -credit_card_data_set(Eina_Model *mdl, const char *number, const char *expiry_date, int pin) -{ - EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(mdl, CREDIT_CARD_TYPE)); - - void (*pf)(Eina_Model *, const char *, const char *, int); - pf = eina_model_method_resolve(mdl, Credit_Card_Type, credit_card_data_set); - if (pf) - pf(mdl, number, expiry_date, pin); - else - printf("ERROR %d\n", __LINE__); -} - -int main(void) -{ - Eina_Model *b, *cc; - - eina_init(); - - memset(&_BANK_ACCOUNT_TYPE, 0, sizeof(_BANK_ACCOUNT_TYPE)); - memset(&_CREDIT_CARD_TYPE, 0, sizeof(_CREDIT_CARD_TYPE)); - - BANK_ACCOUNT_TYPE->version = EINA_MODEL_TYPE_VERSION; - BANK_ACCOUNT_TYPE->type_size = sizeof(Bank_Account_Type); - BANK_ACCOUNT_TYPE->private_size = sizeof(Bank_Account_Data); - BANK_ACCOUNT_TYPE->name = "Bank_Account_Model"; - BANK_ACCOUNT_TYPE->parent = EINA_MODEL_TYPE_GENERIC; - BANK_ACCOUNT(BANK_ACCOUNT_TYPE)->bank_account_data_set = _bank_account_data_set; - BANK_ACCOUNT(BANK_ACCOUNT_TYPE)->print = _bank_account_data_print; - - CREDIT_CARD_TYPE->version = EINA_MODEL_TYPE_VERSION; - CREDIT_CARD_TYPE->type_size = sizeof(Credit_Card_Type); - CREDIT_CARD_TYPE->private_size = sizeof(Credit_Card_Data); - CREDIT_CARD_TYPE->name = "Credit_Card_Model"; - CREDIT_CARD_TYPE->parent = BANK_ACCOUNT_TYPE; - CREDIT_CARD(CREDIT_CARD_TYPE)->credit_card_data_set = _credit_card_data_set; - BANK_ACCOUNT(CREDIT_CARD_TYPE)->print = _credit_card_data_print; - - b = eina_model_new(BANK_ACCOUNT_TYPE); //creating object of bank class - cc = eina_model_new(CREDIT_CARD_TYPE); //creating object of credit card class - - bank_account_data_set(b, "Bill Clark", "8569214756"); - bank_account_data_set(cc, "John Smith", "3154789"); - - credit_card_data_set(cc, "5803 6589 4786 3279 9173", "01/01/2015", 1234); - - data_print(b); - data_print(cc); - - eina_model_unref(b); - eina_model_unref(cc); - - eina_shutdown(); - - return 0; -} diff --git a/src/examples/eina/eina_model_02.c b/src/examples/eina/eina_model_02.c deleted file mode 100644 index a2cb693d67..0000000000 --- a/src/examples/eina/eina_model_02.c +++ /dev/null @@ -1,61 +0,0 @@ -//Compile with: -//gcc -g eina_model_02.c -o eina_model_02 `pkg-config --cflags --libs eina` - -#include - -static void _cb_on_deleted(void *data, Eina_Model *model, const Eina_Model_Event_Description *desc, void *event_info); - -int main(void) -{ - Eina_Model *m; - char *s; - int i; - - eina_init(); - - m = eina_model_new(EINA_MODEL_TYPE_GENERIC); - - eina_model_event_callback_add(m, "deleted", _cb_on_deleted, NULL); - - //Adding properties to model - for (i = 0; i < 5; i++) - { - Eina_Value val; - char name[2] = {'a'+ i, 0}; - eina_value_setup(&val, EINA_VALUE_TYPE_INT); - eina_value_set(&val, i); - eina_model_property_set(m, name, &val); - eina_value_flush(&val); - } - - //Adding children to model - for (i = 0; i < 5; i++) - { - Eina_Value val; - Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC); - eina_value_setup(&val, EINA_VALUE_TYPE_INT); - eina_value_set(&val, i); - eina_model_property_set(c, "x", &val); - - eina_model_event_callback_add(c, "deleted", _cb_on_deleted, NULL); - - eina_model_child_append(m, c); - //Now that the child has been appended to a model, it's parent will manage it's lifecycle - eina_model_unref(c); - eina_value_flush(&val); - } - - s = eina_model_to_string(m); - printf("model as string:\n%s\n", s); - - free(s); - eina_model_unref(m); - eina_shutdown(); - - return 0; -} - -static void _cb_on_deleted(void *data, Eina_Model *model, const Eina_Model_Event_Description *desc, void *event_info) -{ - printf("deleted %p\n", model); -} diff --git a/src/examples/eina/eina_model_03.c b/src/examples/eina/eina_model_03.c deleted file mode 100644 index 61498da47c..0000000000 --- a/src/examples/eina/eina_model_03.c +++ /dev/null @@ -1,236 +0,0 @@ -//Compile with: -//gcc -g eina_model_03.c -o eina_model_03 `pkg-config --cflags --libs eina` - -#include -#include -#include -#include - -static Eina_Model_Type *ADDRESS_BOOK_TYPE; -static Eina_Model_Type *PERSON_TYPE; - -static void address_book_init(void); - -int main(void) -{ - Eina_Model *address_book; - Eina_Value val; - int i, count; - char *s; - - eina_init(); - - address_book_init(); - - address_book = eina_model_new(ADDRESS_BOOK_TYPE); - - eina_value_setup(&val, EINA_VALUE_TYPE_STRING); - eina_value_set(&val, "addr_book.txt"); - eina_model_property_set(address_book, "filename", &val); - eina_value_flush(&val); - - eina_model_load(address_book); - s = eina_model_to_string(address_book); - printf("model as string:\n%s\n\n", s); - free(s); - - count = eina_model_child_count(address_book); - printf("Address Book with %d entries:\n", count); - for (i = 0; i < count; i++) - { - Eina_Model *person = eina_model_child_get(address_book, i); - Eina_Value nameval, emailval; - const char *name, *email; - - eina_model_property_get(person, "name", &nameval); - eina_model_property_get(person, "email", &emailval); - - eina_value_get(&nameval, &name); - eina_value_get(&emailval, &email); - - printf("%02d \"%s\" <%s>\n", i, name, email); - - // We don't need property values anymore - eina_value_flush(&nameval); - eina_value_flush(&emailval); - - // We don't need our reference to person anymore - eina_model_unref(person); - } - - eina_model_unref(address_book); - eina_shutdown(); - - return 0; -} - -// Structure Descriptions are just used internally in the type constructors: -static Eina_Value_Struct_Desc *ADDRESS_BOOK_DESC; -static Eina_Value_Struct_Desc *PERSON_DESC; - -static Eina_Bool -_person_constructor(Eina_Model *model) -{ - // call parent type constructor, like "super" in other languages: - if (!eina_model_type_constructor(EINA_MODEL_TYPE_STRUCT, model)) - return EINA_FALSE; - - // Do specific setup of our internal structure, letting it know about - // our description - return eina_model_struct_set(model, PERSON_DESC, NULL); -} - -static Eina_Bool -_address_book_constructor(Eina_Model *model) -{ - // call parent type constructor, like "super" in other languages: - if (!eina_model_type_constructor(EINA_MODEL_TYPE_STRUCT, model)) - return EINA_FALSE; - - // Do specific setup of our internal structure, letting it know about - // our description - return eina_model_struct_set(model, ADDRESS_BOOK_DESC, NULL); -} - -static Eina_Bool -_address_book_load(Eina_Model *model) -{ - const char *filename; - Eina_Value val; - char buf[256]; - FILE *f; - - // We retrieve filename from property of same name: - eina_model_property_get(model, "filename", &val); - eina_value_get(&val, &filename); - - EINA_SAFETY_ON_NULL_RETURN_VAL(filename, EINA_FALSE); - - f = fopen(filename, "rb"); - - // Now that we have used filename, we must free its memory holder: - eina_value_flush(&val); - - EINA_SAFETY_ON_NULL_RETURN_VAL(f, EINA_FALSE); - - while (fgets(buf, sizeof(buf), f)) - { - Eina_Model *person; - char *name, *email; - - if (strlen(buf) <= 1) - continue; - - name = strtok(buf, "\t"); - email = strtok(NULL, "\n"); - - if ((!name) || (!email)) continue; - - // Create person - person = eina_model_new(PERSON_TYPE); - - // Setup value type as string, as our properties are strings: - eina_value_setup(&val, EINA_VALUE_TYPE_STRING); - - // Set string properties: - eina_value_set(&val, name); - eina_model_property_set(person, "name", &val); - - eina_value_set(&val, email); - eina_model_property_set(person, "email", &val); - - // Flush value, free string - eina_value_flush(&val); - - // Add person to the end of model children - eina_model_child_append(model, person); - - // Model already holds its reference to person, we release ours - eina_model_unref(person); - } - - fclose(f); - return EINA_TRUE; -} - -static void -address_book_init(void) -{ - // Declare type for internal struct, this is just used to easily - // create Eina_Value_Struct_Member array for Eina_Value_Struct_Desc. - // - // We don't need this structure outside address_book_init() - // as it is managed automatically by Eina_Value_Struct, used by - // Eina_Model_Struct! Handy! :-) - typedef struct _Person Person; - struct _Person - { - const char *name; - const char *email; - }; - static Eina_Value_Struct_Member person_members[] = { - // no eina_value_type as they are not constant initializers, see below. - EINA_VALUE_STRUCT_MEMBER(NULL, Person, name), - EINA_VALUE_STRUCT_MEMBER(NULL, Person, email) - }; - // Values that cannot be set on static declarations since they are not - // constant initializers. It is a nitpick from C that we need to deal with - // here and on all our other declarations. - person_members[0].type = EINA_VALUE_TYPE_STRING; - person_members[1].type = EINA_VALUE_TYPE_STRING; - - static Eina_Value_Struct_Desc person_desc = { - EINA_VALUE_STRUCT_DESC_VERSION, - NULL, // no special operations - person_members, - EINA_C_ARRAY_LENGTH(person_members), - sizeof(Person) - }; - static Eina_Model_Type person_type = EINA_MODEL_TYPE_INIT_NOPRIVATE - ("Person_Type", - Eina_Model_Type, - NULL, // no type as EINA_MODEL_TYPE_STRUCT is not constant initializer! - NULL, // no extra interfaces - NULL // no extra events); - ); - person_type.parent = EINA_MODEL_TYPE_STRUCT; - // Set our overloaded methods: - person_type.constructor = _person_constructor; - - typedef struct _Address_Book Address_Book; - struct _Address_Book - { - const char *filename; - }; - static Eina_Value_Struct_Member address_book_members[] = { - // no eina_value_type as they are not constant initializers, see below. - EINA_VALUE_STRUCT_MEMBER(NULL, Address_Book, filename) - }; - address_book_members[0].type = EINA_VALUE_TYPE_STRING; - static Eina_Value_Struct_Desc address_book_desc = { - EINA_VALUE_STRUCT_DESC_VERSION, - NULL, // no special operations - address_book_members, - EINA_C_ARRAY_LENGTH(address_book_members), - sizeof(Address_Book) - }; - static Eina_Model_Type address_book_type = EINA_MODEL_TYPE_INIT_NOPRIVATE - ("Address_Book_Type", - Eina_Model_Type, - NULL, // no type as EINA_MODEL_TYPE_STRUCT is not constant initializer! - NULL, // no extra interfaces - NULL // no extra events); - ); - address_book_type.parent = EINA_MODEL_TYPE_STRUCT; - // Set our overloaded methods: - address_book_type.constructor = _address_book_constructor; - address_book_type.load = _address_book_load; - - // Expose the configured pointers to public usage: - // NOTE: they are static, so they live after this function returns! - PERSON_TYPE = &person_type; - PERSON_DESC = &person_desc; - - ADDRESS_BOOK_TYPE = &address_book_type; - ADDRESS_BOOK_DESC = &address_book_desc; -} diff --git a/src/examples/eina/eina_model_04_animal.c b/src/examples/eina/eina_model_04_animal.c deleted file mode 100644 index bc9f06b7a8..0000000000 --- a/src/examples/eina/eina_model_04_animal.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - * animal.c - */ - -#include "eina_model_04_animal.h" - -static Eina_Bool initialized = EINA_FALSE; - -static void -_animal_eat(Eina_Model *m) -{ - printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)), - __func__); - printf("\t\t Eat Animal\n"); -} - -static void -_animal_breathe(Eina_Model *m) -{ - printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)), - __func__); - printf("\t\t Breathe Animal\n"); -} - -const char *ANIMAL_MODEL_TYPE_NAME = NULL; -static Animal_Type _ANIMAL_TYPE; - -const Eina_Model_Type * const ANIMAL_TYPE = (Eina_Model_Type *) &_ANIMAL_TYPE; - -void -animal_init(void) -{ - Eina_Model_Type *type; - - if (initialized) return; - initialized = EINA_TRUE; - - ANIMAL_MODEL_TYPE_NAME = "Animal_Model_Type"; - - type = (Eina_Model_Type *)&_ANIMAL_TYPE; - type->version = EINA_MODEL_TYPE_VERSION; - type->name = ANIMAL_MODEL_TYPE_NAME; - type->private_size = 0; - - eina_model_type_subclass_setup(type, EINA_MODEL_TYPE_GENERIC); - - /* define extra methods */ - - type->type_size = sizeof(Animal_Type); - ANIMAL_TYPE(type)->breathe = _animal_breathe; - ANIMAL_TYPE(type)->eat = _animal_eat; -} - -void -animal_breathe(Eina_Model *m) -{ - EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, ANIMAL_TYPE)); - - void (*pf)(Eina_Model *m); - pf = eina_model_method_resolve(m, Animal_Type, breathe); - EINA_SAFETY_ON_NULL_RETURN(pf); - printf("%s() \t", __func__); - pf(m); -} - -void -animal_eat(Eina_Model *m) -{ - EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, ANIMAL_TYPE)); - - void (*pf)(Eina_Model *m); - pf = eina_model_method_resolve(m, Animal_Type, eat); - EINA_SAFETY_ON_NULL_RETURN(pf); - printf("%s() \t", __func__); - pf(m); -} diff --git a/src/examples/eina/eina_model_04_animal.h b/src/examples/eina/eina_model_04_animal.h deleted file mode 100644 index 1af94c3831..0000000000 --- a/src/examples/eina/eina_model_04_animal.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * animal.h - */ - -#ifndef ANIMAL_H_ -#define ANIMAL_H_ - -#include - -extern const char *ANIMAL_MODEL_TYPE_NAME; -extern const Eina_Model_Type * const ANIMAL_TYPE; - -#define ANIMAL_TYPE(x) ((Animal_Type *) (eina_model_type_subclass_check((x), ANIMAL_TYPE) ? (x) : NULL)) - -typedef struct _Animal_Type -{ - Eina_Model_Type parent_class; - void (*eat)(Eina_Model *m); - void (*breathe)(Eina_Model *m); -} Animal_Type; - -void animal_init(void); -void animal_breathe(Eina_Model *m); -void animal_eat(Eina_Model *m); - -#endif /* ANIMAL_H_ */ diff --git a/src/examples/eina/eina_model_04_child.c b/src/examples/eina/eina_model_04_child.c deleted file mode 100644 index 59b8aa5f1a..0000000000 --- a/src/examples/eina/eina_model_04_child.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * child.c - */ - -#include "eina_model_04_child.h" -#include "eina_model_04_whistler.h" - -static Eina_Bool initialized = EINA_FALSE; - -static void -_child_cry(Eina_Model *m) -{ - printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)), - __func__); - printf("\t\t Cry Child\n"); -} - -static void -_child_dive(Eina_Model *m) -{ - printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)), - __func__); - printf("\t\t Dive Child\n"); -} - -const char *CHILD_MODEL_TYPE_NAME = NULL; - -static Child_Type _CHILD_TYPE; -const Eina_Model_Type * const CHILD_TYPE = (Eina_Model_Type *) &_CHILD_TYPE; - -static const Diver_Interface _DIVER_INTERFACE; -static const Eina_Model_Interface * const DIVER_INTERFACE = - (Eina_Model_Interface *) &_DIVER_INTERFACE; - -static const Eina_Model_Interface * CLASS_INTERFACE_ARRAY[] = - { &_DIVER_INTERFACE.base_interface, NULL }; //this array is for model - -void -child_init() -{ - Eina_Model_Type *type; - - if (initialized) return; - initialized = EINA_TRUE; - - human_init(); - - //overriding Diver Interface - Eina_Model_Interface * iface = (Eina_Model_Interface *) &_DIVER_INTERFACE; - iface->version = EINA_MODEL_INTERFACE_VERSION; - iface->interface_size = sizeof(Diver_Interface); - iface->name = DIVER_INTERFACE_NAME; - DIVER_INTERFACE(iface)->dive = _child_dive; - - //creating instance of Child type - CHILD_MODEL_TYPE_NAME = "Child_Model_Type"; - - type = (Eina_Model_Type *) &_CHILD_TYPE; - type->version = EINA_MODEL_TYPE_VERSION; - type->name = CHILD_MODEL_TYPE_NAME; - - eina_model_type_subclass_setup(type, HUMAN_TYPE); - - type->type_size = sizeof(Child_Type); - type->interfaces = CLASS_INTERFACE_ARRAY; - - CHILD_TYPE(type)->cry = _child_cry; -} - -//call for implemented Child Class function -void -child_cry(Eina_Model *m) -{ - EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, CHILD_TYPE)); - - void (*pf)(Eina_Model *m); - pf = eina_model_method_resolve(m, Child_Type, cry); - EINA_SAFETY_ON_NULL_RETURN(pf); - printf("%s() \t\t", __func__); - pf(m); -} diff --git a/src/examples/eina/eina_model_04_child.h b/src/examples/eina/eina_model_04_child.h deleted file mode 100644 index 5424217839..0000000000 --- a/src/examples/eina/eina_model_04_child.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * child.h - */ - -#ifndef CHILD_H_ -#define CHILD_H_ - -#include "eina_model_04_human.h" - -extern const char *CHILD_MODEL_TYPE_NAME; -extern const Eina_Model_Type * const CHILD_TYPE; -#define CHILD_TYPE(x) ((Child_Type *) (eina_model_type_subclass_check((x), CHILD_TYPE) ? (x) : NULL)) - -typedef struct _Child_Type -{ - Human_Type parent_class; - void (*cry)(Eina_Model *m); -} Child_Type; - -void child_init(); -void child_cry(Eina_Model *m); - -#endif /* CHILD_H_ */ diff --git a/src/examples/eina/eina_model_04_human.c b/src/examples/eina/eina_model_04_human.c deleted file mode 100644 index d9a10ab2a6..0000000000 --- a/src/examples/eina/eina_model_04_human.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * human.c - * - */ - -#include "eina_model_04_human.h" -#include "eina_model_04_whistler.h" - -static Eina_Bool initialized = EINA_FALSE; - -static void -_human_eat(Eina_Model *m) -{ - printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)), - __func__); - printf("\t\t Salad\n"); -} - -static void -_human_walk(Eina_Model *m) -{ - printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)), - __func__); - printf("\t\t Walk\n"); -} - -static void -_human_whistle(Eina_Model *m) -{ - printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)), - __func__); - printf("\t\t Whistle Human\n"); -} - -static void -_human_swim(Eina_Model *m) -{ - printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)), - __func__); - printf("\t\t Swim Human\n"); -} - -static void -_human_dive(Eina_Model *m) -{ - printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)), - __func__); - printf("\t\t Dive Human\n"); -} -/* - * defining Human Model Instance - * defining Whistler Interface instance - * defining Swimmer Interface instance - * defining Diver Interface instance - */ - -const char *HUMAN_MODEL_TYPE_NAME = NULL; - -static Human_Type _HUMAN_TYPE; -const Eina_Model_Type * const HUMAN_TYPE = (Eina_Model_Type *) &_HUMAN_TYPE; - -static const Whistler_Interface _WHISTLER_INTERFACE; -static const Eina_Model_Interface * const WHISTLER_INTERFACE = - (Eina_Model_Interface *) &_WHISTLER_INTERFACE; - -static const Swimmer_Interface _SWIMMER_INTERFACE; -static const Eina_Model_Interface * const SWIMMER_INTERFACE = - (Eina_Model_Interface *) &_SWIMMER_INTERFACE; - -static const Diver_Interface _DIVER_INTERFACE; -static const Eina_Model_Interface * const DIVER_INTERFACE = - (Eina_Model_Interface *) &_DIVER_INTERFACE; - -/* - * defining parent interfaces for Diver Interface instance - * defining Interfaces for Human Model instance - */ -static const Eina_Model_Interface * PARENT_INTERFACES_ARRAY[] = - { &_SWIMMER_INTERFACE.base_interface, NULL }; //this array is for model -static const Eina_Model_Interface * MODEL_INTERFACES_ARRAY[] = - { &_WHISTLER_INTERFACE.base_interface, &_DIVER_INTERFACE.base_interface, - NULL }; //this array is for model - -void -human_init() -{ - Eina_Model_Type *type; - - if (initialized) return; - initialized = EINA_TRUE; - - animal_init(); - - /* - * Initializing Whistler Interface Instance - */ - Eina_Model_Interface *iface = (Eina_Model_Interface *) &_WHISTLER_INTERFACE; - iface->version = EINA_MODEL_INTERFACE_VERSION; - iface->interface_size = sizeof(Whistler_Interface); - iface->name = WHISTLER_INTERFACE_NAME; - WHISTLER_INTERFACE(iface)->whistle = _human_whistle; - - /* - * Initializing Swimmer Interface Instance - */ - iface = (Eina_Model_Interface *) &_SWIMMER_INTERFACE; - iface->version = EINA_MODEL_INTERFACE_VERSION; - iface->interface_size = sizeof(Swimmer_Interface); - iface->name = SWIMMER_INTERFACE_NAME; - SWIMMER_INTERFACE(iface)->swim = _human_swim; - - /* - * Initializing Diver Interface Instance - * Diver_Interface is inherited from Swimmer - */ - iface = (Eina_Model_Interface *) &_DIVER_INTERFACE; - iface->version = EINA_MODEL_INTERFACE_VERSION; - iface->interface_size = sizeof(Diver_Interface); - iface->name = DIVER_INTERFACE_NAME; - iface->interfaces = PARENT_INTERFACES_ARRAY; - DIVER_INTERFACE(iface)->dive = _human_dive; - - /* - * Initializing instance of Human Model - */ - - HUMAN_MODEL_TYPE_NAME = "Human_Model_Type"; - - type = (Eina_Model_Type *) &_HUMAN_TYPE; - type->version = EINA_MODEL_TYPE_VERSION; - type->name = HUMAN_MODEL_TYPE_NAME; - type->private_size = 0; - - eina_model_type_subclass_setup(type, ANIMAL_TYPE); - - type->type_size = sizeof(Human_Type); - type->interfaces = MODEL_INTERFACES_ARRAY; - - ANIMAL_TYPE(type)->eat = _human_eat; - HUMAN_TYPE(type)->walk =_human_walk; -} - - -/* - * call for implemented Human Class function - */ -void -human_walk(Eina_Model *m) -{ - EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, HUMAN_TYPE)); - - void (*pf)(Eina_Model *m); - pf = eina_model_method_resolve(m, Human_Type, walk); - EINA_SAFETY_ON_NULL_RETURN(pf); - printf("%s() \t", __func__); - pf(m); -} diff --git a/src/examples/eina/eina_model_04_human.h b/src/examples/eina/eina_model_04_human.h deleted file mode 100644 index 1ad7518010..0000000000 --- a/src/examples/eina/eina_model_04_human.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * human.h - */ - -#ifndef HUMAN_H_ -#define HUMAN_H_ - -#include "eina_model_04_animal.h" - -extern const char *HUMAN_MODEL_TYPE_NAME; -extern const Eina_Model_Type * const HUMAN_TYPE; - -#define HUMAN_TYPE(x) ((Human_Type *) (eina_model_type_subclass_check((x), ANIMAL_TYPE) ? (x) : NULL)) - -typedef struct _Human_Type -{ - Animal_Type parent_class; - void (*walk)(Eina_Model *m); -} Human_Type; - -void human_init(); -void human_walk(Eina_Model *m); - -#endif /* HUMAN_H_ */ diff --git a/src/examples/eina/eina_model_04_main.c b/src/examples/eina/eina_model_04_main.c deleted file mode 100644 index 0e419ec317..0000000000 --- a/src/examples/eina/eina_model_04_main.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * main_animal.c - * compile with: gcc eina_model_04_*.c -o eina_model_04 `pkg-config --cflags --libs eina` - */ - -/* - * This example demonstrates the extended usage of Eina Model. - * Class inheritance and interface implementation - * - * Animal Class is inherited from BaseClass and implements - * "_breathe_animal()" and "_eat_animal()" methods. - * - * Human Class is inherited from Animal class. - * Parrot Class is inherited from Animal class. - * - * Child Class is inherited from Human class. - * - * Human Class and Parrot Class implement Whistler Interface. - * Human Class implements Diver Interface. Diver Interface inherited from Swimmer Interface - * - * - * Animal Class (inherited from Base Class) - * + _breathe_animal() - * + _eat_animal() - * / -------/ \-------------\ - * / \ - * Human Class Parrot Class - * inherits inherits - * + animal_breathe() + animal_breathe() - * overrides overrides - * + animal_eat(); + animal_eat(); - * implements implements - * + human_walk(); + parrot_fly(); - * - * implements Whistler, Swimmer, implements Whistler, - * Diver Interfaces: + whistler_whistle() - * + whistler_whistle() - * + swimmer_swim() - * + diver_dive() - * - * ---------------------------------------------------------- - * | Swim_Interface | - * | + swim() | - * | | | - * | | | - * | Dive Intarface (inherited from Swim Interface) | - * | + dive() | - * --------------------------------------------------------- - * | - * | - * Child Class - * + inherits all parent's methods - * + implements cry_child() - * + overrides dive() interface method - */ - -#include -#include "eina_model_04_human.h" -#include "eina_model_04_parrot.h" -#include "eina_model_04_child.h" -#include "eina_model_04_whistler.h" - -int -main() -{ - Eina_Model *h, *p, *c; - - eina_init(); - - human_init(); - parrot_init(); - child_init(); - - h = eina_model_new(HUMAN_TYPE); - p = eina_model_new(PARROT_TYPE); - c = eina_model_new(CHILD_TYPE); - - animal_breathe(p); - animal_eat(p); - parrot_fly(p); - whistler_whistle(p); - - printf("\n"); - animal_breathe(h); - animal_eat(h); - human_walk(h); - whistler_whistle(h); - swimmer_swim(h); - diver_dive(h); - - printf("\n"); - animal_breathe(c); - animal_eat(c); - human_walk(c); - whistler_whistle(c); - swimmer_swim(c); - diver_dive(c); - child_cry(c); - - eina_model_unref(c); - eina_model_unref(h); - eina_model_unref(p); - - eina_shutdown(); - - return 0; -} - - - diff --git a/src/examples/eina/eina_model_04_parrot.c b/src/examples/eina/eina_model_04_parrot.c deleted file mode 100644 index ac619ee4e6..0000000000 --- a/src/examples/eina/eina_model_04_parrot.c +++ /dev/null @@ -1,95 +0,0 @@ -/* - * parrot.c - */ - -#include "eina_model_04_parrot.h" -#include "eina_model_04_whistler.h" - -static Eina_Bool initialized = EINA_FALSE; - -static void -_parrot_fly(Eina_Model *m) -{ - printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)), - __func__); - printf("\t\t Fly Parrot\n"); -} - -static void -_parrot_eat(Eina_Model *m) -{ - printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)), - __func__); - printf("\t\t Grain \n"); -} - -static void -_parrot_whistle(Eina_Model *m) -{ - printf("%s\t%s", eina_model_type_name_get(eina_model_type_get(m)), - __func__); - printf("\t\t Whistle Parrot\n"); -} - -/* - * defining Parrot Model Instance - * defining Whistler Interface instance - */ -const char *PARROT_MODEL_TYPE_NAME = NULL; - -static Parrot_Type _PARROT_TYPE; -const Eina_Model_Type * const PARROT_TYPE = (Eina_Model_Type *) &_PARROT_TYPE; - -static const Whistler_Interface _WHISTLER_INTERFACE; -static const Eina_Model_Interface * const WHISTLER_INTERFACE = - (Eina_Model_Interface *) &_WHISTLER_INTERFACE; - -static const Eina_Model_Interface * MODEL_INTERFACES_ARRAY[] = - { &_WHISTLER_INTERFACE.base_interface, NULL }; //this array is for model - -void -parrot_init() -{ - Eina_Model_Type *type; - if (initialized) return; - initialized = EINA_TRUE; - - animal_init(); - /* - *overriding Whistler Interface (creating instance of Whistler Interface) - */ - Eina_Model_Interface *iface = (Eina_Model_Interface *) &_WHISTLER_INTERFACE; - iface->version = EINA_MODEL_INTERFACE_VERSION; - iface->interface_size = sizeof(Whistler_Interface); - iface->name = WHISTLER_INTERFACE_NAME; - WHISTLER_INTERFACE(iface)->whistle = _parrot_whistle; - - PARROT_MODEL_TYPE_NAME = "Parrot_Model_Type"; - - type = (Eina_Model_Type *)&_PARROT_TYPE; - type->version = EINA_MODEL_TYPE_VERSION; - type->name = PARROT_MODEL_TYPE_NAME; - type->private_size = 0; - - eina_model_type_subclass_setup(type, ANIMAL_TYPE); - - type->type_size = sizeof(Parrot_Type); - type->interfaces = MODEL_INTERFACES_ARRAY; - - ANIMAL_TYPE(type)->eat = _parrot_eat; - PARROT_TYPE(type)->fly = _parrot_fly; -} - - -void -parrot_fly(Eina_Model *m) -{ - EINA_SAFETY_ON_FALSE_RETURN(eina_model_instance_check(m, PARROT_TYPE)); - - void (*pf)(Eina_Model *m); - pf = eina_model_method_resolve(m, Parrot_Type, fly); - EINA_SAFETY_ON_NULL_RETURN(pf); - printf("%s() \t", __func__); - pf(m); -} - diff --git a/src/examples/eina/eina_model_04_parrot.h b/src/examples/eina/eina_model_04_parrot.h deleted file mode 100644 index 707a3912d5..0000000000 --- a/src/examples/eina/eina_model_04_parrot.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * parrot.h - */ - -#ifndef PARROT_H_ -#define PARROT_H_ - -#include "eina_model_04_animal.h" - -extern const char *PARROT_MODEL_TYPE_NAME; -extern const Eina_Model_Type * const PARROT_TYPE; - -#define PARROT_TYPE(x) ((Parrot_Type *) (eina_model_type_subclass_check((x), PARROT_TYPE) ? (x) : NULL)) - -typedef struct _Parrot_Type -{ - Animal_Type parent_class; - void (*fly)(Eina_Model *m); -} Parrot_Type; - -void parrot_init(); -void parrot_fly(Eina_Model *m); - -#endif /* PARROT_H_ */ diff --git a/src/examples/eina/eina_model_04_whistler.c b/src/examples/eina/eina_model_04_whistler.c deleted file mode 100644 index ed9832f79b..0000000000 --- a/src/examples/eina/eina_model_04_whistler.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * whistler.c - * - */ - -#include "eina_model_04_whistler.h" - -void -whistler_whistle(Eina_Model *m) -{ - const Eina_Model_Interface *iface = NULL; - iface = eina_model_interface_get(m, WHISTLER_INTERFACE_NAME); - - EINA_SAFETY_ON_NULL_RETURN(iface); - - void (*pf)(Eina_Model *); - - pf = eina_model_interface_method_resolve(iface, m, Whistler_Interface, whistle); - EINA_SAFETY_ON_NULL_RETURN(pf); - printf("%s() \t", __func__); - pf(m); -} -/* - * call for overridden Swimmer Interface function - */ -void -swimmer_swim(Eina_Model *m) -{ - const Eina_Model_Interface *iface = NULL; - iface = eina_model_interface_get(m, SWIMMER_INTERFACE_NAME); - - EINA_SAFETY_ON_NULL_RETURN(iface); - - void (*pf)(Eina_Model *); - - pf = eina_model_interface_method_resolve(iface, m, Swimmer_Interface, swim); - EINA_SAFETY_ON_NULL_RETURN(pf); - printf("%s() \t", __func__); - pf(m); -} - -/* - * call for overridden Diver Interface function - */ -void -diver_dive(Eina_Model *m) -{ - const Eina_Model_Interface *iface = NULL; - iface = eina_model_interface_get(m, DIVER_INTERFACE_NAME); - - EINA_SAFETY_ON_NULL_RETURN(iface); - - void (*pf)(Eina_Model *); - - pf = eina_model_interface_method_resolve(iface, m, Diver_Interface, dive); - EINA_SAFETY_ON_NULL_RETURN(pf); - printf("%s() \t", __func__); - pf(m); -} diff --git a/src/examples/eina/eina_model_04_whistler.h b/src/examples/eina/eina_model_04_whistler.h deleted file mode 100644 index 0567d78596..0000000000 --- a/src/examples/eina/eina_model_04_whistler.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * whistler.h - */ - -#ifndef WHISTLER_H_ -#define WHISTLER_H_ - -#include -#include - -#define WHISTLER_INTERFACE_NAME "Whistler_Interface" -#define SWIMMER_INTERFACE_NAME "Swimmer_Interface" -#define DIVER_INTERFACE_NAME "Diver_Interface" - -#define WHISTLER_INTERFACE(x) ((Whistler_Interface *) x) -#define SWIMMER_INTERFACE(x) ((Swimmer_Interface *) x) -#define DIVER_INTERFACE(x) ((Diver_Interface *) x) - -typedef struct _Whistler_Interface -{ - Eina_Model_Interface base_interface; - void (*whistle)(Eina_Model *); - -} Whistler_Interface; - -typedef struct _Swimmer_Interface -{ - Eina_Model_Interface base_interface; - void (*swim)(Eina_Model *); - -} Swimmer_Interface; - -//Diver Interface will use Swimmer Interface as a parent -typedef struct _Diver_Interface -{ - Eina_Model_Interface base_interface; - void (*dive)(Eina_Model *); - -} Diver_Interface; - -void whistler_whistle(Eina_Model *m); -void swimmer_swim(Eina_Model *m); -void diver_dive(Eina_Model *m); - -#endif /* WHISTLER_H_ */ diff --git a/src/lib/eina/Eina.h b/src/lib/eina/Eina.h index 16650e31c5..374e4ecfc2 100644 --- a/src/lib/eina/Eina.h +++ b/src/lib/eina/Eina.h @@ -81,7 +81,6 @@ * @li @ref Eina_Tiler_Group split, merge and navigates into 2D tiled regions. * @li @ref Eina_Trash_Group container of unused but allocated data. * @li @ref Eina_Value_Group container for generic value storage and access. - * @li @ref Eina_Model_Group container for data with user defined hierarchy/structure. * * The tools that are available are (see @ref Eina_Tools_Group): * @li @ref Eina_Benchmark_Group helper to write benchmarks. diff --git a/src/lib/eina/eina_main.c b/src/lib/eina/eina_main.c index 5124092437..2f754e5360 100644 --- a/src/lib/eina/eina_main.c +++ b/src/lib/eina/eina_main.c @@ -69,9 +69,6 @@ #include "eina_value.h" #include "eina_evlog.h" #include "eina_freeq.h" -/* no model for now -#include "eina_model.h" - */ /*============================================================================* * Local * @@ -156,9 +153,6 @@ EAPI Eina_Inlist *_eina_tracking = NULL; S(rbtree); S(file); S(safepointer); -/* no model for now - S(model); - */ #undef S struct eina_desc_setup @@ -204,9 +198,6 @@ static const struct eina_desc_setup _eina_desc_setup[] = { S(rbtree), S(file), S(safepointer), -/* no model for now - S(model) - */ #undef S }; static const size_t _eina_desc_setup_len = sizeof(_eina_desc_setup) / diff --git a/src/lib/eina/eina_value.c b/src/lib/eina/eina_value.c index 1e0217dd18..51b906a6e0 100644 --- a/src/lib/eina/eina_value.c +++ b/src/lib/eina/eina_value.c @@ -39,9 +39,6 @@ /* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */ #include "eina_safety_checks.h" #include "eina_value.h" -/* no model for now -#include "eina_model.h" // uses eina_value.h - */ /*============================================================================* * Local * @@ -4572,128 +4569,6 @@ EAPI const Eina_Value_Type _EINA_VALUE_TYPE_OPTIONAL = { _eina_value_type_optional_pget }; -/* no model for now -static Eina_Bool -_eina_value_type_model_setup(const Eina_Value_Type *type EINA_UNUSED, void *mem) -{ - Eina_Model **tmem = mem; - *tmem = NULL; - return EINA_TRUE; -} - -static Eina_Bool -_eina_value_type_model_flush(const Eina_Value_Type *type EINA_UNUSED, void *mem) -{ - Eina_Model **tmem = mem; - if (*tmem) - { - eina_model_unref(*tmem); - *tmem = NULL; - } - return EINA_TRUE; -} - -static Eina_Bool -_eina_value_type_model_copy(const Eina_Value_Type *type EINA_UNUSED, const void *src, void *dst) -{ - const Eina_Model * const *s = src; - Eina_Model **d = dst; - if (*s) - *d = eina_model_copy(*s); // is it better to deep-copy? - else - *d = NULL; - return EINA_TRUE; -} - -static int -_eina_value_type_model_compare(const Eina_Value_Type *type EINA_UNUSED, const void *a, const void *b) -{ - const Eina_Model * const *ta = a; - const Eina_Model * const *tb = b; - - if ((!*ta) && (!*tb)) return 0; - else if (!*ta) return 1; - else if (!*tb) return -1; - else return eina_model_compare(*ta, *tb); -} - -static Eina_Bool -_eina_value_type_model_convert_to(const Eina_Value_Type *type EINA_UNUSED, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem) -{ - const Eina_Model *v = *(const Eina_Model **)type_mem; - - if (convert == EINA_VALUE_TYPE_STRINGSHARE || - convert == EINA_VALUE_TYPE_STRING) - { - char *other_mem = v ? eina_model_to_string(v) : NULL; - Eina_Bool ret = eina_value_type_pset(convert, convert_mem, &other_mem); - free(other_mem); - return ret; - } - else - { - return EINA_FALSE; - } - - return EINA_TRUE; -} - -static Eina_Bool -_eina_value_type_model_vset(const Eina_Value_Type *type EINA_UNUSED, void *mem, va_list args) -{ - Eina_Model **tmem = mem, *tmp; - - tmp = va_arg(args, Eina_Model *); - - if (tmp) eina_model_ref(tmp); - if (*tmem) eina_model_unref(*tmem); - - *tmem = tmp; - - return EINA_TRUE; -} - -static Eina_Bool -_eina_value_type_model_pset(const Eina_Value_Type *type EINA_UNUSED, void *mem, const void *ptr) -{ - Eina_Model **tmem = mem; - Eina_Model **p = (Eina_Model **)ptr; - - if (*tmem == *p) return EINA_TRUE; - - if (*p) eina_model_ref(*p); - if (*tmem) eina_model_unref(*tmem); - - *tmem = *p; - - return EINA_TRUE; -} - -static Eina_Bool -_eina_value_type_model_pget(const Eina_Value_Type *type EINA_UNUSED, const void *mem, void *ptr) -{ - Eina_Model **tmem = (Eina_Model **)mem; - Eina_Model **p = ptr; - *p = *tmem; - return EINA_TRUE; -} - -static const Eina_Value_Type _EINA_VALUE_TYPE_MODEL = { - EINA_VALUE_TYPE_VERSION, - sizeof(Eina_Model *), - "Eina_Model", - _eina_value_type_model_setup, - _eina_value_type_model_flush, - _eina_value_type_model_copy, - _eina_value_type_model_compare, - _eina_value_type_model_convert_to, - NULL, // no convert from - _eina_value_type_model_vset, - _eina_value_type_model_pset, - _eina_value_type_model_pget -}; -*/ - /* keep all basic types inlined in an array so we can compare if it's * a basic type using pointer arithmetic. * @@ -5130,10 +5005,7 @@ eina_value_init(void) EINA_VALUE_TYPE_TIMEVAL = &_EINA_VALUE_TYPE_TIMEVAL; EINA_VALUE_TYPE_BLOB = &_EINA_VALUE_TYPE_BLOB; EINA_VALUE_TYPE_STRUCT = &_EINA_VALUE_TYPE_STRUCT; -/* no model for now - EINA_VALUE_TYPE_MODEL = &_EINA_VALUE_TYPE_MODEL; - */ - + EINA_VALUE_TYPE_OPTIONAL = &_EINA_VALUE_TYPE_OPTIONAL; EINA_VALUE_BLOB_OPERATIONS_MALLOC = &_EINA_VALUE_BLOB_OPERATIONS_MALLOC; @@ -5217,9 +5089,6 @@ EAPI const Eina_Value_Type *EINA_VALUE_TYPE_HASH = NULL; EAPI const Eina_Value_Type *EINA_VALUE_TYPE_TIMEVAL = NULL; EAPI const Eina_Value_Type *EINA_VALUE_TYPE_BLOB = NULL; EAPI const Eina_Value_Type *EINA_VALUE_TYPE_STRUCT = NULL; -/* no model for now -EAPI const Eina_Value_Type *EINA_VALUE_TYPE_MODEL = NULL; - */ EAPI const Eina_Value_Type *EINA_VALUE_TYPE_OPTIONAL = NULL; diff --git a/src/tests/eina/eina_suite.c b/src/tests/eina/eina_suite.c index 5548c8c82b..f9bbbd8a8f 100644 --- a/src/tests/eina/eina_suite.c +++ b/src/tests/eina/eina_suite.c @@ -62,8 +62,6 @@ static const Efl_Test_Case etc[] = { { "Simple Xml Parser", eina_test_simple_xml_parser}, { "Value", eina_test_value }, { "COW", eina_test_cow }, - // Disabling Eina_Model test - // { "Model", eina_test_model }, { "Barrier", eina_test_barrier }, { "Tmp String", eina_test_tmpstr }, { "Locking", eina_test_locking }, diff --git a/src/tests/eina/eina_test_model.c b/src/tests/eina/eina_test_model.c deleted file mode 100644 index 7541970194..0000000000 --- a/src/tests/eina/eina_test_model.c +++ /dev/null @@ -1,1289 +0,0 @@ -/* EINA - EFL data type library - * Copyright (C) 2012 ProFUSION embedded systems - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; - * if not, see . - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include - -#include - -#include "eina_suite.h" - -static void -_eina_test_model_check_safety_null(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args) -{ - Eina_Bool *ck = data; - - if ((level == EINA_LOG_LEVEL_ERR) && (strcmp(fmt, "%s") == 0)) - { - const char *str; - va_list cp_args; - - va_copy(cp_args, args); - str = va_arg(cp_args, const char *); - va_end(cp_args); - if (eina_str_has_prefix(str, "safety check failed: ") && - eina_str_has_suffix(str, " == NULL")) - { - *ck = EINA_TRUE; - return; - } - } - *ck = EINA_FALSE; - eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args); -} - -static void -_eina_test_model_check_safety_false(const Eina_Log_Domain *d, Eina_Log_Level level, const char *file, const char *fnc, int line, const char *fmt, void *data, va_list args) -{ - Eina_Bool *ck = data; - - if ((level == EINA_LOG_LEVEL_ERR) && (strcmp(fmt, "%s") == 0)) - { - const char *str; - va_list cp_args; - - va_copy(cp_args, args); - str = va_arg(cp_args, const char *); - va_end(cp_args); - if (eina_str_has_prefix(str, "safety check failed: ") && - eina_str_has_suffix(str, " is false")) - { - *ck = EINA_TRUE; - return; - } - } - *ck = EINA_FALSE; - eina_log_print_cb_stderr(d, level, file, fnc, line, fmt, NULL, args); -} - -static void -_eina_test_model_cb_count(void *data, Eina_Model *model, const Eina_Model_Event_Description *desc, void *event_info) -{ - unsigned *count = data; - (*count)++; -#if SHOW_LOG - if ((desc->type) && (strcmp(desc->type, "u") == 0)) - { - unsigned *pos = event_info; - printf("%2u %p %s at %u\n", *count, model, desc->name, *pos); - } - else - printf("%2u %p %s\n", *count, model, desc->name); -#else - (void)model; - (void)desc; - (void)event_info; -#endif -} - -START_TEST(eina_model_test_properties) -{ - unsigned int count_del = 0, count_pset = 0, count_pdel = 0; - Eina_Model *m; - Eina_Value inv, outv; - int i; - char *s; - Eina_List *lst; - Eina_Bool ck; - - eina_init(); - - m = eina_model_new(EINA_MODEL_TYPE_GENERIC); - fail_unless(m != NULL); - - eina_model_event_callback_add - (m, "deleted", _eina_test_model_cb_count, &count_del); - eina_model_event_callback_add - (m, "property,set", _eina_test_model_cb_count, &count_pset); - eina_model_event_callback_add - (m, "property,deleted", _eina_test_model_cb_count, &count_pdel); - - fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_INT)); - fail_unless(eina_value_set(&inv, 1234)); - fail_unless(eina_value_get(&inv, &i)); - ck_assert_int_eq(i, 1234); - - fail_unless(eina_model_property_set(m, "abc", &inv)); - - fail_unless(eina_value_set(&inv, 5678)); - fail_unless(eina_model_property_set(m, "xyz", &inv)); - - fail_unless(eina_value_set(&inv, 171)); - fail_unless(eina_model_property_set(m, "value", &inv)); - - lst = eina_model_properties_names_list_get(m); - ck_assert_int_eq(eina_list_count(lst), 3); - - lst = eina_list_sort(lst, 0, EINA_COMPARE_CB(strcmp)); - ck_assert_str_eq("abc", eina_list_nth(lst, 0)); - ck_assert_str_eq("value", eina_list_nth(lst, 1)); - ck_assert_str_eq("xyz", eina_list_nth(lst, 2)); - - eina_model_properties_names_list_free(lst); - - fail_unless(eina_model_property_get(m, "abc", &outv)); - fail_unless(eina_value_get(&outv, &i)); - ck_assert_int_eq(i, 1234); - eina_value_flush(&outv); - - fail_unless(eina_model_property_get(m, "xyz", &outv)); - fail_unless(eina_value_get(&outv, &i)); - ck_assert_int_eq(i, 5678); - eina_value_flush(&outv); - - fail_unless(eina_model_property_get(m, "value", &outv)); - fail_unless(eina_value_get(&outv, &i)); - ck_assert_int_eq(i, 171); - eina_value_flush(&outv); - - fail_unless(eina_value_set(&inv, 666)); - fail_unless(eina_model_property_set(m, "value", &inv)); - fail_unless(eina_model_property_get(m, "value", &outv)); - fail_unless(eina_value_get(&outv, &i)); - ck_assert_int_eq(i, 666); - - eina_value_flush(&outv); - eina_value_flush(&inv); - - fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_STRING)); - fail_unless(eina_value_set(&inv, "Hello world!")); - fail_unless(eina_model_property_set(m, "string", &inv)); - - fail_unless(eina_model_property_get(m, "string", &outv)); - fail_unless(eina_value_get(&outv, &s)); - fail_unless(s != NULL); - ck_assert_str_eq(s, "Hello world!"); - - eina_value_flush(&outv); - eina_value_flush(&inv); - - fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_STRINGSHARE)); - fail_unless(eina_value_set(&inv, "Hello world-STRINGSHARED!")); - fail_unless(eina_model_property_set(m, "stringshare", &inv)); - /* set twice to see if references drop to zero before new add, shouldn't */ - fail_unless(eina_model_property_set(m, "stringshare", &inv)); - - fail_unless(eina_model_property_get(m, "stringshare", &outv)); - fail_unless(eina_value_get(&outv, &s)); - fail_unless(s != NULL); - ck_assert_str_eq(s, "Hello world-STRINGSHARED!"); - - eina_value_flush(&outv); - eina_value_flush(&inv); - - s = eina_model_to_string(m); - fail_unless(s != NULL); - ck_assert_str_eq(s, "Eina_Model_Type_Generic({abc: 1234, string: Hello world!, stringshare: Hello world-STRINGSHARED!, value: 666, xyz: 5678}, [])"); - free(s); - - fail_unless(eina_model_property_del(m, "value")); - - /* negative test (check safety was displayed by using print_cb) */ - eina_log_print_cb_set(_eina_test_model_check_safety_null, &ck); - - ck = EINA_FALSE; - fail_if(eina_model_property_get(m, "non-existent", &outv)); - fail_unless(ck == EINA_TRUE); - - ck = EINA_FALSE; - fail_if(eina_model_property_get(m, NULL, &outv)); - fail_unless(ck == EINA_TRUE); - - ck = EINA_FALSE; - fail_if(eina_model_property_del(m, "value")); - fail_unless(ck == EINA_TRUE); - - /* revert print_cb to default */ - eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); - - ck_assert_int_eq(eina_model_refcount(m), 1); - - eina_model_unref(m); - ck_assert_int_eq(count_del, 1); - ck_assert_int_eq(count_pset, 7); - ck_assert_int_eq(count_pdel, 1); - eina_shutdown(); -} -END_TEST - -static int -eina_model_test_children_reverse_cmp(const Eina_Model *a, const Eina_Model *b) -{ - return - eina_model_compare(a, b); -} - -START_TEST(eina_model_test_children) -{ - unsigned int count_del = 0, count_cset = 0, count_cins = 0, count_cdel = 0; - Eina_Model *m, *c; - char *s; - int i; - - eina_init(); - - m = eina_model_new(EINA_MODEL_TYPE_GENERIC); - fail_unless(m != NULL); - - eina_model_event_callback_add - (m, "deleted", _eina_test_model_cb_count, &count_del); - eina_model_event_callback_add - (m, "child,set", _eina_test_model_cb_count, &count_cset); - eina_model_event_callback_add - (m, "child,inserted", _eina_test_model_cb_count, &count_cins); - eina_model_event_callback_add - (m, "child,deleted", _eina_test_model_cb_count, &count_cdel); - - for (i = 0; i < 10; i++) - { - Eina_Value val; - - c = eina_model_new(EINA_MODEL_TYPE_GENERIC); - fail_unless(c != NULL); - - eina_model_event_callback_add - (c, "deleted", _eina_test_model_cb_count, &count_del); - eina_model_event_callback_add - (c, "child,set", _eina_test_model_cb_count, &count_cset); - eina_model_event_callback_add - (c, "child,inserted", _eina_test_model_cb_count, &count_cins); - eina_model_event_callback_add - (c, "child,deleted", _eina_test_model_cb_count, &count_cdel); - - fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT)); - fail_unless(eina_value_set(&val, i)); - fail_unless(eina_model_property_set(c, "value", &val)); - - fail_unless(eina_model_child_append(m, c) >= 0); - ck_assert_int_eq(eina_model_refcount(c), 2); - - eina_value_flush(&val); - eina_model_unref(c); - } - - ck_assert_int_eq(eina_model_child_count(m), 10); - - for (i = 0; i < 10; i++) - { - Eina_Value val; - int x; - - c = eina_model_child_get(m, i); - fail_unless(c != NULL); - ck_assert_int_eq(eina_model_refcount(c), 2); - - fail_unless(eina_model_property_get(c, "value", &val)); - fail_unless(eina_value_get(&val, &x)); - ck_assert_int_eq(x, i); - - eina_value_flush(&val); - eina_model_unref(c); - } - - eina_model_child_sort(m, EINA_COMPARE_CB(eina_model_test_children_reverse_cmp)); - - for (i = 0; i < 10; i++) - { - Eina_Value val; - int x; - - c = eina_model_child_get(m, i); - fail_unless(c != NULL); - ck_assert_int_eq(eina_model_refcount(c), 2); - - fail_unless(eina_model_property_get(c, "value", &val)); - fail_unless(eina_value_get(&val, &x)); - ck_assert_int_eq(x, 10 - i - 1); - - eina_value_flush(&val); - eina_model_unref(c); - } - - eina_model_child_sort(m, EINA_COMPARE_CB(eina_model_compare)); - - s = eina_model_to_string(m); - fail_unless(s != NULL); - ck_assert_str_eq(s, "Eina_Model_Type_Generic({}, [Eina_Model_Type_Generic({value: 0}, []), Eina_Model_Type_Generic({value: 1}, []), Eina_Model_Type_Generic({value: 2}, []), Eina_Model_Type_Generic({value: 3}, []), Eina_Model_Type_Generic({value: 4}, []), Eina_Model_Type_Generic({value: 5}, []), Eina_Model_Type_Generic({value: 6}, []), Eina_Model_Type_Generic({value: 7}, []), Eina_Model_Type_Generic({value: 8}, []), Eina_Model_Type_Generic({value: 9}, [])])"); - free(s); - - c = eina_model_child_get(m, 0); - eina_model_child_set(m, 1, c); - eina_model_unref(c); - - eina_model_child_del(m, 0); - eina_model_child_del(m, 8); - - s = eina_model_to_string(m); - fail_unless(s != NULL); - ck_assert_str_eq(s, "Eina_Model_Type_Generic({}, [Eina_Model_Type_Generic({value: 0}, []), Eina_Model_Type_Generic({value: 2}, []), Eina_Model_Type_Generic({value: 3}, []), Eina_Model_Type_Generic({value: 4}, []), Eina_Model_Type_Generic({value: 5}, []), Eina_Model_Type_Generic({value: 6}, []), Eina_Model_Type_Generic({value: 7}, []), Eina_Model_Type_Generic({value: 8}, [])])"); - free(s); - - ck_assert_int_eq(eina_model_refcount(m), 1); - eina_model_unref(m); - - ck_assert_int_eq(count_del, 11); - ck_assert_int_eq(count_cins, 10); - ck_assert_int_eq(count_cset, 1); - ck_assert_int_eq(count_cdel, 2); - - eina_shutdown(); -} -END_TEST - -START_TEST(eina_model_test_copy) -{ - unsigned int count_del = 0; - Eina_Model *m, *cp; - char *s1, *s2; - int i; - - eina_init(); - - m = eina_model_new(EINA_MODEL_TYPE_GENERIC); - fail_unless(m != NULL); - - eina_model_event_callback_add - (m, "deleted", _eina_test_model_cb_count, &count_del); - - for (i = 0; i < 5; i++) - { - Eina_Value val; - char name[2] = {'a'+ i, 0}; - fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT)); - fail_unless(eina_value_set(&val, i)); - fail_unless(eina_model_property_set(m, name, &val)); - eina_value_flush(&val); - } - - for (i = 0; i < 5; i++) - { - Eina_Value val; - Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC); - fail_unless(c != NULL); - fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT)); - fail_unless(eina_value_set(&val, i)); - fail_unless(eina_model_property_set(c, "x", &val)); - - eina_model_event_callback_add - (c, "deleted", _eina_test_model_cb_count, &count_del); - - fail_unless(eina_model_child_append(m, c) >= 0); - eina_model_unref(c); - eina_value_flush(&val); - } - - s1 = eina_model_to_string(m); - fail_unless(s1 != NULL); - ck_assert_str_eq(s1, "Eina_Model_Type_Generic({a: 0, b: 1, c: 2, d: 3, e: 4}, [Eina_Model_Type_Generic({x: 0}, []), Eina_Model_Type_Generic({x: 1}, []), Eina_Model_Type_Generic({x: 2}, []), Eina_Model_Type_Generic({x: 3}, []), Eina_Model_Type_Generic({x: 4}, [])])"); - - cp = eina_model_copy(m); - fail_unless(cp != NULL); - fail_unless(cp != m); - - eina_model_event_callback_add - (cp, "deleted", _eina_test_model_cb_count, &count_del); - - s2 = eina_model_to_string(cp); - fail_unless(s2 != NULL); - ck_assert_str_eq(s1, s2); - - for (i = 0; i < 5; i++) - { - Eina_Model *c1 = eina_model_child_get(m, i); - Eina_Model *c2 = eina_model_child_get(cp, i); - - fail_unless(c1 != NULL); - fail_unless(c1 == c2); - ck_assert_int_eq(eina_model_refcount(c1), 4); - - eina_model_unref(c1); - eina_model_unref(c2); - } - - free(s1); - free(s2); - - ck_assert_int_eq(eina_model_refcount(m), 1); - eina_model_unref(m); - - ck_assert_int_eq(eina_model_refcount(cp), 1); - eina_model_unref(cp); - - ck_assert_int_eq(count_del, 2 + 5); - - eina_shutdown(); -} -END_TEST - -START_TEST(eina_model_test_deep_copy) -{ - unsigned int count_del = 0; - Eina_Model *m, *cp; - char *s1, *s2; - int i; - - eina_init(); - - m = eina_model_new(EINA_MODEL_TYPE_GENERIC); - fail_unless(m != NULL); - - eina_model_event_callback_add - (m, "deleted", _eina_test_model_cb_count, &count_del); - - for (i = 0; i < 5; i++) - { - Eina_Value val; - char name[2] = {'a'+ i, 0}; - fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT)); - fail_unless(eina_value_set(&val, i)); - fail_unless(eina_model_property_set(m, name, &val)); - eina_value_flush(&val); - } - - for (i = 0; i < 5; i++) - { - Eina_Value val; - Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC); - fail_unless(c != NULL); - fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT)); - fail_unless(eina_value_set(&val, i)); - fail_unless(eina_model_property_set(c, "x", &val)); - - eina_model_event_callback_add - (c, "deleted", _eina_test_model_cb_count, &count_del); - - fail_unless(eina_model_child_append(m, c) >= 0); - eina_model_unref(c); - eina_value_flush(&val); - } - - s1 = eina_model_to_string(m); - fail_unless(s1 != NULL); - ck_assert_str_eq(s1, "Eina_Model_Type_Generic({a: 0, b: 1, c: 2, d: 3, e: 4}, [Eina_Model_Type_Generic({x: 0}, []), Eina_Model_Type_Generic({x: 1}, []), Eina_Model_Type_Generic({x: 2}, []), Eina_Model_Type_Generic({x: 3}, []), Eina_Model_Type_Generic({x: 4}, [])])"); - - cp = eina_model_deep_copy(m); - fail_unless(cp != NULL); - fail_unless(cp != m); - - eina_model_event_callback_add - (cp, "deleted", _eina_test_model_cb_count, &count_del); - - s2 = eina_model_to_string(cp); - fail_unless(s2 != NULL); - ck_assert_str_eq(s1, s2); - - for (i = 0; i < 5; i++) - { - Eina_Model *c1 = eina_model_child_get(m, i); - Eina_Model *c2 = eina_model_child_get(cp, i); - - fail_unless(c1 != NULL); - fail_unless(c1 != c2); - ck_assert_int_eq(eina_model_refcount(c1), 2); - ck_assert_int_eq(eina_model_refcount(c2), 2); - - eina_model_event_callback_add - (c2, "deleted", _eina_test_model_cb_count, &count_del); - - eina_model_unref(c1); - eina_model_unref(c2); - } - - free(s1); - free(s2); - - ck_assert_int_eq(eina_model_refcount(m), 1); - eina_model_unref(m); - - ck_assert_int_eq(eina_model_refcount(cp), 1); - eina_model_unref(cp); - - ck_assert_int_eq(count_del, 2 + 10); - - eina_shutdown(); -} -END_TEST - -static Eina_Model * -eina_model_test_iterator_setup(unsigned int *count_del) -{ - Eina_Model *m; - int i; - - m = eina_model_new(EINA_MODEL_TYPE_GENERIC); - fail_unless(m != NULL); - - eina_model_event_callback_add - (m, "deleted", _eina_test_model_cb_count, count_del); - - for (i = 0; i < 5; i++) - { - Eina_Value val; - Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC); - fail_unless(c != NULL); - fail_unless(eina_value_setup(&val, EINA_VALUE_TYPE_INT)); - fail_unless(eina_value_set(&val, i)); - fail_unless(eina_model_property_set(c, "x", &val)); - - eina_model_event_callback_add - (c, "deleted", _eina_test_model_cb_count, count_del); - - fail_unless(eina_model_child_append(m, c) >= 0); - eina_model_unref(c); - eina_value_flush(&val); - } - - return m; -} - -START_TEST(eina_model_test_child_iterator) -{ - unsigned int count_del = 0; - Eina_Iterator *it; - Eina_Model *m, *c; - int i = 0; - - eina_init(); - - m = eina_model_test_iterator_setup(&count_del); - - it = eina_model_child_iterator_get(m); - fail_unless(it != NULL); - EINA_ITERATOR_FOREACH(it, c) - { - Eina_Value tmp; - int x; - - ck_assert_int_eq(eina_model_refcount(c), 2); - fail_unless(eina_model_property_get(c, "x", &tmp)); - fail_unless(eina_value_get(&tmp, &x)); - ck_assert_int_eq(x, i); - - eina_model_unref(c); - i++; - } - ck_assert_int_eq(i, 5); - eina_iterator_free(it); - - ck_assert_int_eq(eina_model_refcount(m), 1); - eina_model_unref(m); - ck_assert_int_eq(count_del, 6); - eina_shutdown(); -} -END_TEST - -START_TEST(eina_model_test_child_reversed_iterator) -{ - unsigned int count_del = 0; - Eina_Iterator *it; - Eina_Model *m, *c; - int i = 4; - - eina_init(); - - m = eina_model_test_iterator_setup(&count_del); - - it = eina_model_child_reversed_iterator_get(m); - fail_unless(it != NULL); - EINA_ITERATOR_FOREACH(it, c) - { - Eina_Value tmp; - int x; - - ck_assert_int_eq(eina_model_refcount(c), 2); - fail_unless(eina_model_property_get(c, "x", &tmp)); - fail_unless(eina_value_get(&tmp, &x)); - ck_assert_int_eq(x, i); - - eina_model_unref(c); - i--; - } - ck_assert_int_eq(i, -1); - eina_iterator_free(it); - - ck_assert_int_eq(eina_model_refcount(m), 1); - eina_model_unref(m); - ck_assert_int_eq(count_del, 6); - eina_shutdown(); -} -END_TEST - -START_TEST(eina_model_test_child_sorted_iterator) -{ - unsigned int count_del = 0; - Eina_Iterator *it; - Eina_Model *m, *c; - int i = 4; - - eina_init(); - - m = eina_model_test_iterator_setup(&count_del); - - it = eina_model_child_sorted_iterator_get - (m, EINA_COMPARE_CB(eina_model_test_children_reverse_cmp)); - fail_unless(it != NULL); - EINA_ITERATOR_FOREACH(it, c) - { - Eina_Value tmp; - int x; - - /* 3 because sort takes an extra reference for its temp array */ - ck_assert_int_eq(eina_model_refcount(c), 3); - fail_unless(eina_model_property_get(c, "x", &tmp)); - fail_unless(eina_value_get(&tmp, &x)); - ck_assert_int_eq(x, i); - - eina_model_unref(c); - i--; - } - ck_assert_int_eq(i, -1); - eina_iterator_free(it); - - it = eina_model_child_sorted_iterator_get - (m, EINA_COMPARE_CB(eina_model_compare)); - fail_unless(it != NULL); - i = 0; - EINA_ITERATOR_FOREACH(it, c) - { - Eina_Value tmp; - int x; - - /* 3 because sort takes an extra reference for its temp array */ - ck_assert_int_eq(eina_model_refcount(c), 3); - fail_unless(eina_model_property_get(c, "x", &tmp)); - fail_unless(eina_value_get(&tmp, &x)); - ck_assert_int_eq(x, i); - - eina_model_unref(c); - i++; - } - ck_assert_int_eq(i, 5); - eina_iterator_free(it); - - ck_assert_int_eq(eina_model_refcount(m), 1); - eina_model_unref(m); - ck_assert_int_eq(count_del, 6); - eina_shutdown(); -} -END_TEST - -static Eina_Bool -eina_model_test_filter_event(const void *m, void *c, void *fdata) -{ - Eina_Value tmp; - int x; - fail_unless(m == fdata); - fail_unless(eina_model_property_get(c, "x", &tmp)); - fail_unless(eina_value_get(&tmp, &x)); - eina_value_flush(&tmp); - return x % 2 == 0; -} - -START_TEST(eina_model_test_child_filtered_iterator) -{ - unsigned int count_del = 0; - Eina_Iterator *it; - Eina_Model *m; - int i = 0, idx; - - eina_init(); - - m = eina_model_test_iterator_setup(&count_del); - - it = eina_model_child_filtered_iterator_get - (m, eina_model_test_filter_event, m); - fail_unless(it != NULL); - EINA_ITERATOR_FOREACH(it, idx) - { - Eina_Model *c; - Eina_Value tmp; - int x; - - ck_assert_int_eq(idx % 2, 0); - ck_assert_int_eq(idx, i); - - c = eina_model_child_get(m, idx); - fail_unless(c != NULL); - ck_assert_int_eq(eina_model_refcount(c), 2); - fail_unless(eina_model_property_get(c, "x", &tmp)); - fail_unless(eina_value_get(&tmp, &x)); - ck_assert_int_eq(x, i); - - eina_model_unref(c); - i += 2; - } - ck_assert_int_eq(i, 6); - eina_iterator_free(it); - - ck_assert_int_eq(eina_model_refcount(m), 1); - eina_model_unref(m); - ck_assert_int_eq(count_del, 6); - eina_shutdown(); -} -END_TEST - -START_TEST(eina_model_test_struct) -{ - unsigned int count_del = 0, count_pset = 0, count_pdel = 0; - Eina_Model *m; - struct myst { - int i; - char c; - }; - const Eina_Value_Struct_Member myst_members[] = { - EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_INT, struct myst, i), - EINA_VALUE_STRUCT_MEMBER(EINA_VALUE_TYPE_CHAR, struct myst, c) - }; - const Eina_Value_Struct_Desc myst_desc = { - EINA_VALUE_STRUCT_DESC_VERSION, - NULL, myst_members, EINA_C_ARRAY_LENGTH(myst_members), sizeof(struct myst) - }; - Eina_Value inv, outv; - int i; - char c, *s; - Eina_List *lst; - Eina_Bool ck; - - eina_init(); - - m = eina_model_struct_new(&myst_desc); - fail_unless(m != NULL); - - eina_model_event_callback_add - (m, "deleted", _eina_test_model_cb_count, &count_del); - eina_model_event_callback_add - (m, "property,set", _eina_test_model_cb_count, &count_pset); - eina_model_event_callback_add - (m, "property,deleted", _eina_test_model_cb_count, &count_pdel); - - fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_INT)); - fail_unless(eina_value_set(&inv, 1234)); - fail_unless(eina_value_get(&inv, &i)); - ck_assert_int_eq(i, 1234); - fail_unless(eina_model_property_set(m, "i", &inv)); - - eina_value_flush(&inv); - fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_CHAR)); - fail_unless(eina_value_set(&inv, 33)); - fail_unless(eina_value_get(&inv, &c)); - ck_assert_int_eq(c, 33); - fail_unless(eina_model_property_set(m, "c", &inv)); - - lst = eina_model_properties_names_list_get(m); - ck_assert_int_eq(eina_list_count(lst), 2); - - lst = eina_list_sort(lst, 0, EINA_COMPARE_CB(strcmp)); - ck_assert_str_eq("c", eina_list_nth(lst, 0)); - ck_assert_str_eq("i", eina_list_nth(lst, 1)); - - eina_model_properties_names_list_free(lst); - - fail_unless(eina_model_property_get(m, "i", &outv)); - fail_unless(outv.type == EINA_VALUE_TYPE_INT); - fail_unless(eina_value_get(&outv, &i)); - ck_assert_int_eq(i, 1234); - eina_value_flush(&outv); - - fail_unless(eina_model_property_get(m, "c", &outv)); - fail_unless(outv.type == EINA_VALUE_TYPE_CHAR); - fail_unless(eina_value_get(&outv, &c)); - ck_assert_int_eq(c, 33); - eina_value_flush(&outv); - - eina_value_flush(&inv); - - /* negative test (check safety was displayed by using print_cb) */ - eina_log_print_cb_set(_eina_test_model_check_safety_null, &ck); - - fail_if(eina_model_property_get(m, "non-existent", &outv)); - - ck = EINA_FALSE; - fail_if(eina_model_property_get(m, NULL, &outv)); - fail_unless(ck == EINA_TRUE); - - fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_STRING)); - fail_unless(eina_value_set(&inv, "hello world")); - - eina_log_print_cb_set(_eina_test_model_check_safety_false, &ck); - - ck = EINA_FALSE; - fail_if(eina_model_property_set(m, "i", &inv)); - fail_unless(ck == EINA_TRUE); - - ck = EINA_FALSE; - fail_if(eina_model_property_set(m, "c", &inv)); - fail_unless(ck == EINA_TRUE); - - /* revert print_cb to default */ - eina_log_print_cb_set(eina_log_print_cb_stderr, NULL); - - fail_if(eina_model_property_del(m, "value")); - fail_if(eina_model_property_del(m, "i")); - fail_if(eina_model_property_del(m, "c")); - - eina_value_flush(&inv); - - s = eina_model_to_string(m); - fail_unless(s != NULL); - ck_assert_str_eq(s, "Eina_Model_Type_Struct({c: 33, i: 1234}, [])"); - free(s); - - ck_assert_int_eq(eina_model_refcount(m), 1); - - eina_model_unref(m); - ck_assert_int_eq(count_del, 1); - ck_assert_int_eq(count_pset, 2); - ck_assert_int_eq(count_pdel, 0); - eina_shutdown(); -} -END_TEST - -static Eina_Bool -_struct_complex_members_constructor(Eina_Model *m) -{ - struct myst { - Eina_Value_Array a; - Eina_Value_List l; - Eina_Value_Hash h; - Eina_Value_Struct s; - } st; - struct subst { - int i, j; - }; - static Eina_Value_Struct_Member myst_members[] = { - EINA_VALUE_STRUCT_MEMBER(NULL, struct myst, a), - EINA_VALUE_STRUCT_MEMBER(NULL, struct myst, l), - EINA_VALUE_STRUCT_MEMBER(NULL, struct myst, h), - EINA_VALUE_STRUCT_MEMBER(NULL, struct myst, s) - }; - static Eina_Value_Struct_Desc myst_desc = { - EINA_VALUE_STRUCT_DESC_VERSION, - NULL, myst_members, EINA_C_ARRAY_LENGTH(myst_members), sizeof(struct myst) - }; - static Eina_Value_Struct_Member subst_members[] = { - EINA_VALUE_STRUCT_MEMBER(NULL, struct subst, i), - EINA_VALUE_STRUCT_MEMBER(NULL, struct subst, j) - }; - static Eina_Value_Struct_Desc subst_desc = { - EINA_VALUE_STRUCT_DESC_VERSION, - NULL, subst_members, EINA_C_ARRAY_LENGTH(subst_members), - sizeof(struct subst) - }; - - if (!myst_members[0].type) - { - myst_members[0].type = EINA_VALUE_TYPE_ARRAY; - myst_members[1].type = EINA_VALUE_TYPE_LIST; - myst_members[2].type = EINA_VALUE_TYPE_HASH; - myst_members[3].type = EINA_VALUE_TYPE_STRUCT; - } - - if (!subst_members[0].type) - { - subst_members[0].type = EINA_VALUE_TYPE_INT; - subst_members[1].type = EINA_VALUE_TYPE_INT; - } - - if (!eina_model_type_constructor(EINA_MODEL_TYPE_STRUCT, m)) - return EINA_FALSE; - - memset(&st, 0, sizeof(st)); - - st.a.subtype = EINA_VALUE_TYPE_STRING; - st.l.subtype = EINA_VALUE_TYPE_STRING; - st.h.subtype = EINA_VALUE_TYPE_STRING; - st.s.desc = &subst_desc; - if (!eina_model_struct_set(m, &myst_desc, &st)) - return EINA_FALSE; - - return EINA_TRUE; -} - -START_TEST(eina_model_test_struct_complex_members) -{ - Eina_Model *m; - Eina_Value outv; - char *s; - Eina_Model_Type type = EINA_MODEL_TYPE_INIT_NOPRIVATE - ("struct_complex_members", Eina_Model_Type, NULL, NULL, NULL); - - eina_init(); - - type.constructor = _struct_complex_members_constructor; - type.parent = EINA_MODEL_TYPE_STRUCT; - - m = eina_model_new(&type); - fail_unless(m != NULL); - - fail_unless(eina_model_property_get(m, "a", &outv)); - fail_unless(eina_value_array_append(&outv, "Hello")); - fail_unless(eina_value_array_append(&outv, "World")); - fail_unless(eina_model_property_set(m, "a", &outv)); - eina_value_flush(&outv); - - fail_unless(eina_model_property_get(m, "l", &outv)); - fail_unless(eina_value_list_append(&outv, "Some")); - fail_unless(eina_value_list_append(&outv, "Thing")); - fail_unless(eina_model_property_set(m, "l", &outv)); - eina_value_flush(&outv); - - fail_unless(eina_model_property_get(m, "h", &outv)); - fail_unless(eina_value_hash_set(&outv, "key", "value")); - fail_unless(eina_model_property_set(m, "h", &outv)); - eina_value_flush(&outv); - - fail_unless(eina_model_property_get(m, "s", &outv)); - fail_unless(eina_value_struct_set(&outv, "i", 1234)); - fail_unless(eina_value_struct_set(&outv, "j", 44)); - fail_unless(eina_model_property_set(m, "s", &outv)); - eina_value_flush(&outv); - - s = eina_model_to_string(m); - fail_unless(s != NULL); - ck_assert_str_eq(s, "struct_complex_members({a: [Hello, World], h: {key: value}, l: [Some, Thing], s: {i: 1234, j: 44}}, [])"); - free(s); - - ck_assert_int_eq(eina_model_refcount(m), 1); - - eina_model_unref(m); - eina_shutdown(); -} -END_TEST - -typedef struct _Animal_Type -{ - Eina_Model_Type parent_class; - void (*eat)(Eina_Model *mdl); -} Animal_Type; - -typedef struct _Human_Type -{ - Animal_Type parent_class; - void (*talk)(Eina_Model *mdl); -} Human_Type; - -typedef struct _Pooper_Interface -{ - Eina_Model_Interface base_interface; - void (*poop)(Eina_Model *mdl); -} Pooper_Interface; - -#define ANIMAL_TYPE(x) ((Animal_Type *) x) -#define HUMAN_TYPE(x) ((Human_Type *) x) -#define POOPER_IFACE(x) ((Pooper_Interface *) x) -#define POOPER_IFACE_NAME "Pooper_Interace" - -#define INHER_CB_COUNT(prefix) \ -static int prefix ## _count = 0; \ -static void \ -prefix (Eina_Model *mdl) \ -{ \ - (void) mdl; \ - (prefix ## _count)++; \ -} - -static void -animal_eat(Eina_Model *mdl) -{ - void (*pf)(Eina_Model *mdl); - pf = eina_model_method_resolve(mdl, Animal_Type, eat); - EINA_SAFETY_ON_NULL_RETURN(pf); - pf(mdl); -} - -static void -pooper_poop(Eina_Model *mdl) -{ - const Eina_Model_Interface *iface = NULL; - iface = eina_model_interface_get(mdl, POOPER_IFACE_NAME); - - EINA_SAFETY_ON_NULL_RETURN(iface); - - void (*pf)(Eina_Model *); - - pf = eina_model_interface_method_resolve(iface, mdl, Pooper_Interface, poop); - EINA_SAFETY_ON_NULL_RETURN(pf); - pf(mdl); -} - -INHER_CB_COUNT(_animal_poop); -INHER_CB_COUNT(_human_poop); -INHER_CB_COUNT(_animal_eat); -INHER_CB_COUNT(_human_eat); - -START_TEST(eina_model_test_inheritance) -{ - eina_init(); - - Pooper_Interface _ANIMAL_POOPER_IFACE; - Eina_Model_Interface *ANIMAL_POOPER_IFACE = (Eina_Model_Interface *) &_ANIMAL_POOPER_IFACE; - memset(&_ANIMAL_POOPER_IFACE, 0, sizeof(_ANIMAL_POOPER_IFACE)); - ANIMAL_POOPER_IFACE->version = EINA_MODEL_INTERFACE_VERSION; - ANIMAL_POOPER_IFACE->interface_size = sizeof(Pooper_Interface); - ANIMAL_POOPER_IFACE->name = POOPER_IFACE_NAME; - POOPER_IFACE(ANIMAL_POOPER_IFACE)->poop = _animal_poop; - - Pooper_Interface _HUMAN_POOPER_IFACE; - Eina_Model_Interface *HUMAN_POOPER_IFACE = (Eina_Model_Interface *) &_HUMAN_POOPER_IFACE; - const Eina_Model_Interface *HUMAN_POOPER_IFACES[] = { - ANIMAL_POOPER_IFACE, NULL - }; - memset(&_HUMAN_POOPER_IFACE, 0, sizeof(_HUMAN_POOPER_IFACE)); - HUMAN_POOPER_IFACE->version = EINA_MODEL_INTERFACE_VERSION; - HUMAN_POOPER_IFACE->interface_size = sizeof(Pooper_Interface); - HUMAN_POOPER_IFACE->name = POOPER_IFACE_NAME; - HUMAN_POOPER_IFACE->interfaces = HUMAN_POOPER_IFACES; - POOPER_IFACE(HUMAN_POOPER_IFACE)->poop = _human_poop; - - const Eina_Model_Interface *ANIMAL_IFACES[] = {ANIMAL_POOPER_IFACE, NULL}; - const Eina_Model_Interface *HUMAN_IFACES[] = {HUMAN_POOPER_IFACE, NULL}; - - /* Init Animal Type */ - Animal_Type _ANIMAL_TYPE; - Eina_Model_Type *ANIMAL_TYPE = (Eina_Model_Type *) &_ANIMAL_TYPE; - - memset(&_ANIMAL_TYPE, 0, sizeof(_ANIMAL_TYPE)); - Eina_Model_Type *type = (Eina_Model_Type *) &_ANIMAL_TYPE; - type->version = EINA_MODEL_TYPE_VERSION; - type->parent = EINA_MODEL_TYPE_BASE; - type->type_size = sizeof(Animal_Type); - type->name = "Animal_Type"; - type->parent = EINA_MODEL_TYPE_GENERIC; - type->interfaces = ANIMAL_IFACES; - - ANIMAL_TYPE(type)->eat = _animal_eat; - - /* Init Human Type */ - Animal_Type _HUMAN_TYPE; - Eina_Model_Type *HUMAN_TYPE = (Eina_Model_Type *) &_HUMAN_TYPE; - memset(&_HUMAN_TYPE, 0, sizeof(_HUMAN_TYPE)); - type = (Eina_Model_Type *) &_HUMAN_TYPE; - type->version = EINA_MODEL_TYPE_VERSION; - type->parent = ANIMAL_TYPE; - type->type_size = sizeof(Human_Type); - type->name = "Human_Type"; - type->interfaces = HUMAN_IFACES; - - ANIMAL_TYPE(type)->eat = _human_eat; - - Eina_Model *hm, *am; - am = eina_model_new(ANIMAL_TYPE); - hm = eina_model_new(HUMAN_TYPE); - - animal_eat(am); - ck_assert_int_eq(_animal_eat_count, 1); - animal_eat(hm); - ck_assert_int_eq(_human_eat_count, 1); - - pooper_poop(am); - ck_assert_int_eq(_animal_poop_count, 1); - pooper_poop(hm); - ck_assert_int_eq(_human_poop_count, 1); - - ck_assert_int_eq(_animal_eat_count, 1); - ck_assert_int_eq(_human_eat_count, 1); - ck_assert_int_eq(_animal_poop_count, 1); - ck_assert_int_eq(_human_poop_count, 1); - - ck_assert_int_eq(eina_model_refcount(am), 1); - ck_assert_int_eq(eina_model_refcount(hm), 1); - - eina_model_unref(am); - eina_model_unref(hm); - - eina_shutdown(); -} -END_TEST - -static Eina_Bool -_myproperties_load(Eina_Model *m) -{ - Eina_Value v; - Eina_Bool ret; - int count; - - if (!eina_model_property_get(m, "load_count", &v)) - return EINA_FALSE; - - eina_value_get(&v, &count); - count++; - eina_value_set(&v, count); - - ret = eina_model_property_set(m, "load_count", &v); - eina_value_flush(&v); - - return ret; -} - -static Eina_Bool -_myproperties_unload(Eina_Model *m) -{ - Eina_Value v; - Eina_Bool ret; - int count; - - if (!eina_model_property_get(m, "load_count", &v)) - return EINA_FALSE; - - eina_value_get(&v, &count); - count--; - eina_value_set(&v, count); - - ret = eina_model_property_set(m, "load_count", &v); - eina_value_flush(&v); - - return ret; -} - -static Eina_Bool -_mychildren_load(Eina_Model *m) -{ - Eina_Model *c = eina_model_new(EINA_MODEL_TYPE_GENERIC); - int ret = eina_model_child_append(m, c); - eina_model_unref(c); - return ret >= 0; -} - -static Eina_Bool -_mychildren_unload(Eina_Model *m) -{ - int count = eina_model_child_count(m); - EINA_SAFETY_ON_FALSE_RETURN_VAL(count > 0, EINA_FALSE); - return eina_model_child_del(m, count - 1); -} - -START_TEST(eina_model_test_ifaces_load_unload) -{ - unsigned int count_loaded = 0, count_unloaded = 0; - unsigned int count_ploaded = 0, count_punloaded = 0; - unsigned int count_cloaded = 0, count_cunloaded = 0; - static Eina_Model_Interface_Properties piface; - static Eina_Model_Interface_Children ciface; - static const Eina_Model_Interface *piface_parents[2] = {NULL, NULL}; - static const Eina_Model_Interface *ciface_parents[2] = {NULL, NULL}; - static const Eina_Model_Interface *type_ifaces[3] = { - &piface.base, &ciface.base, NULL - }; - static Eina_Model_Type type; - Eina_Model *m; - Eina_Value v; - int count; - - eina_init(); - - /* do after eina_init() otherwise interfaces are not set */ - piface_parents[0] = EINA_MODEL_INTERFACE_PROPERTIES_HASH; - ciface_parents[0] = EINA_MODEL_INTERFACE_CHILDREN_INARRAY; - - memset(&piface, 0, sizeof(piface)); - piface.base.version = EINA_MODEL_INTERFACE_VERSION; - piface.base.interface_size = sizeof(piface); - piface.base.name = EINA_MODEL_INTERFACE_NAME_PROPERTIES; - piface.base.interfaces = piface_parents; - piface.load = _myproperties_load; - piface.unload = _myproperties_unload; - - memset(&ciface, 0, sizeof(ciface)); - ciface.base.version = EINA_MODEL_INTERFACE_VERSION; - ciface.base.interface_size = sizeof(ciface); - ciface.base.name = EINA_MODEL_INTERFACE_NAME_CHILDREN; - ciface.base.interfaces = ciface_parents; - ciface.load = _mychildren_load; - ciface.unload = _mychildren_unload; - - type.version = EINA_MODEL_TYPE_VERSION; - type.private_size = 0; - type.name = "MyType"; - eina_model_type_subclass_setup(&type, EINA_MODEL_TYPE_GENERIC); - type.interfaces = type_ifaces; - - m = eina_model_new(&type); - fail_unless(m != NULL); - - eina_model_event_callback_add - (m, "loaded", _eina_test_model_cb_count, &count_loaded); - eina_model_event_callback_add - (m, "unloaded", _eina_test_model_cb_count, &count_unloaded); - - eina_model_event_callback_add - (m, "properties,loaded", _eina_test_model_cb_count, &count_ploaded); - eina_model_event_callback_add - (m, "properties,unloaded", _eina_test_model_cb_count, &count_punloaded); - - eina_model_event_callback_add - (m, "children,loaded", _eina_test_model_cb_count, &count_cloaded); - eina_model_event_callback_add - (m, "children,unloaded", _eina_test_model_cb_count, &count_cunloaded); - - fail_unless(eina_value_setup(&v, EINA_VALUE_TYPE_INT)); - fail_unless(eina_value_set(&v, 0)); - fail_unless(eina_model_property_set(m, "load_count", &v)); - eina_value_flush(&v); - - fail_unless(eina_model_load(m)); - fail_unless(eina_model_load(m)); - fail_unless(eina_model_load(m)); - - /* each load increments one for load_count property */ - fail_unless(eina_model_property_get(m, "load_count", &v)); - fail_unless(eina_value_pget(&v, &count)); - ck_assert_int_eq(count, 3); - eina_value_flush(&v); - - /* each load adds one child */ - ck_assert_int_eq(eina_model_child_count(m), 3); - - fail_unless(eina_model_unload(m)); - fail_unless(eina_model_unload(m)); - fail_unless(eina_model_unload(m)); - - ck_assert_int_eq(count_loaded, 3); - ck_assert_int_eq(count_unloaded, 3); - - ck_assert_int_eq(count_ploaded, 3); - ck_assert_int_eq(count_punloaded, 3); - - ck_assert_int_eq(count_cloaded, 3); - ck_assert_int_eq(count_cunloaded, 3); - - ck_assert_int_eq(eina_model_refcount(m), 1); - eina_model_unref(m); - - eina_shutdown(); -} -END_TEST - -void -eina_test_model(TCase *tc) -{ - tcase_add_test(tc, eina_model_test_properties); - tcase_add_test(tc, eina_model_test_children); - tcase_add_test(tc, eina_model_test_copy); - tcase_add_test(tc, eina_model_test_deep_copy); - tcase_add_test(tc, eina_model_test_child_iterator); - tcase_add_test(tc, eina_model_test_child_reversed_iterator); - tcase_add_test(tc, eina_model_test_child_sorted_iterator); - tcase_add_test(tc, eina_model_test_child_filtered_iterator); - tcase_add_test(tc, eina_model_test_struct); - tcase_add_test(tc, eina_model_test_struct_complex_members); - tcase_add_test(tc, eina_model_test_inheritance); - tcase_add_test(tc, eina_model_test_ifaces_load_unload); -} diff --git a/src/tests/eina/eina_test_value.c b/src/tests/eina/eina_test_value.c index 48077e6693..df0771008c 100644 --- a/src/tests/eina/eina_test_value.c +++ b/src/tests/eina/eina_test_value.c @@ -2873,51 +2873,6 @@ START_TEST(eina_value_test_optional_struct_members) } END_TEST -#if 0 -START_TEST(eina_value_test_model) -{ - Eina_Value *value, inv; - Eina_Model *model, *m; - char *str; - - eina_init(); - - value = eina_value_new(EINA_VALUE_TYPE_MODEL); - fail_unless(value != NULL); - - model = eina_model_new(EINA_MODEL_TYPE_GENERIC); - fail_unless(model != NULL); - - fail_unless(eina_value_setup(&inv, EINA_VALUE_TYPE_INT)); - fail_unless(eina_value_set(&inv, 1234)); - fail_unless(eina_model_property_set(model, "i", &inv)); - eina_value_flush(&inv); - - fail_unless(eina_value_set(value, model)); - fail_unless(eina_model_refcount(model) == 2); - - fail_unless(eina_value_get(value, &m)); - fail_unless(m == model); - fail_unless(eina_model_refcount(m) == 2); - - fail_unless(eina_value_pset(value, &model)); - fail_unless(eina_model_refcount(model) == 2); - - str = eina_value_to_string(value); - fail_unless(str != NULL); - ck_assert_str_eq(str, "Eina_Model_Type_Generic({i: 1234}, [])"); - free(str); - - eina_value_free(value); - - fail_unless(eina_model_refcount(model) == 1); - eina_model_unref(model); - - eina_shutdown(); -} -END_TEST -#endif - void eina_test_value(TCase *tc) { @@ -2946,7 +2901,4 @@ eina_test_value(TCase *tc) tcase_add_test(tc, eina_value_test_optional_int); tcase_add_test(tc, eina_value_test_optional_string); tcase_add_test(tc, eina_value_test_optional_struct_members); -#if 0 - tcase_add_test(tc, eina_value_test_model); -#endif }