From: <svn...@op...> - 2009-06-17 16:08:03
|
Author: bellmich Date: Wed Jun 17 18:07:47 2009 New Revision: 1091 URL: http://libsyncml.opensync.org/changeset/1091 Log: migrated SmlDevInfPropParam to new GObject style The gobject introspection works for this new object. Added: trunk/libsyncml/dev_inf_api/sml_dev_inf_prop_param.c trunk/libsyncml/dev_inf_api/sml_dev_inf_prop_param.h trunk/tests/check_dev_inf_prop_param.c Modified: trunk/libsyncml/CMakeLists.txt trunk/libsyncml/data_sync_api/data_sync_devinf.c trunk/libsyncml/parser/sml_xml_assm.c trunk/libsyncml/parser/sml_xml_parse.c trunk/libsyncml/sml_command.h trunk/libsyncml/sml_devinf.c trunk/libsyncml/sml_devinf.h trunk/libsyncml/sml_error.h trunk/libsyncml/syncml.h trunk/tests/CMakeLists.txt trunk/tests/check_dev_inf_content_type.c trunk/tests/check_xml_parser.c Modified: trunk/libsyncml/CMakeLists.txt ============================================================================== --- trunk/libsyncml/CMakeLists.txt Wed Jun 17 16:31:06 2009 (r1090) +++ trunk/libsyncml/CMakeLists.txt Wed Jun 17 18:07:47 2009 (r1091) @@ -33,6 +33,7 @@ parser/sml_wbxml.c parser/sml_xml_assm.c parser/sml_xml_parse.c + dev_inf_api/sml_dev_inf_prop_param.c dev_inf_api/sml_dev_inf_content_type.c ) @@ -95,6 +96,7 @@ INSTALL( FILES dev_inf_api/sml_dev_inf_content_type.h + dev_inf_api/sml_dev_inf_prop_param.h DESTINATION ${LIBSYNCML_INCLUDE_DIR}/libsyncml/dev_inf_api ) Modified: trunk/libsyncml/data_sync_api/data_sync_devinf.c ============================================================================== --- trunk/libsyncml/data_sync_api/data_sync_devinf.c Wed Jun 17 16:31:06 2009 (r1090) +++ trunk/libsyncml/data_sync_api/data_sync_devinf.c Wed Jun 17 18:07:47 2009 (r1091) @@ -79,11 +79,15 @@ smlAssert(prop); smlAssert(name); - SmlDevInfPropParam *param = smlDevInfNewPropParam(error); - if (!param) + SmlDevInfPropParam *param = sml_dev_inf_prop_param_new(); + if (!param) { + smlErrorSet(error, SML_ERROR_GENERIC, "Cannot create new PropParam for SyncML device information."); goto error; + } - smlDevInfPropParamSetParamName(param, name); + /* FIXME: missing error handling */ + GError *gerror = NULL; + sml_dev_inf_prop_param_set_paramname(param, name, &gerror); smlDevInfPropertyAddPropParam(prop, param); smlTrace(TRACE_EXIT, "%s", __func__); @@ -121,8 +125,6 @@ GError *gerror = NULL; SmlDevInfContentType *ct = sml_dev_inf_content_type_new(cttype, verct, &gerror); if (!ct) { - smlErrorSet(error, SML_ERROR_GENERIC, "%s", gerror->message); - g_error_free(gerror); goto error; } @@ -151,12 +153,12 @@ smlDevInfCTCapSetVerCT(ctcap, "2.1"); _ADD_CTCAP_PROPERTY_BY_NAME("ADR") _ADD_PROPERTY_PARAM("TYPE") - smlDevInfPropParamAddValEnum(param, "HOME"); - smlDevInfPropParamAddValEnum(param, "WORK"); - smlDevInfPropParamAddValEnum(param, "PARCEL"); - smlDevInfPropParamAddValEnum(param, "POSTAL"); - smlDevInfPropParamAddValEnum(param, "INTL"); - smlDevInfPropParamAddValEnum(param, "DOM"); + sml_dev_inf_prop_param_add_valenum(param, "HOME", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "WORK", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "PARCEL", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "POSTAL", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "INTL", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "DOM", &gerror); _ADD_PROPERTY_PARAM("HOME"); _ADD_PROPERTY_PARAM("WORK"); _ADD_PROPERTY_PARAM("PARCEL"); @@ -169,24 +171,24 @@ _ADD_CTCAP_PROPERTY_BY_NAME_VALUE("END","VCARD") _ADD_CTCAP_PROPERTY_BY_NAME("EMAIL") _ADD_PROPERTY_PARAM("TYPE") - smlDevInfPropParamAddValEnum(param, "INTERNET"); + sml_dev_inf_prop_param_add_valenum(param, "INTERNET", &gerror); _ADD_PROPERTY_PARAM("INTERNET"); _ADD_CTCAP_PROPERTY_BY_NAME("FN") _ADD_CTCAP_PROPERTY_BY_NAME("GEO") _ADD_CTCAP_PROPERTY_BY_NAME("KEY") _ADD_PROPERTY_PARAM("TYPE") - smlDevInfPropParamAddValEnum(param, "X509"); - smlDevInfPropParamAddValEnum(param, "PGP"); + sml_dev_inf_prop_param_add_valenum(param, "X509", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "PGP", &gerror); _ADD_PROPERTY_PARAM("X509"); _ADD_PROPERTY_PARAM("PGP"); _ADD_CTCAP_PROPERTY_BY_NAME("LABEL") _ADD_PROPERTY_PARAM("TYPE") - smlDevInfPropParamAddValEnum(param, "HOME"); - smlDevInfPropParamAddValEnum(param, "WORK"); - smlDevInfPropParamAddValEnum(param, "PARCEL"); - smlDevInfPropParamAddValEnum(param, "POSTAL"); - smlDevInfPropParamAddValEnum(param, "INTL"); - smlDevInfPropParamAddValEnum(param, "DOM"); + sml_dev_inf_prop_param_add_valenum(param, "HOME", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "WORK", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "PARCEL", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "POSTAL", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "INTL", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "DOM", &gerror); _ADD_PROPERTY_PARAM("HOME"); _ADD_PROPERTY_PARAM("WORK"); _ADD_PROPERTY_PARAM("PARCEL"); @@ -195,7 +197,7 @@ _ADD_PROPERTY_PARAM("DOM"); _ADD_CTCAP_PROPERTY_BY_NAME("LOGO") _ADD_PROPERTY_PARAM("TYPE") - smlDevInfPropParamAddValEnum(param, "JPEG"); + sml_dev_inf_prop_param_add_valenum(param, "JPEG", &gerror); _ADD_PROPERTY_PARAM("JPEG"); _ADD_CTCAP_PROPERTY_BY_NAME("MAILER") _ADD_CTCAP_PROPERTY_BY_NAME("N") @@ -203,32 +205,32 @@ _ADD_CTCAP_PROPERTY_BY_NAME("ORG") _ADD_CTCAP_PROPERTY_BY_NAME("PHOTO") _ADD_PROPERTY_PARAM("TYPE") - smlDevInfPropParamAddValEnum(param, "JPEG"); + sml_dev_inf_prop_param_add_valenum(param, "JPEG", &gerror); _ADD_PROPERTY_PARAM("JPEG"); _ADD_CTCAP_PROPERTY_BY_NAME("REV") _ADD_CTCAP_PROPERTY_BY_NAME("ROLE") _ADD_CTCAP_PROPERTY_BY_NAME("SOUND") _ADD_PROPERTY_PARAM("TYPE") - smlDevInfPropParamAddValEnum(param, "AIFF"); - smlDevInfPropParamAddValEnum(param, "PCM"); - smlDevInfPropParamAddValEnum(param, "WAVE"); + sml_dev_inf_prop_param_add_valenum(param, "AIFF", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "PCM", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "WAVE", &gerror); _ADD_PROPERTY_PARAM("AIFF"); _ADD_PROPERTY_PARAM("PCM"); _ADD_PROPERTY_PARAM("WAVE"); _ADD_CTCAP_PROPERTY_BY_NAME("TEL") _ADD_PROPERTY_PARAM("TYPE") - smlDevInfPropParamAddValEnum(param, "WORK"); - smlDevInfPropParamAddValEnum(param, "VOICE"); - smlDevInfPropParamAddValEnum(param, "PREF"); - smlDevInfPropParamAddValEnum(param, "PAGER"); - smlDevInfPropParamAddValEnum(param, "MSG"); - smlDevInfPropParamAddValEnum(param, "MODEM"); - smlDevInfPropParamAddValEnum(param, "ISDN"); - smlDevInfPropParamAddValEnum(param, "HOME"); - smlDevInfPropParamAddValEnum(param, "FAX"); - smlDevInfPropParamAddValEnum(param, "CELL"); - smlDevInfPropParamAddValEnum(param, "CAR"); - smlDevInfPropParamAddValEnum(param, "BBS"); + sml_dev_inf_prop_param_add_valenum(param, "WORK", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "VOICE", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "PREF", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "PAGER", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "MSG", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "MODEM", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "ISDN", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "HOME", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "FAX", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "CELL", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "CAR", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "BBS", &gerror); _ADD_PROPERTY_PARAM("WORK"); _ADD_PROPERTY_PARAM("VOICE"); _ADD_PROPERTY_PARAM("PREF"); @@ -246,8 +248,8 @@ _ADD_CTCAP_PROPERTY_BY_NAME("UID") _ADD_CTCAP_PROPERTY_BY_NAME("URL") _ADD_PROPERTY_PARAM("TYPE") - smlDevInfPropParamAddValEnum(param, "WORK"); - smlDevInfPropParamAddValEnum(param, "HOME"); + sml_dev_inf_prop_param_add_valenum(param, "WORK", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "HOME", &gerror); _ADD_PROPERTY_PARAM("WORK"); _ADD_PROPERTY_PARAM("HOME"); _ADD_CTCAP_PROPERTY_BY_NAME_VALUE("VERSION", "2.1") @@ -278,16 +280,16 @@ _ADD_CTCAP_PROPERTY_BY_NAME("URL") _ADD_CTCAP_PROPERTY_BY_NAME("TEL") _ADD_PROPERTY_PARAM("TYPE") - smlDevInfPropParamAddValEnum(param, "CELL"); - smlDevInfPropParamAddValEnum(param, "HOME"); - smlDevInfPropParamAddValEnum(param, "WORK"); - smlDevInfPropParamAddValEnum(param, "FAX"); - smlDevInfPropParamAddValEnum(param, "MODEM"); - smlDevInfPropParamAddValEnum(param, "VOICE"); + sml_dev_inf_prop_param_add_valenum(param, "CELL", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "HOME", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "WORK", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "FAX", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "MODEM", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "VOICE", &gerror); _ADD_CTCAP_PROPERTY_BY_NAME("ADR") _ADD_PROPERTY_PARAM("TYPE") - smlDevInfPropParamAddValEnum(param, "HOME"); - smlDevInfPropParamAddValEnum(param, "WORK"); + sml_dev_inf_prop_param_add_valenum(param, "HOME", &gerror); + sml_dev_inf_prop_param_add_valenum(param, "WORK", &gerror); _ADD_CTCAP_PROPERTY_BY_NAME("BDAY") _ADD_CTCAP_PROPERTY_BY_NAME("NOTE") _ADD_CTCAP_PROPERTY_BY_NAME("PHOTO") @@ -413,7 +415,11 @@ smlTrace(TRACE_EXIT, "%s - content type newly added to devinf", __func__); return TRUE; -error: +error: + if (gerror) { + smlErrorSet(error, SML_ERROR_GENERIC, "%s", gerror->message); + g_error_free(gerror); + } smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(error)); return FALSE; } Added: trunk/libsyncml/dev_inf_api/sml_dev_inf_prop_param.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/libsyncml/dev_inf_api/sml_dev_inf_prop_param.c Wed Jun 17 18:07:47 2009 (r1091) @@ -0,0 +1,317 @@ +/* sml_dev_inf_prop_param.c */ + +#include "sml_dev_inf_prop_param.h" +#include <libsyncml/syncml.h> + +G_DEFINE_TYPE (SmlDevInfPropParam, sml_dev_inf_prop_param, G_TYPE_OBJECT) + +enum +{ + PROP_0, + PROP_PARAMNAME, + PROP_DATATYPE, + PROP_DISPLAYNAME, + PROP_VALENUMS +}; + +struct _SmlDevInfPropParamPrivate +{ + gchar* paramname; + gchar* datatype; + gchar* displayname; + GList* valenums; +}; + +static void +sml_dev_inf_prop_param_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + switch (property_id) { + case PROP_PARAMNAME: + g_value_set_string (value, SML_DEV_INF_PROP_PARAM (object)->priv->paramname); + break; + case PROP_DATATYPE: + g_value_set_string (value, SML_DEV_INF_PROP_PARAM (object)->priv->datatype); + break; + case PROP_DISPLAYNAME: + g_value_set_string (value, SML_DEV_INF_PROP_PARAM (object)->priv->displayname); + break; + case PROP_VALENUMS: + g_value_set_pointer (value, SML_DEV_INF_PROP_PARAM (object)->priv->valenums); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +sml_dev_inf_prop_param_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (property_id) { + case PROP_PARAMNAME: + g_free (SML_DEV_INF_PROP_PARAM (object)->priv->paramname); + SML_DEV_INF_PROP_PARAM (object)->priv->paramname = g_strdup (g_value_get_string (value)); + break; + case PROP_DATATYPE: + g_free (SML_DEV_INF_PROP_PARAM (object)->priv->datatype); + SML_DEV_INF_PROP_PARAM (object)->priv->datatype = g_strdup (g_value_get_string (value)); + break; + case PROP_DISPLAYNAME: + g_free (SML_DEV_INF_PROP_PARAM (object)->priv->displayname); + SML_DEV_INF_PROP_PARAM (object)->priv->displayname = g_strdup (g_value_get_string (value)); + break; + case PROP_VALENUMS: + SML_DEV_INF_PROP_PARAM (object)->priv->valenums = (GList *) g_value_get_pointer(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + } +} + +static void +sml_dev_inf_prop_param_finalize (GObject *object) +{ + SmlDevInfPropParam *self = (SmlDevInfPropParam *) object; + g_free(self->priv->paramname); + g_free(self->priv->datatype); + g_free(self->priv->displayname); + while(self->priv->valenums) { + gchar *valenum = self->priv->valenums->data; + self->priv->valenums = g_list_remove(self->priv->valenums, valenum); + g_free(valenum); + } + G_OBJECT_CLASS (sml_dev_inf_prop_param_parent_class)->finalize (object); +} + +static void +sml_dev_inf_prop_param_class_init (SmlDevInfPropParamClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (SmlDevInfPropParamPrivate)); + + object_class->get_property = sml_dev_inf_prop_param_get_property; + object_class->set_property = sml_dev_inf_prop_param_set_property; + object_class->finalize = sml_dev_inf_prop_param_finalize; + + /** + * SmlDevInfPropParam:ParamName: + * + * The property. + */ + g_object_class_install_property (object_class, + PROP_PARAMNAME, + g_param_spec_string ("ParamName", + "", + "", + NULL, + G_PARAM_READWRITE)); + /** + * SmlDevInfPropParam:DataType: + * + * The property. + */ + g_object_class_install_property (object_class, + PROP_DATATYPE, + g_param_spec_string ("DataType", + "", + "", + NULL, + G_PARAM_READWRITE)); + /** + * SmlDevInfPropParam:DisplayName: + * + * The property. + */ + g_object_class_install_property (object_class, + PROP_DISPLAYNAME, + g_param_spec_string ("DisplayName", + "", + "", + NULL, + G_PARAM_READWRITE)); + /** + * SmlDevInfPropParam:ValEnums: + * + * The property. + */ + g_object_class_install_property (object_class, + PROP_VALENUMS, + g_param_spec_pointer ("ValEnums", + "", + NULL, + G_PARAM_PRIVATE)); + +} + +static void +sml_dev_inf_prop_param_init (SmlDevInfPropParam *self) +{ + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, + SML_TYPE_DEV_INF_PROP_PARAM, + SmlDevInfPropParamPrivate); +} + +/** + * sml_dev_inf_prop_param_new: + * + * Creates a new instance of #SmlDevInfPropParam. + * + * Return value: the newly created #SmlDevInfPropParam instance + */ +SmlDevInfPropParam* +sml_dev_inf_prop_param_new (void) +{ + return g_object_new (SML_TYPE_DEV_INF_PROP_PARAM, NULL); +} + +/** + * sml_dev_inf_prop_param_get_paramname: + * @self: A #SmlDevInfPropParam + * + * Gets the property. + * + * Return value: + */ +G_CONST_RETURN gchar* +sml_dev_inf_prop_param_get_paramname (SmlDevInfPropParam *self) +{ + g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), NULL); + return self->priv->paramname; +} + +/** + * sml_dev_inf_prop_param_set_paramname: + * @self: A #SmlDevInfPropParam + * @paramname: + * + * Sets the property. + */ +gboolean +sml_dev_inf_prop_param_set_paramname (SmlDevInfPropParam *self, + const gchar* paramname, + GError **error) +{ + g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), FALSE); + g_free (self->priv->paramname); + self->priv->paramname = g_strdup (paramname); + return TRUE; +} + +/** + * sml_dev_inf_prop_param_get_datatype: + * @self: A #SmlDevInfPropParam + * + * Gets the property. + * + * Return value: + */ +G_CONST_RETURN gchar* +sml_dev_inf_prop_param_get_datatype (SmlDevInfPropParam *self) +{ + g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), NULL); + return self->priv->datatype; +} + +/** + * sml_dev_inf_prop_param_set_datatype: + * @self: A #SmlDevInfPropParam + * @datatype: + * + * Sets the property. + */ +gboolean +sml_dev_inf_prop_param_set_datatype (SmlDevInfPropParam *self, + const gchar* datatype, + GError **error) +{ + g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), FALSE); + g_free (self->priv->datatype); + self->priv->datatype = g_strdup (datatype); + return TRUE; +} + +/** + * sml_dev_inf_prop_param_get_displayname: + * @self: A #SmlDevInfPropParam + * + * Gets the property. + * + * Return value: + */ +G_CONST_RETURN gchar* +sml_dev_inf_prop_param_get_displayname (SmlDevInfPropParam *self) +{ + g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), NULL); + return self->priv->displayname; +} + +/** + * sml_dev_inf_prop_param_set_displayname: + * @self: A #SmlDevInfPropParam + * @displayname: + * + * Sets the property. + */ +gboolean +sml_dev_inf_prop_param_set_displayname (SmlDevInfPropParam *self, + const gchar* displayname, + GError **error) +{ + g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), FALSE); + g_free (self->priv->displayname); + self->priv->displayname = g_strdup (displayname); + return TRUE; +} + +/** + * sml_dev_inf_prop_param_num_valenums: + * @self: A #SmlDevInfPropParam + * + * + */ +guint +sml_dev_inf_prop_param_num_valenums (SmlDevInfPropParam *self) +{ + g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), 0); + return g_list_length(self->priv->valenums); +} + +/** + * sml_dev_inf_prop_param_get_nth_valenum: + * @self: A #SmlDevInfPropParam + * + * + */ +G_CONST_RETURN gchar* +sml_dev_inf_prop_param_get_nth_valenum (SmlDevInfPropParam *self, + guint n) +{ + g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), NULL); + return (gchar *)g_list_nth_data(self->priv->valenums, n); +} + +/** + * sml_dev_inf_prop_param_add_valenum: + * @self: A #SmlDevInfPropParam + * + * + */ +gboolean +sml_dev_inf_prop_param_add_valenum (SmlDevInfPropParam *self, + const gchar* valEnum, + GError **error) +{ + g_return_val_if_fail (SML_IS_DEV_INF_PROP_PARAM (self), FALSE); + self->priv->valenums = g_list_append(self->priv->valenums, g_strdup(valEnum)); + if (!self->priv->valenums) { + *error = g_error_new(SML_ERROR, SML_ERROR_GENERIC, "Cannot add ValEnum to ValEnum list of PropParam."); + return FALSE; + } + return TRUE; +} Added: trunk/libsyncml/dev_inf_api/sml_dev_inf_prop_param.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/libsyncml/dev_inf_api/sml_dev_inf_prop_param.h Wed Jun 17 18:07:47 2009 (r1091) @@ -0,0 +1,49 @@ +/* sml_dev_inf_prop_param.h */ + +#ifndef __SML_DEV_INF_PROP_PARAM_H__ +#define __SML_DEV_INF_PROP_PARAM_H__ + +#include <glib-object.h> + +G_BEGIN_DECLS + +#define SML_TYPE_DEV_INF_PROP_PARAM (sml_dev_inf_prop_param_get_type()) +#define SML_DEV_INF_PROP_PARAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SML_TYPE_DEV_INF_PROP_PARAM, SmlDevInfPropParam)) +#define SML_DEV_INF_PROP_PARAM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SML_TYPE_DEV_INF_PROP_PARAM, SmlDevInfPropParamClass)) +#define SML_IS_DEV_INF_PROP_PARAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SML_TYPE_DEV_INF_PROP_PARAM)) +#define SML_IS_DEV_INF_PROP_PARAM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SML_TYPE_DEV_INF_PROP_PARAM)) +#define SML_DEV_INF_PROP_PARAM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SML_TYPE_DEV_INF_PROP_PARAM, SmlDevInfPropParamClass)) + +typedef struct _SmlDevInfPropParam SmlDevInfPropParam; +typedef struct _SmlDevInfPropParamClass SmlDevInfPropParamClass; +typedef struct _SmlDevInfPropParamPrivate SmlDevInfPropParamPrivate; + +struct _SmlDevInfPropParam +{ + GObject parent; + + /*< private >*/ + SmlDevInfPropParamPrivate *priv; +}; + +struct _SmlDevInfPropParamClass +{ + GObjectClass parent_class; + +}; + +GType sml_dev_inf_prop_param_get_type (void); +SmlDevInfPropParam* sml_dev_inf_prop_param_new (void); +G_CONST_RETURN gchar* sml_dev_inf_prop_param_get_paramname (SmlDevInfPropParam *self); +gboolean sml_dev_inf_prop_param_set_paramname (SmlDevInfPropParam *self, const gchar* paramname, GError **error); +G_CONST_RETURN gchar* sml_dev_inf_prop_param_get_datatype (SmlDevInfPropParam *self); +gboolean sml_dev_inf_prop_param_set_datatype (SmlDevInfPropParam *self, const gchar* datatype, GError **error); +G_CONST_RETURN gchar* sml_dev_inf_prop_param_get_displayname (SmlDevInfPropParam *self); +gboolean sml_dev_inf_prop_param_set_displayname (SmlDevInfPropParam *self, const gchar* displayname, GError **error); +gsize sml_dev_inf_prop_param_num_valenums (SmlDevInfPropParam *self); +G_CONST_RETURN gchar* sml_dev_inf_prop_param_get_nth_valenum (SmlDevInfPropParam *self, gsize n); +gboolean sml_dev_inf_prop_param_add_valenum (SmlDevInfPropParam *self, const gchar* valEnum, GError **error); + +G_END_DECLS + +#endif /* __SML_DEV_INF_PROP_PARAM_H__ */ Modified: trunk/libsyncml/parser/sml_xml_assm.c ============================================================================== --- trunk/libsyncml/parser/sml_xml_assm.c Wed Jun 17 16:31:06 2009 (r1090) +++ trunk/libsyncml/parser/sml_xml_assm.c Wed Jun 17 18:07:47 2009 (r1091) @@ -2163,25 +2163,26 @@ } // add ParamName - if (param->paramName != NULL && - !_smlXmlAssemblerAddString(assm, SML_ELEMENT_PARAMNAME, param->paramName, error)) + if (sml_dev_inf_prop_param_get_paramname(param) != NULL && + !_smlXmlAssemblerAddString(assm, SML_ELEMENT_PARAMNAME, sml_dev_inf_prop_param_get_paramname(param), error)) goto error; // add DataType - if (param->dataType != NULL && - !_smlXmlAssemblerAddString(assm, SML_ELEMENT_DATATYPE, param->dataType, error)) + if (sml_dev_inf_prop_param_get_datatype(param) != NULL && + !_smlXmlAssemblerAddString(assm, SML_ELEMENT_DATATYPE, sml_dev_inf_prop_param_get_datatype(param), error)) goto error; // add DisplayName - if (param->displayName != NULL && - !_smlXmlAssemblerAddString(assm, SML_ELEMENT_DISPLAYNAME, param->displayName, error)) + if (sml_dev_inf_prop_param_get_displayname(param) != NULL && + !_smlXmlAssemblerAddString(assm, SML_ELEMENT_DISPLAYNAME, sml_dev_inf_prop_param_get_displayname(param), error)) goto error; // add values - hvalue = NULL; - for (hvalue = param->valEnums; hvalue; hvalue = hvalue->next) + guint length = sml_dev_inf_prop_param_num_valenums(param); + guint n; + for (n=0; n < length; n++) { - char *valEnum = hvalue->data; + const char *valEnum = sml_dev_inf_prop_param_get_nth_valenum(param, n); // add ValEnum if (!_smlXmlAssemblerAddString(assm, SML_ELEMENT_VALENUM, valEnum, error)) Modified: trunk/libsyncml/parser/sml_xml_parse.c ============================================================================== --- trunk/libsyncml/parser/sml_xml_parse.c Wed Jun 17 16:31:06 2009 (r1090) +++ trunk/libsyncml/parser/sml_xml_parse.c Wed Jun 17 18:07:47 2009 (r1091) @@ -2742,9 +2742,14 @@ case SML_DEVINF_CTCAP_DATATYPE: if (property == NULL) goto error; - if (param != NULL) - smlDevInfPropParamSetDataType(param, value); - else + if (param != NULL) { + GError *gerror = NULL; + if (!sml_dev_inf_prop_param_set_datatype(param, value, &gerror)) { + smlErrorSet(error, SML_ERROR_GENERIC, "%s", gerror->message); + g_error_free(gerror); + goto error; + } + } else smlDevInfPropertySetDataType(property, value); break; case SML_DEVINF_CTCAP_MAXOCCUR: @@ -2765,17 +2770,27 @@ case SML_DEVINF_CTCAP_DISPLAYNAME: if (property == NULL) goto error; - if (param != NULL) - smlDevInfPropParamSetDisplayName(param, value); - else + if (param != NULL) { + GError *gerror = NULL; + if (!sml_dev_inf_prop_param_set_displayname(param, value, &gerror)) { + smlErrorSet(error, SML_ERROR_GENERIC, "%s", gerror->message); + g_error_free(gerror); + goto error; + } + } else smlDevInfPropertySetDisplayName(property, value); break; case SML_DEVINF_CTCAP_VALENUM: if (property == NULL) goto error; - if (param != NULL) - smlDevInfPropParamAddValEnum(param, value); - else + if (param != NULL) { + GError *gerror = NULL; + if (!sml_dev_inf_prop_param_add_valenum(param, value, &gerror)) { + smlErrorSet(error, SML_ERROR_GENERIC, "%s", gerror->message); + g_error_free(gerror); + goto error; + } + } else smlDevInfPropertyAddValEnum(property, value); break; case SML_DEVINF_CTCAP_PARAMNAME: @@ -2786,10 +2801,13 @@ smlDevInfPropertyAddPropParam(property, param); param = NULL; } - param = smlDevInfNewPropParam(error); - if (!param) - goto error; - smlDevInfPropParamSetParamName(param, value); + param = sml_dev_inf_prop_param_new(); + if (!param) { + smlErrorSet(error, SML_ERROR_GENERIC, "Cannot create SmlDevInfPropParam during SyncML 1.1 DevInf parsing."); + goto error; + } + GError *gerror = NULL; + sml_dev_inf_prop_param_set_paramname(param, value, &gerror); break; case SML_DEVINF_CTCAP_SIZE: smlDevInfPropertySetPropSize(property, atoi(value)); @@ -2833,9 +2851,11 @@ goto error; } - SmlDevInfPropParam *param = smlDevInfNewPropParam(error); - if (!param) + SmlDevInfPropParam *param = sml_dev_inf_prop_param_new(); + if (!param) { + smlErrorSet(error, SML_ERROR_GENERIC, "Cannot create SmlDevInfPropParam during SyncML 1.2 DevInf parsing."); goto error; + } char *value = NULL; while (1) { @@ -2868,19 +2888,20 @@ } /* now react on the different items */ + GError *gerror = NULL; switch(type) { case SML_DEVINF_CTCAP_PARAMNAME: - smlDevInfPropParamSetParamName(param, value); + sml_dev_inf_prop_param_set_paramname(param, value, &gerror); break; case SML_DEVINF_CTCAP_DATATYPE: - smlDevInfPropParamSetDataType(param, value); + sml_dev_inf_prop_param_set_datatype(param, value, &gerror); break; case SML_DEVINF_CTCAP_DISPLAYNAME: - smlDevInfPropParamSetDisplayName(param, value); + sml_dev_inf_prop_param_set_displayname(param, value, &gerror); break; case SML_DEVINF_CTCAP_VALENUM: - smlDevInfPropParamAddValEnum(param, value); + sml_dev_inf_prop_param_add_valenum(param, value, &gerror); break; default: smlErrorSet(error, SML_ERROR_GENERIC, "Unknown CTCapType for PropParam: %s", elem_name); Modified: trunk/libsyncml/sml_command.h ============================================================================== --- trunk/libsyncml/sml_command.h Wed Jun 17 16:31:06 2009 (r1090) +++ trunk/libsyncml/sml_command.h Wed Jun 17 18:07:47 2009 (r1091) @@ -30,6 +30,8 @@ #ifndef _SML_COMMAND_H_ #define _SML_COMMAND_H_ +#include <libsyncml/syncml.h> + SmlStatus *smlStatusNew(SmlErrorType data, unsigned int cmdref, unsigned int msgref, SmlLocation *sourceref, SmlLocation *targeref, SmlCommandType type, SmlError **error); SmlStatus *smlStatusRef(SmlStatus *status); void smlStatusUnref(SmlStatus *status); Modified: trunk/libsyncml/sml_devinf.c ============================================================================== --- trunk/libsyncml/sml_devinf.c Wed Jun 17 16:31:06 2009 (r1090) +++ trunk/libsyncml/sml_devinf.c Wed Jun 17 18:07:47 2009 (r1091) @@ -170,21 +170,7 @@ while (prop->propParams) { SmlDevInfPropParam *param = prop->propParams->data; prop->propParams = g_list_remove(prop->propParams, param); - smlSafeCFree(&(param->paramName)); - if (param->dataType) - smlSafeCFree(&(param->dataType)); - if (param->displayName) - smlSafeCFree(&(param->displayName)); - /* if lists are removed - * then the data must be removed separately - */ - while (param->valEnums) { - char *valEnum = param->valEnums->data; - param->valEnums = g_list_remove(param->valEnums, valEnum); - smlSafeCFree(&valEnum); - } - /* free PropParam itself */ - smlSafeFree((gpointer *) ¶m); + g_object_unref(param); } /* free Property itself */ smlSafeFree((gpointer *) &prop); @@ -838,131 +824,6 @@ return NULL; } -/* PropParam stuff */ - -SmlDevInfPropParam *smlDevInfNewPropParam(SmlError **error) -{ - smlTrace(TRACE_ENTRY, "%s(%p)", __func__, error); - CHECK_ERROR_REF - - SmlDevInfPropParam *param = smlTryMalloc0(sizeof(SmlDevInfPropParam), error); - if (!param) { - smlTrace(TRACE_EXIT_ERROR, "%s: %s", __func__, smlErrorPrint(error)); - return NULL; - } - - param->paramName = NULL; - param->dataType = NULL; - param->displayName = NULL; - param->valEnums = NULL; - - smlTrace(TRACE_EXIT, "%s", __func__); - return param; -} - -void smlDevInfPropParamSetParamName( - SmlDevInfPropParam *propParam, - const char *paramName) -{ - smlTrace(TRACE_ENTRY, "%s(%p, %s)", __func__, propParam, VA_STRING(paramName)); - smlAssert(propParam); - smlAssert(paramName); - - if (propParam->paramName != NULL) - smlSafeCFree(&(propParam->paramName)); - propParam->paramName = g_strdup(paramName); - - smlTrace(TRACE_EXIT, "%s", __func__); -} - -void smlDevInfPropParamSetDataType( - SmlDevInfPropParam *propParam, - const char *dataType) -{ - smlTrace(TRACE_ENTRY, "%s(%p, %s)", __func__, propParam, VA_STRING(dataType)); - smlAssert(propParam); - smlAssert(dataType); - - if (propParam->dataType != NULL) - smlSafeCFree(&(propParam->dataType)); - propParam->dataType = g_strdup(dataType); - - smlTrace(TRACE_EXIT, "%s", __func__); -} - -void smlDevInfPropParamSetDisplayName( - SmlDevInfPropParam *propParam, - const char *displayName) -{ - smlTrace(TRACE_ENTRY, "%s(%p, %s)", __func__, propParam, VA_STRING(displayName)); - smlAssert(propParam); - smlAssert(displayName); - - if (propParam->displayName != NULL) - smlSafeCFree(&(propParam->displayName)); - propParam->displayName = g_strdup(displayName); - - smlTrace(TRACE_EXIT, "%s", __func__); -} - -void smlDevInfPropParamAddValEnum( - SmlDevInfPropParam *propParam, - const char *valEnum) -{ - smlTrace(TRACE_ENTRY, "%s(%p, %s)", __func__, propParam, VA_STRING(valEnum)); - smlAssert(propParam); - smlAssert(valEnum); - propParam->valEnums = g_list_append(propParam->valEnums, g_strdup(valEnum)); - smlTrace(TRACE_EXIT, "%s", __func__); -} - -char *smlDevInfPropParamGetParamName(const SmlDevInfPropParam *propParam) -{ - smlTrace(TRACE_ENTRY, "%s(%p)", __func__, propParam); - smlAssert(propParam); - char *result = g_strdup(propParam->paramName); - smlTrace(TRACE_EXIT, "%s - %s", __func__, VA_STRING(result)); - return result; -} - -char *smlDevInfPropParamGetDataType(const SmlDevInfPropParam *propParam) -{ - smlTrace(TRACE_ENTRY, "%s(%p)", __func__, propParam); - smlAssert(propParam); - char *result = g_strdup(propParam->dataType); - smlTrace(TRACE_EXIT, "%s - %s", __func__, VA_STRING(result)); - return result; -} - -char *smlDevInfPropParamGetDisplayName(const SmlDevInfPropParam *propParam) -{ - smlTrace(TRACE_ENTRY, "%s(%p)", __func__, propParam); - smlAssert(propParam); - char *result = g_strdup(propParam->displayName); - smlTrace(TRACE_EXIT, "%s - %s", __func__, VA_STRING(result)); - return result; -} - -unsigned int smlDevInfPropParamNumValEnums(const SmlDevInfPropParam *propParam) -{ - smlTrace(TRACE_ENTRY, "%s(%p)", __func__, propParam); - smlAssert(propParam); - unsigned int num = g_list_length(propParam->valEnums); - smlTrace(TRACE_EXIT, "%s - %d", __func__, num); - return num; -} - -char *smlDevInfPropParamGetNthValEnum( - const SmlDevInfPropParam *propParam, - unsigned int n) -{ - smlTrace(TRACE_ENTRY, "%s(%p, %d)", __func__, propParam, n); - smlAssert(propParam); - char *result = g_strdup(g_list_nth_data(propParam->valEnums, n)); - smlTrace(TRACE_EXIT, "%s - %s", __func__, VA_STRING(result)); - return result; -} - /* Property stuff */ SmlDevInfProperty *smlDevInfNewProperty(SmlError **error) Modified: trunk/libsyncml/sml_devinf.h ============================================================================== --- trunk/libsyncml/sml_devinf.h Wed Jun 17 16:31:06 2009 (r1090) +++ trunk/libsyncml/sml_devinf.h Wed Jun 17 18:07:47 2009 (r1091) @@ -31,6 +31,7 @@ #define _SML_DEVINF_H_ #include <libsyncml/dev_inf_api/sml_dev_inf_content_type.h> +#include <libsyncml/dev_inf_api/sml_dev_inf_prop_param.h> SmlDevInfDevTyp smlDevInfDevTypeFromString(const char *name, SmlError **error); const char *smlDevInfDevTypeToString(SmlDevInfDevTyp type, SmlError **error); @@ -110,29 +111,29 @@ /* so we can generate SyncML 1.0, 1.1 and 1.2 devinf from this structure */ /* the CTCap will be assigned to a datastore if CTType and VerCT match */ -/* PropParam stuff */ - -SmlDevInfPropParam *smlDevInfNewPropParam(SmlError **error); -void smlDevInfPropParamSetParamName( // REQUIRED - SmlDevInfPropParam *propParam, - const char *paramName); -void smlDevInfPropParamSetDataType( - SmlDevInfPropParam *propParam, - const char *dataType); -void smlDevInfPropParamSetDisplayName( - SmlDevInfPropParam *propParam, - const char *displayName); -void smlDevInfPropParamAddValEnum( - SmlDevInfPropParam *propParam, - const char *valEnum); - -char *smlDevInfPropParamGetParamName(const SmlDevInfPropParam *propParam); -char *smlDevInfPropParamGetDataType(const SmlDevInfPropParam *propParam); -char *smlDevInfPropParamGetDisplayName(const SmlDevInfPropParam *propParam); -unsigned int smlDevInfPropParamNumValEnums(const SmlDevInfPropParam *propParam); -char *smlDevInfPropParamGetNthValEnum( - const SmlDevInfPropParam *propParam, - unsigned int n); +// /* PropParam stuff */ +// +// SmlDevInfPropParam *smlDevInfNewPropParam(SmlError **error); +// void smlDevInfPropParamSetParamName( // REQUIRED +// SmlDevInfPropParam *propParam, +// const char *paramName); +// void smlDevInfPropParamSetDataType( +// SmlDevInfPropParam *propParam, +// const char *dataType); +// void smlDevInfPropParamSetDisplayName( +// SmlDevInfPropParam *propParam, +// const char *displayName); +// void smlDevInfPropParamAddValEnum( +// SmlDevInfPropParam *propParam, +// const char *valEnum); +// +// char *smlDevInfPropParamGetParamName(const SmlDevInfPropParam *propParam); +// char *smlDevInfPropParamGetDataType(const SmlDevInfPropParam *propParam); +// char *smlDevInfPropParamGetDisplayName(const SmlDevInfPropParam *propParam); +// unsigned int smlDevInfPropParamNumValEnums(const SmlDevInfPropParam *propParam); +// char *smlDevInfPropParamGetNthValEnum( +// const SmlDevInfPropParam *propParam, +// unsigned int n); /* Property stuff */ Modified: trunk/libsyncml/sml_error.h ============================================================================== --- trunk/libsyncml/sml_error.h Wed Jun 17 16:31:06 2009 (r1090) +++ trunk/libsyncml/sml_error.h Wed Jun 17 18:07:47 2009 (r1091) @@ -22,6 +22,8 @@ #ifndef _SML_ERROR_H_ #define _SML_ERROR_H_ +#include <libsyncml/syncml.h> + typedef enum { SML_ERRORCLASS_UNKNOWN = 0, SML_ERRORCLASS_SUCCESS = 2, @@ -111,6 +113,8 @@ } SmlErrorType; +#define SML_ERROR g_quark_from_static_string("Sml") + SmlError **smlErrorRef(SmlError **error); void smlErrorDeref(SmlError **error); SmlBool smlErrorIsSet(SmlError **error); Modified: trunk/libsyncml/syncml.h ============================================================================== --- trunk/libsyncml/syncml.h Wed Jun 17 16:31:06 2009 (r1090) +++ trunk/libsyncml/syncml.h Wed Jun 17 18:07:47 2009 (r1091) @@ -80,7 +80,7 @@ //typedef struct SmlDevInfContentType SmlDevInfContentType; typedef struct SmlDevInfCTCap SmlDevInfCTCap; typedef struct SmlDevInfProperty SmlDevInfProperty; -typedef struct SmlDevInfPropParam SmlDevInfPropParam; +//typedef struct SmlDevInfPropParam SmlDevInfPropParam; typedef struct SmlNotification SmlNotification; typedef struct SmlSanAlert SmlSanAlert; typedef struct SmlMapItem SmlMapItem; Modified: trunk/tests/CMakeLists.txt ============================================================================== --- trunk/tests/CMakeLists.txt Wed Jun 17 16:31:06 2009 (r1090) +++ trunk/tests/CMakeLists.txt Wed Jun 17 18:07:47 2009 (r1091) @@ -268,6 +268,15 @@ SML_ADD_TESTCASE( dev_inf_content_type_references ) SML_END_TEST() + SML_START_TEST( "DevInfPropParam" dev_inf_prop_param check_dev_inf_prop_param.c ${TEST_TARGET_LIBRARIES} ) + SML_ADD_TESTCASE( dev_inf_prop_param_create ) + SML_ADD_TESTCASE( dev_inf_prop_param_empty_set ) + SML_ADD_TESTCASE( dev_inf_prop_param_empty_get ) + SML_ADD_TESTCASE( dev_inf_prop_param_filled_set ) + SML_ADD_TESTCASE( dev_inf_prop_param_filled_get ) + SML_ADD_TESTCASE( dev_inf_prop_param_references ) + SML_END_TEST() + SML_START_TEST( "Sync" sync check_sync.c ${TEST_TARGET_LIBRARIES} ) IF ( ENABLE_HTTP ) SML_ADD_TESTCASE( sync_multi_start ) Modified: trunk/tests/check_dev_inf_content_type.c ============================================================================== --- trunk/tests/check_dev_inf_content_type.c Wed Jun 17 16:31:06 2009 (r1090) +++ trunk/tests/check_dev_inf_content_type.c Wed Jun 17 18:07:47 2009 (r1091) @@ -35,8 +35,6 @@ sml_fail_unless(ct != NULL, "%s", error?error->message:"No GError set."); g_object_unref(ct); - return; - ct = sml_dev_inf_content_type_new(NULL, "2.1", &error); sml_fail_unless(ct != NULL, "%s", error?error->message:"No GError set."); g_object_unref(ct); Added: trunk/tests/check_dev_inf_prop_param.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/tests/check_dev_inf_prop_param.c Wed Jun 17 18:07:47 2009 (r1091) @@ -0,0 +1,177 @@ +/* + * libsyncml - A syncml protocol implementation + * Copyright (C) 2009 Michael Bell <mic...@op...> + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "tests/support.h" + +#include <libsyncml/dev_inf_api/sml_dev_inf_prop_param.h> + +START_TEST (dev_inf_prop_param_create) +{ + g_type_init(); + + GError *error = NULL; + SmlDevInfPropParam *propParam = sml_dev_inf_prop_param_new(); + sml_fail_unless(propParam != NULL, NULL); + g_object_unref(propParam); +} +END_TEST + +START_TEST (dev_inf_prop_param_empty_set) +{ + g_type_init(); + + GError *error = NULL; + SmlDevInfPropParam *propParam = sml_dev_inf_prop_param_new(); + sml_fail_unless(propParam != NULL, NULL); + + sml_fail_unless(sml_dev_inf_prop_param_set_paramname(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_set_paramname(propParam, "", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_set_paramname(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + + sml_fail_unless(sml_dev_inf_prop_param_set_datatype(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_set_datatype(propParam, "", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_set_datatype(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + + sml_fail_unless(sml_dev_inf_prop_param_set_displayname(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_set_displayname(propParam, "", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_set_displayname(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + + sml_fail_unless(sml_dev_inf_prop_param_add_valenum(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_add_valenum(propParam, "", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_add_valenum(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + + g_object_unref(propParam); +} +END_TEST + +START_TEST (dev_inf_prop_param_empty_get) +{ + g_type_init(); + + GError *error = NULL; + SmlDevInfPropParam *propParam = sml_dev_inf_prop_param_new(); + sml_fail_unless(propParam != NULL, NULL); + + sml_fail_unless(sml_dev_inf_prop_param_get_paramname(propParam) == NULL, NULL); + sml_fail_unless(sml_dev_inf_prop_param_set_paramname(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_get_paramname(propParam) == NULL, NULL); + + sml_fail_unless(sml_dev_inf_prop_param_get_datatype(propParam) == NULL, NULL); + sml_fail_unless(sml_dev_inf_prop_param_set_datatype(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_get_datatype(propParam) == NULL, NULL); + + sml_fail_unless(sml_dev_inf_prop_param_get_displayname(propParam) == NULL, NULL); + sml_fail_unless(sml_dev_inf_prop_param_set_displayname(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_get_displayname(propParam) == NULL, NULL); + + sml_fail_unless(sml_dev_inf_prop_param_num_valenums(propParam) == 0, NULL); + sml_fail_unless(sml_dev_inf_prop_param_add_valenum(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_num_valenums(propParam) == 1, NULL); + sml_fail_unless(sml_dev_inf_prop_param_add_valenum(propParam, "", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_num_valenums(propParam) == 2, NULL); + sml_fail_unless(sml_dev_inf_prop_param_add_valenum(propParam, NULL, &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_num_valenums(propParam) == 3, NULL); + + g_object_unref(propParam); +} +END_TEST + +START_TEST (dev_inf_prop_param_filled_set) +{ + g_type_init(); + + GError *error = NULL; + SmlDevInfPropParam *propParam = sml_dev_inf_prop_param_new(); + sml_fail_unless(propParam != NULL, NULL); + + sml_fail_unless(sml_dev_inf_prop_param_set_paramname(propParam, "property parameter name", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_set_datatype(propParam, "property parameter data type", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_set_displayname(propParam, "property parameter display name", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_add_valenum(propParam, "property parameter first value of enumeration", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_add_valenum(propParam, "property parameter second value of enumeration", &error), "%s", error?error->message:"No GError set."); + + g_object_unref(propParam); +} +END_TEST + +START_TEST (dev_inf_prop_param_filled_get) +{ + g_type_init(); + + GError *error = NULL; + SmlDevInfPropParam *propParam = sml_dev_inf_prop_param_new(); + sml_fail_unless(propParam != NULL, NULL); + + sml_fail_unless(sml_dev_inf_prop_param_get_paramname(propParam) == NULL, NULL); + sml_fail_unless(sml_dev_inf_prop_param_set_paramname(propParam, "test_1", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_get_paramname(propParam) != NULL, NULL); + sml_fail_unless(strcmp(sml_dev_inf_prop_param_get_paramname(propParam), "test_1") == 0, NULL); + + sml_fail_unless(sml_dev_inf_prop_param_get_datatype(propParam) == NULL, NULL); + sml_fail_unless(sml_dev_inf_prop_param_set_datatype(propParam, "test_2", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_get_datatype(propParam) != NULL, NULL); + sml_fail_unless(strcmp(sml_dev_inf_prop_param_get_datatype(propParam), "test_2") == 0, NULL); + + sml_fail_unless(sml_dev_inf_prop_param_get_displayname(propParam) == NULL, NULL); + sml_fail_unless(sml_dev_inf_prop_param_set_displayname(propParam, "test_3", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_get_displayname(propParam) != NULL, NULL); + sml_fail_unless(strcmp(sml_dev_inf_prop_param_get_displayname(propParam), "test_3") == 0, NULL); + + sml_fail_unless(sml_dev_inf_prop_param_num_valenums(propParam) == 0, NULL); + + sml_fail_unless(sml_dev_inf_prop_param_add_valenum(propParam, "test_4", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_num_valenums(propParam) == 1, NULL); + sml_fail_unless(sml_dev_inf_prop_param_get_nth_valenum(propParam, 0) != NULL, NULL); + sml_fail_unless(strcmp(sml_dev_inf_prop_param_get_nth_valenum(propParam, 0), "test_4") ==0, NULL); + + sml_fail_unless(sml_dev_inf_prop_param_add_valenum(propParam, "test_5", &error), "%s", error?error->message:"No GError set."); + sml_fail_unless(sml_dev_inf_prop_param_num_valenums(propParam) == 2, NULL); + sml_fail_unless(sml_dev_inf_prop_param_get_nth_valenum(propParam, 0) != NULL, NULL); + sml_fail_unless(strcmp(sml_dev_inf_prop_param_get_nth_valenum(propParam, 0), "test_4") ==0, NULL); + sml_fail_unless(sml_dev_inf_prop_param_get_nth_valenum(propParam, 1) != NULL, NULL); + sml_fail_unless(strcmp(sml_dev_inf_prop_param_get_nth_valenum(propParam, 1), "test_5") ==0, NULL); + + g_object_unref(propParam); +} +END_TEST + +START_TEST (dev_inf_prop_param_references) +{ + g_type_init(); + + GError *error = NULL; + SmlDevInfPropParam *propParam = sml_dev_inf_prop_param_new(); + sml_fail_unless(propParam != NULL, "Cannot create SmlDevInfPropParam."); + sml_fail_unless(sml_dev_inf_prop_param_set_paramname(propParam, "test name", &error), "%s", error?error->message:"No GError set."); + + g_object_ref(propParam); + + sml_fail_unless(sml_dev_inf_prop_param_get_paramname(propParam) != NULL, "The property parameter name was not set."); + + g_object_unref(propParam); + + sml_fail_unless(sml_dev_inf_prop_param_get_paramname(propParam) != NULL, "The property parameter name is already cleaned up."); + + g_object_unref(propParam); +} +END_TEST + +@SML_TESTCASE_CODE@ + Modified: trunk/tests/check_xml_parser.c ============================================================================== --- trunk/tests/check_xml_parser.c Wed Jun 17 16:31:06 2009 (r1090) +++ trunk/tests/check_xml_parser.c Wed Jun 17 18:07:47 2009 (r1091) @@ -1235,6 +1235,7 @@ START_TEST (xml_parser_devinf) { + g_type_init(); const char *data = "<?xml version=\"1.0\"?><!DOCTYPE SyncML PUBLIC \"-//SYNCML//DTD SyncML 1.1//EN\" \"http://www.syncml.org/docs/syncml_represent_v11_20020213.dtd\"><SyncML xmlns=\"syncml:SYNCML1.1\"><SyncHdr><VerDTD>1.1</VerDTD><VerProto>SyncML/1.1</VerProto><SessionID>21</SessionID><MsgID>1</MsgID><Target><LocURI>PC Suite</LocURI></Target><Source><LocURI>IMEI:XXXX</LocURI></Source><Meta><MaxMsgSize xmlns=\"syncml:metinf\">10000</MaxMsgSize></Meta></SyncHdr><SyncBody><Put><CmdID>8</CmdID><Meta><Type xmlns=\"syncml:metinf\">application/vnd.syncml-devinf+xml</Type></Meta><Item><Source><LocURI>./devinf11</LocURI></Source><Data><DevInf xmlns=\"syncml:devinf\"><VerDTD>1.1</VerDTD><Man>NOKIA</Man><Mod>6680</Mod><SwV>3.04.37</SwV><DevID>IMEI:XXXX</DevID><DevTyp>phone</DevTyp><SupportLargeObjs/><SupportNumberOfChanges/><DataStore><SourceRef>./C\\Systemata\\Calendar</SourceRef><MaxGUIDSize>8</MaxGUIDSize><Rx-Pref><CTType>text/x-vcalendar</CTType><VerCT>1.0</VerCT></Rx-Pref><Rx><CTType>text/calendar</CTType><VerCT>2.0</VerCT></Rx><Tx-Pref><CTType>text/x-vcalendar</CTType><VerCT>1.0</VerCT></Tx-Pref><SyncCap><SyncType>1</SyncType><SyncType>2</SyncType><SyncType>3</SyncType><SyncType>4</SyncType><SyncType>5</SyncType><SyncType>6</SyncType><SyncType>7</SyncType></SyncCap></DataStore><DataStore><SourceRef>./C\\System\\\\\\Data\\Contacts.cdb</SourceRef><MaxGUIDSize>8</MaxGUIDSize><Rx-Pref><CTType>text/x-vcard</CTType><VerCT>2.1</VerCT></Rx-Pref><Rx><CTType>text/vcard</CTType><VerCT>3.0</VerCT></Rx><Tx-Pref><CTType>text/x-vcard</CTType><VerCT>2.1</VerCT></Tx-Pref><SyncCap><SyncType>1</SyncType><SyncType>2</SyncType><SyncType>3</SyncType><SyncType>4</SyncType><SyncType>5</SyncType><SyncType>6</SyncType><SyncType>7</SyncType></SyncCap></DataStore><DataStore><SourceRef>./C\\System\\Data\\Notepad.dat</SourceRef><MaxGUIDSize>8</MaxGUIDSize><Rx-Pref><CTType>text/plain</CTType><VerCT>1.0</VerCT></Rx-Pref><Rx><CTType>text/plain</CTType><VerCT>1.0</VerCT></Rx><Tx-Pref><CTType>text/plain</CTType><VerCT>1.0</VerCT></Tx-Pref><Tx><CTType>text/plain</CTType><VerCT>1.0</VerCT></Tx><SyncCap><SyncType>1</SyncType><SyncType>2</SyncType><SyncType>3</SyncType><SyncType>4</SyncType><SyncType>5</SyncType><SyncType>6</SyncType><SyncType>7</SyncType></SyncCap></DataStore><CTCap><CTType>text/x-vcalendar</CTType><PropName>BEGIN</PropName><ValEnum>VCALENDAR</ValEnum><ValEnum>VEVENT</ValEnum><ValEnum>VTODO</ValEnum><PropName>END</PropName><ValEnum>VCALENDAR</ValEnum><ValEnum>VEVENT</ValEnum><ValEnum>VTODO</ValEnum><PropName>VERSION</PropName><ValEnum>1.0</ValEnum><PropName>UID</PropName><PropName>SUMMARY</PropName><PropName>DESCRIPTION</PropName><PropName>DTEND</PropName><PropName>DTSTART</PropName><PropName>AALARM</PropName><ParamName>TYPE</ParamName><PropName>CLASS</PropName><ValEnum>PUBLIC</ValEnum><ValEnum>PRIVATE</ValEnum><ValEnum>CONFIDENTIAL</ValEnum><PropName>COMPLETED</PropName><PropName>LOCATION</PropName><PropName>DCREATED</PropName><PropName>LAST-MODIFIED</PropName><PropName>PRIORITY</PropName><PropName>STATUS</PropName><PropName>RRULE</PropName><PropName>DUE</PropName><PropName>EXDATE</PropName><PropName>X-EPOCAGENDAENTRYTYPE</PropName><CTType>text/calendar</CTType><PropName>BEGIN</PropName><ValEnum>VCALENDAR</ValEnum><ValEnum>VEVENT</ValEnum><ValEnum>VTODO</ValEnum><PropName>END</PropName><ValEnum>VCALENDAR</ValEnum><ValEnum>VEVENT</ValEnum><ValEnum>VTODO</ValEnum><PropName>VERSION</PropName><ValEnum>2.0</ValEnum><PropName>UID</PropName><PropName>SUMMARY</PropName><PropName>DESCRIPTION</PropName><PropName>DTEND</PropName><PropName>DTSTART</PropName><PropName>AALARM</PropName><ParamName>TYPE</ParamName><PropName>CLASS</PropName><ValEnum>PUBLIC</ValEnum><ValEnum>PRIVATE</ValEnum><ValEnum>CONFIDENTIAL</ValEnum><PropName>COMPLETED</PropName><PropName>LOCATION</PropName><PropName>DCREATED</PropName><PropName>LAST-MODIFIED</PropName><PropName>PRIORITY</PropName><PropName>STATUS</PropName><PropName>RRULE</PropName><PropName>DUE</PropName><PropName>EXDATE</PropName><PropName>X-EPOCAGENDAENTRYTYPE</PropName><CTType>text/x-vcard</CTType><PropName>BEGIN</PropName><ValEnum>VCARD</ValEnum><PropName>END</PropName><ValEnum>VCARD</ValEnum><PropName>VERSION</PropName><ValEnum>2.1</ValEnum><PropName>REV</PropName><PropName>N</PropName><PropName>ADR</PropName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><PropName>TEL</PropName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><ParamName>CELL</ParamName><ParamName>PAGER</ParamName><ParamName>FAX</ParamName><ParamName>VIDEO</ParamName><PropName>FN</PropName><PropName>EMAIL</PropName><ParamName>INTERNET</ParamName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><PropName>URL</PropName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><PropName>NOTE</PropName><PropName>TITLE</PropName><PropName>ORG</PropName><PropName>PHOTO</PropName><PropName>BDAY</PropName><PropName>SOUND</PropName><ParamName>X-IRMC-N</ParamName><CTType>text/vcard</CTType><PropName>BEGIN</PropName><ValEnum>VCARD</ValEnum><PropName>END</PropName><ValEnum>VCARD</ValEnum><PropName>VERSION</PropName><ValEnum>3.0</ValEnum><PropName>REV</PropName><PropName>N</PropName><PropName>ADR</PropName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><PropName>TEL</PropName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><ParamName>CELL</ParamName><ParamName>PAGER</ParamName><ParamName>FAX</ParamName><ParamName>VIDEO</ParamName><PropName>FN</PropName><PropName>EMAIL</PropName><ParamName>INTERNET</ParamName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><PropName>URL</PropName><ParamName>HOME</ParamName><ParamName>WORK</ParamName><PropName>NOTE</PropName><PropName>TITLE</PropName><PropName>ORG</PropName><PropName>PHOTO</PropName><PropName>BDAY</PropName><PropName>SOUND</PropName><ParamName>X-IRMC-N</ParamName><CTType>text/plain</CTType></CTCap></DevInf></Data></Item></Put><Final/></SyncBody></SyncML>"; SmlError *error = NULL; @@ -1293,6 +1294,7 @@ START_TEST (xml_parser_devinf_ctcap) { + g_type_init(); const char *data = "<?xml version=\"1.0\"?><!DOCTYPE SyncML PUBLIC \"-//SYNCML//DTD SyncML 1.2//EN\" \"http://www.openmobilealliance.org/tech/DTD/OMA-TS-SyncML_RepPro_DTD-V1_2.dtd\"><SyncML xmlns=\"syncml:SYNCML1.2\"><SyncHdr><VerDTD>1.2</VerDTD><VerProto>SyncML/1.2</VerProto><SessionID>1</SessionID><MsgID>1</MsgID><Target><LocURI>LibSyncML Test Suite</LocURI></Target><Source><LocURI>IMEI:xxxxxxxxxxxxxxx</LocURI></Source><Meta><MaxMsgSize xmlns=\"syncml:metinf\">6000</MaxMsgSize></Meta></SyncHdr><SyncBody><Put><CmdID>1</CmdID><Meta><Type xmlns=\"syncml:metinf\">application/vnd.syncml-devinf+wbxml</Type></Meta><Item><Source><LocURI>./devinf12</LocURI></Source><Data><DevInf xmlns=\"syncml:devinf\"><VerDTD>1.2</VerDTD><Man>SonyEricsson</Man><Mod>K850i</Mod><FwV>R1CA029</FwV><SwV>R7A</SwV><HwV>R6A</HwV><DevID>IMEI:xxxxxxxxxxxxxxx</DevID><DevTyp>phone</DevTyp><UTC/><SupportNumberOfChanges/><SupportLargeObjs/><DataStore><SourceRef>Contacts</SourceRef><DisplayName>Contacts</DisplayName><MaxGUIDSize>64</MaxGUIDSize><Rx-Pref><CTType>text/x-vcard</CTType><VerCT>2.1</VerCT></Rx-Pref><Rx><CTType>text/vcard</CTType><VerCT>3.0</VerCT></Rx><Tx-Pref><CTType>text/x-vcard</CTType><VerCT>2.1</VerCT></Tx-Pref><CTCap><CTType>text/x-vcard</CTType><VerCT>2.1</VerCT><Property><PropName>X-IRMC-LUID</PropName><Size>12</Size></Property><Property><PropName>GEO</PropName></Property><Property><PropName>PHOTO</PropName><Size>10000</Size><NoTruncate/><PropParam><ParamName>ENCODING</ParamName><ValEnum>BASE64</ValEnum></PropParam></Property><Property><PropName>BDAY</PropName><Size>8</Size></Property><Property><PropName>URL</PropName><Size>120</Size></Property><Property><PropName>TITLE</PropName><Size>30</Size></Property><Property><PropName>ORG</PropName><Size>30</Size></Property><Property><PropName>EMAIL</PropName><MaxOccur>3</MaxOccur><Size>128</Size><NoTruncate/><PropParam><ParamName>TYPE</ParamName><ValEnum>WORK</ValEnum><ValEnum>HOME</ValEnum></PropParam></Property><Property><PropName>ADR</PropName><MaxOccur>2</MaxOccur><Size>125</Size><PropParam><ParamName>TYPE</ParamName><ValEnum>WORK</ValEnum><ValEnum>HOME</ValEnum></PropParam></Property><Property><PropName>NOTE</PropName><Size>512</Size></Property><Property><PropName>TEL</PropName><MaxOccur>7</MaxOccur><Size>80</Size><NoTruncate/><PropParam><ParamName>TYPE</ParamName><ValEnum>CELL;WORK</ValEnum><ValEnum>CELL;HOME</ValEnum><ValEnum>CELL</ValEnum><ValEnum>HOME</ValEnum><ValEnum>FAX</ValEnum><ValEnum>WORK</ValEnum></PropParam></Property><Property><PropName>N</PropName><Size>60</Size></Property><Property><PropName>VERSION</PropName><ValEnum>2.1</ValEnum></Property><Property><PropName>END</PropName><ValEnum>VCARD</ValEnum></Property><Property><PropName>BEGIN</PropName><ValEnum>VCARD</ValEnum></Property></CTCap><CTCap><CTType>text/vcard</CTType><VerCT>3.0</VerCT><Property><PropName>X-IRMC-LUID</PropName><Size>12</Size></Property><Property><PropName>GEO</PropName></Property><Property><PropName>PHOTO</PropName><Size>10000</Size><NoTruncate/><PropParam><ParamName>ENCODING</ParamName><ValEnum>BASE64</ValEnum></PropParam></Property><Property><PropName>BDAY</PropName><Size>8</Size></Property><Property><PropName>URL</PropName><Size>120</Size></Property><Property><PropName>TITLE</PropName><Size>30</Size></Property><Property><PropName>ORG</PropName><Size>30</Size></Property><Property><PropName>EMAIL</PropName><MaxOccur>3</MaxOccur><Size>128</Size><NoTruncate/><PropParam><ParamName>TYPE</ParamName><ValEnum>WORK</ValEnum><ValEnum>HOME</ValEnum></PropParam></Property><Property><PropName>ADR</PropName><MaxOccur>2</MaxOccur><Size>125</Size><PropParam><ParamName>TYPE</ParamName><ValEnum>WORK</ValEnum><ValEnum>HOME</ValEnum></PropParam></Property><Property><PropName>NOTE</PropName><Size>512</Size></Property><Property><PropName>TEL</PropName><MaxOccur>7</MaxOccur><Size>80</Size><NoTruncate/><PropParam><ParamName>TYPE</ParamName><ValEnum>CELL;WORK</ValEnum><ValEnum>CELL;HOME</ValEnum><ValEnum>CELL</ValEnum><ValEnum>HOME</ValEnum><ValEnum>FAX</ValEnum><ValEnum>WORK</ValEnum></PropParam></Property><Property><PropName>N</PropName><Size>60</Size></Property><Property><PropName>VERSION</PropName><ValEnum>3.0</ValEnum></Property><Property><PropName>END</PropName><ValEnum>VCARD</ValEnum></Property><Property><PropName>BEGIN</PropName><ValEnum>VCARD</ValEnum></Property></CTCap><DSMem><MaxID>5000</MaxID></DSMem><SyncCap><SyncType>1</SyncType><SyncType>2</SyncType><SyncType>4</SyncType><SyncType>6</SyncType><SyncType>7</SyncType></SyncCap></DataStore><DataStore><SourceRef>Calendar</SourceRef><DisplayName>Calendar</DisplayName><MaxGUIDSize>64</MaxGUIDSize><Rx-Pref><CTType>text/x-vcalendar</CTType><VerCT>1.0</VerCT></Rx-Pref><Tx-Pref><CTType>text/x-vcalendar</CTType><VerCT>1.0</VerCT></Tx-Pref><CTCap><CTType>text/x-vcalendar</CTType><VerCT>1.0</VerCT><Property><PropName>X-IRMC-LUID</PropName><Size>12</Size></Property><Property><PropName>X-SONYERICSSON-DST</PropName></Property><Property><PropName>DAYLIGHT</PropName></Property><Property><PropName>LAST-MODIFIED</PropName></Property><Property><PropName>EXDATE</PropName></Property><Property><PropName>RRULE</PropName><Size>50</Size></Property><Property><PropName>CLASS</PropName><ValEnum>PUBLIC</ValEnum></Property><Property><PropName>CATEGORIES</PropName><ValEnum>BIRTHDAY</ValEnum><ValEnum>HOLIDAY</ValEnum><ValEnum>VACATION</ValEnum><ValEnum>TRAVEL</ValEnum><ValEnum>PHONE CALL</ValEnum><ValEnum>MISCELLANEOUS</ValEnum><ValEnum>MEETING</ValEnum></Property><Property><PropName>AALARM</PropName></Property><Property><PropName>DALARM</PropName></Property><Property><PropName>DTEND</PropName></Property><Property><PropName>DTSTART</PropName></Property><Property><PropName>DESCRIPTION</PropName><Size>512</Size></Property><Property><PropName>LOCATION</PropName... [truncated message content] |