[meego-commits] 7787: Changes to Trunk/libaccounts-glib
Rolla Selbak
no_reply at build.meego.com
Fri Sep 24 06:31:40 UTC 2010
Hi,
I have made the following changes to libaccounts-glib in project Trunk. Please review and accept ASAP.
Thank You,
Rolla Selbak
[This message was auto-generated]
---
Request #7787:
submit: Trunk:Testing/libaccounts-glib(r3) -> Trunk/libaccounts-glib
Message:
Move to Trunk
State: new 2010-09-23T23:31:39 rolla
Comment: None
changes files:
--------------
--- libaccounts-glib.changes
+++ libaccounts-glib.changes
@@ -0,0 +1,5 @@
+* Wed Sep 15 2010 Fathi Boudra <fathi.boudra at nokia.com> - 0.52
+- Update to 0.52 (BMC#7258)
+- Add libaccounts-glib-tests package
+- Clean up packaging
+
@@ -11 +16 @@
-- First release on top of fedora 12
\ No newline at end of file
+- First release on top of fedora 12
old:
----
libaccounts-glib-0.45.tar.gz
new:
----
libaccounts-glib-0.52.tar.gz
spec files:
-----------
--- libaccounts-glib.spec
+++ libaccounts-glib.spec
@@ -1,75 +1,84 @@
Name: libaccounts-glib
-Version: 0.45
+Version: 0.52
Release: 1
-Group: System/Libraries
-Summary: Nokia Maemo Accounts base library
License: LGPLv2.1
-URL: http://gitorious.org/accounts-sso/accounts-glib
+Summary: Nokia Maemo Accounts base library
+Url: http://gitorious.org/accounts-sso/accounts-glib
+Group: System/Libraries
Source0: %{name}-%{version}.tar.gz
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: automake
-BuildRequires: pkgconfig
BuildRequires: gtk-doc
-BuildRequires: pkgconfig(glib-2.0)
-BuildRequires: pkgconfig(sqlite3)
+BuildRequires: pkgconfig
+BuildRequires: pkgconfig(check) >= 0.9.4
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(dbus-glib-1)
+BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(libxml-2.0)
-BuildRequires: pkgconfig(check) >= 0.9.4
+BuildRequires: pkgconfig(sqlite3)
%description
%{summary}.
-%files
-%defattr(-,root,root,-)
-%doc README COPYING
-%{_libdir}/lib*.so.*
-%{_datadir}/backup-framework/applications/*.conf
-#exclude tests for now
-%exclude %{_bindir}/*test*
-%exclude %{_datadir}/libaccounts-glib0-test
-%exclude /usr/doc/reference
-
%package devel
Summary: Development files for %{name}
Group: Development/Libraries
-Requires: %{name} = %{version}-%{release}
-Requires: glib2-devel
+Requires: %{name} = %{version}
+Requires: pkgconfig(glib-2.0)
Requires: pkgconfig
%description devel
-The %{name}-devel package contains libraries and header files for
-developing applications that use %{name}.
+The %{name}-devel package contains libraries and header files for developing
+applications that use %{name}.
-%files devel
-%defattr(-,root,root,-)
-%{_libdir}/*.so
-%exclude %{_libdir}/*.la
-%{_libdir}/pkgconfig/*
-%{_includedir}/*
+%package tests
+Summary: Tests for %{name}
+Group: Development/Libraries
+Requires: %{name} = %{version}
+
+%description tests
+This package contains %{name} tests.
%prep
%setup -q
%build
gtkdocize
-autoreconf -i --force
-
-%configure \
- --disable-static \
- --disable-gtk-doc
-
+autoreconf -vfi
+%configure --disable-static --disable-gtk-doc
make %{?_smp_mflags}
-
%install
-rm -rf %{buildroot}
-make install DESTDIR=%{buildroot}
-
-
-%clean
-rm -rf %{buildroot}
+%make_install
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
+
+%files
+%defattr(-,root,root,-)
+%doc README COPYING
+%{_libdir}/libaccounts-glib.so.*
+%{_datadir}/backup-framework/applications/accounts.conf
+
+%files devel
+%defattr(-,root,root,-)
+%{_includedir}/libaccounts-glib/ag-account.h
+%{_includedir}/libaccounts-glib/ag-errors.h
+%{_includedir}/libaccounts-glib/ag-manager.h
+%{_includedir}/libaccounts-glib/ag-provider.h
+%{_includedir}/libaccounts-glib/ag-service-type.h
+%{_includedir}/libaccounts-glib/ag-service.h
+%{_libdir}/libaccounts-glib.so
+%{_libdir}/pkgconfig/libaccounts-glib.pc
+
+%files tests
+%defattr(-,root,root,-)
+%{_bindir}/accounts-glib-test.sh
+%{_bindir}/accounts-glib-testsuite
+%{_bindir}/test-process
+%{_datadir}/libaccounts-glib0-test/e-mail.service-type
+%{_datadir}/libaccounts-glib0-test/MyProvider.provider
+%{_datadir}/libaccounts-glib0-test/MyService.service
+%{_datadir}/libaccounts-glib0-test/OtherService.service
+%{_datadir}/libaccounts-glib0-test/tests.xml
+%exclude %{_prefix}/doc/reference
other changes:
--------------
++++++ libaccounts-glib-0.45.tar.gz -> libaccounts-glib-0.52.tar.gz
--- configure.ac
+++ configure.ac
@@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
-AC_INIT(libaccounts-glib, 0.45)
+AC_INIT(libaccounts-glib, 0.52)
AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
AM_CONFIG_HEADER(config.h)
--- libaccounts-glib/ag-account.c
+++ libaccounts-glib/ag-account.c
@@ -681,6 +681,14 @@
"FROM Accounts WHERE id = %u", account->id);
rows = _ag_manager_exec_query (priv->manager,
(AgQueryCallback)got_account, priv, sql);
+ /* if the query succeeded but we didn't get a row, we must set the
+ * NOT_FOUND error */
+ if (_ag_manager_get_last_error (priv->manager) == NULL && rows != 1)
+ {
+ GError *error = g_error_new (AG_ERRORS, AG_ERROR_ACCOUNT_NOT_FOUND,
+ "Account %u not found in DB", account->id);
+ _ag_manager_take_error (priv->manager, error);
+ }
return rows == 1;
}
@@ -1386,10 +1394,27 @@
priv = account->priv;
g_return_val_if_fail (AG_IS_ACCOUNT (account), NULL);
- sqlite3_snprintf (sizeof (sql), sql,
- "SELECT DISTINCT Services.name FROM Services "
- "JOIN Settings ON Settings.service = Services.id "
- "WHERE Settings.key='enabled' AND Settings.value='1';");
+ const char *service_type = ag_manager_get_service_type(priv->manager);
+
+ if (service_type != NULL)
+ sqlite3_snprintf (sizeof (sql), sql,
+ "SELECT DISTINCT Services.name FROM Services "
+ "JOIN Settings ON Settings.service = Services.id "
+ "WHERE Settings.key='enabled' "
+ "AND Settings.value='1' "
+ "AND Settings.account='%d' "
+ "AND Services.type = '%s';",
+ account->id,
+ service_type);
+ else
+ sqlite3_snprintf (sizeof (sql), sql,
+ "SELECT DISTINCT Services.name FROM Services "
+ "JOIN Settings ON Settings.service = Services.id "
+ "WHERE Settings.key='enabled' "
+ "AND Settings.value='1' "
+ "AND Settings.account='%d';",
+ account->id);
+
_ag_manager_exec_query (priv->manager, (AgQueryCallback)add_name_to_list,
&list, sql);
--- libaccounts-glib/ag-errors.h
+++ libaccounts-glib/ag-errors.h
@@ -37,6 +37,8 @@
AG_ERROR_DB,
AG_ERROR_DISPOSED,
AG_ERROR_DELETED,
+ AG_ERROR_DB_LOCKED,
+ AG_ERROR_ACCOUNT_NOT_FOUND,
} AgError;
G_END_DECLS
--- libaccounts-glib/ag-internals.h
+++ libaccounts-glib/ag-internals.h
@@ -92,6 +92,10 @@
gint _ag_manager_exec_query (AgManager *manager,
AgQueryCallback callback, gpointer user_data,
const gchar *sql);
+G_GNUC_INTERNAL
+void _ag_manager_take_error (AgManager *manager, GError *error);
+G_GNUC_INTERNAL
+const GError *_ag_manager_get_last_error (AgManager *manager);
struct _AgService {
/*< private >*/
@@ -101,6 +105,7 @@
gchar *type;
gchar *provider;
gchar *icon_name;
+ gchar *i18n_domain;
gchar *file_data;
gsize type_data_offset;
gint id;
@@ -126,6 +131,7 @@
struct _AgProvider {
/*< private >*/
gint ref_count;
+ gchar *i18n_domain;
gchar *name;
gchar *display_name;
gchar *file_data;
--- libaccounts-glib/ag-manager.c
+++ libaccounts-glib/ag-manager.c
@@ -93,8 +93,11 @@
/* D-Bus object paths we are listening to */
GPtrArray *object_paths;
+ GError *last_error;
+
guint db_timeout;
+ guint abort_on_db_timeout : 1;
guint is_disposed : 1;
gchar *service_type;
@@ -126,6 +129,35 @@
static void store_cb_data_free (StoreCbData *sd);
static void account_weak_notify (gpointer userdata, GObject *dead_account);
+static void
+set_error_from_db (AgManager *manager)
+{
+ AgManagerPrivate *priv = manager->priv;
+ AgError code;
+ GError *error;
+
+ switch (sqlite3_errcode (priv->db))
+ {
+ case SQLITE_DONE:
+ case SQLITE_OK:
+ _ag_manager_take_error (manager, NULL);
+ return;
+ case SQLITE_BUSY:
+ code = AG_ERROR_DB_LOCKED;
+ if (priv->abort_on_db_timeout)
+ g_error ("Accounts DB timeout: causing application to abort.");
+ break;
+ default:
+ code = AG_ERROR_DB;
+ break;
+ }
+
+ error = g_error_new (AG_ERRORS, code, "SQLite error %d: %s",
+ sqlite3_errcode (priv->db),
+ sqlite3_errmsg (priv->db));
+ _ag_manager_take_error (manager, error);
+}
+
static gboolean
timed_unref_account (gpointer account)
{
@@ -320,8 +352,14 @@
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
- DEBUG_INFO ("path = %s, time = %lu-%lu",
- dbus_message_get_path (msg), ts.tv_sec, ts.tv_nsec);
+ DEBUG_INFO ("path = %s, time = %lu-%lu (%p)",
+ dbus_message_get_path (msg), ts.tv_sec, ts.tv_nsec,
+ manager);
+
+ /* Do not process the same signal more than once. */
+ if (check_signal_processed (priv, &ts))
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
for (list = priv->emitted_signals; list != NULL; list = list->next)
{
EmittedSignalData *esd = list->data;
@@ -343,9 +381,6 @@
}
}
- if (check_signal_processed (priv, &ts))
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
-
/* we must mark our emitted signals for reprocessing, because the current
* signal might modify some of the fields that were previously modified by
* us.
@@ -806,10 +841,10 @@
int ret;
error = NULL;
- ret = sqlite3_exec (db, "PRAGMA synchronous = 0", NULL, NULL, &error);
+ ret = sqlite3_exec (db, "PRAGMA synchronous = 1", NULL, NULL, &error);
if (ret != SQLITE_OK)
{
- g_warning ("%s: couldn't set asynchronous mode (%s)",
+ g_warning ("%s: couldn't set synchronous mode (%s)",
G_STRFUNC, error);
sqlite3_free (error);
}
@@ -1184,6 +1219,9 @@
}
g_free (priv->service_type);
+ if (priv->last_error)
+ g_error_free (priv->last_error);
+
G_OBJECT_CLASS (ag_manager_parent_class)->finalize (object);
}
@@ -1320,6 +1358,27 @@
return list;
}
+void
+_ag_manager_take_error (AgManager *manager, GError *error)
+{
+ AgManagerPrivate *priv;
+
+ g_return_if_fail (AG_IS_MANAGER (manager));
+ priv = manager->priv;
+
+ if (priv->last_error)
+ g_free (priv->last_error);
+ priv->last_error = error;
+}
+
+const GError *
+_ag_manager_get_last_error (AgManager *manager)
+{
+ g_return_val_if_fail (AG_IS_MANAGER (manager), NULL);
+
+ return manager->priv->last_error;
+}
+
/**
* ag_manager_list:
* @manager: the #AgManager.
@@ -1446,11 +1505,30 @@
* @account_id.
*
* Returns: an #AgAccount, on which the client must call g_object_unref()
- * when it's done with it.
+ * when it's done with it, or %NULL if an error occurs.
*/
AgAccount *
ag_manager_get_account (AgManager *manager, AgAccountId account_id)
{
+ return ag_manager_load_account (manager, account_id, NULL);
+}
+
+/**
+ * ag_manager_load_account:
+ * @manager: the #AgManager.
+ * @account_id: the #AgAccountId of the account.
+ * @error: pointer to a #GError, or %NULL.
+ *
+ * Instantiates the object representing the account identified by
+ * @account_id.
+ *
+ * Returns: an #AgAccount, on which the client must call g_object_unref()
+ * when it's done with it, or %NULL if an error occurs.
+ */
+AgAccount *
+ag_manager_load_account (AgManager *manager, AgAccountId account_id,
+ GError **error)
+{
AgManagerPrivate *priv;
AgAccount *account;
@@ -1474,6 +1552,13 @@
g_hash_table_insert (priv->accounts, GUINT_TO_POINTER (account_id),
account);
}
+ else if (priv->last_error != NULL)
+ {
+ g_set_error_literal (error,
+ priv->last_error->domain,
+ priv->last_error->code,
+ priv->last_error->message);
+ }
return account;
}
@@ -1794,6 +1879,7 @@
}
default:
+ set_error_from_db (manager);
g_warning ("%s: runtime error while executing \"%s\": %s",
G_STRFUNC, sql, sqlite3_errmsg (db));
sqlite3_finalize (stmt);
@@ -1902,6 +1988,34 @@
}
/**
+ * ag_manager_set_abort_on_db_timeout:
+ * @manager: the #AgManager.
+ * @abort: whether to abort when a DB timeout occurs.
+ *
+ * Tells libaccounts whether it should make the client application abort when
+ * a timeout error occurs. The default is %FALSE.
+ */
+void
+ag_manager_set_abort_on_db_timeout (AgManager *manager, gboolean abort)
+{
+ g_return_if_fail (AG_IS_MANAGER (manager));
+ manager->priv->abort_on_db_timeout = abort;
+}
+
+/**
+ * ag_manager_get_abort_on_db_timeout:
+ * @manager: the #AgManager.
+ *
+ * Returns: whether the library will abort when a timeout error occurs.
+ */
+gboolean
+ag_manager_get_abort_on_db_timeout (AgManager *manager)
+{
+ g_return_val_if_fail (AG_IS_MANAGER (manager), FALSE);
+ return manager->priv->abort_on_db_timeout;
+}
+
+/**
* ag_manager_load_service_type:
* @manager: the #AgManager.
* @service_type: the name of the service type.
--- libaccounts-glib/ag-manager.h
+++ libaccounts-glib/ag-manager.h
@@ -80,6 +80,9 @@
AgAccount *ag_manager_get_account (AgManager *manager,
AgAccountId account_id);
+AgAccount *ag_manager_load_account (AgManager *manager,
+ AgAccountId account_id,
+ GError **error);
AgAccount *ag_manager_create_account (AgManager *manager,
const gchar *provider_name);
@@ -99,6 +102,8 @@
void ag_manager_set_db_timeout (AgManager *manager, guint timeout_ms);
guint ag_manager_get_db_timeout (AgManager *manager);
+void ag_manager_set_abort_on_db_timeout (AgManager *manager, gboolean abort);
+gboolean ag_manager_get_abort_on_db_timeout (AgManager *manager);
AgServiceType *ag_manager_load_service_type (AgManager *manager,
const gchar *service_type);
--- libaccounts-glib/ag-provider.c
+++ libaccounts-glib/ag-provider.c
@@ -167,9 +167,13 @@
ok = _ag_xml_dup_element_data (reader, &provider->display_name);
/* that's the only thing we are interested of: we can stop the
* parsing now. */
- return TRUE;
}
- else
+ else if (strcmp (name, "translations") == 0)
+ {
+ ok = _ag_xml_dup_element_data (reader,
+ &provider->i18n_domain);
+ }
+ else
ok = TRUE;
if (G_UNLIKELY (!ok)) return FALSE;
@@ -184,16 +188,20 @@
read_provider_file (xmlTextReaderPtr reader, AgProvider *provider)
{
const xmlChar *name;
- int ret;
+ int ret, type;
ret = xmlTextReaderRead (reader);
while (ret == 1)
{
- name = xmlTextReaderConstName (reader);
- if (G_LIKELY (name &&
- strcmp ((const gchar *)name, "provider") == 0))
+ type = xmlTextReaderNodeType (reader);
+ if (type == XML_READER_TYPE_ELEMENT)
{
- return parse_provider (reader, provider);
+ name = xmlTextReaderConstName (reader);
+ if (G_LIKELY (name &&
+ strcmp ((const gchar *)name, "provider") == 0))
+ {
+ return parse_provider (reader, provider);
+ }
}
ret = xmlTextReaderNext (reader);
@@ -325,6 +333,20 @@
}
/**
+ * ag_provider_get_i18n_domain:
+ * @provider: the #AgProvider.
+ *
+ * Returns: the translation domain.
+ */
+const gchar *
+ag_provider_get_i18n_domain (AgProvider *provider)
+{
+ g_return_val_if_fail (provider != NULL, NULL);
+ return provider->i18n_domain;
+}
+
+
+/**
* ag_provider_get_display_name:
* @provider: the #AgProvider.
*
@@ -405,6 +427,7 @@
if (provider->ref_count == 0)
{
g_free (provider->name);
+ g_free (provider->i18n_domain);
g_free (provider->display_name);
g_free (provider->file_data);
g_slice_free (AgProvider, provider);
--- libaccounts-glib/ag-provider.h
+++ libaccounts-glib/ag-provider.h
@@ -33,6 +33,7 @@
const gchar *ag_provider_get_name (AgProvider *provider);
const gchar *ag_provider_get_display_name (AgProvider *provider);
+const gchar *ag_provider_get_i18n_domain (AgProvider *provider);
void ag_provider_get_file_contents (AgProvider *provider,
const gchar **contents);
AgProvider *ag_provider_ref (AgProvider *provider);
--- libaccounts-glib/ag-service.c
+++ libaccounts-glib/ag-service.c
@@ -206,6 +206,11 @@
{
ok = _ag_xml_dup_element_data (reader, &service->icon_name);
}
+ else if (strcmp (name, "translations") == 0)
+ {
+ ok = _ag_xml_dup_element_data (reader, &service->i18n_domain);
+ }
+
else if (strcmp (name, "template") == 0)
{
ok = parse_template (reader, service);
@@ -481,7 +486,22 @@
return service->icon_name;
}
+/**
+ * ag_service_get_i18n_domain:
+ * @service: the #AgService.
+ *
+ * Returns: the name of the translation catalog.
+ */
+const gchar *
+ag_service_get_i18n_domain (AgService *service)
+{
+ g_return_val_if_fail (service != NULL, NULL);
+
+ if (!service->file_data)
+ _ag_service_load_from_file (service);
+ return service->i18n_domain;
+}
/**
* ag_service_get_file_contents:
@@ -559,7 +579,8 @@
g_free (service->name);
g_free (service->display_name);
g_free (service->icon_name);
- g_free (service->type);
+ g_free (service->i18n_domain);
+ g_free (service->type);
g_free (service->provider);
g_free (service->file_data);
if (service->default_settings)
--- libaccounts-glib/ag-service.h
+++ libaccounts-glib/ag-service.h
@@ -36,6 +36,7 @@
const gchar *ag_service_get_service_type (AgService *service);
const gchar *ag_service_get_provider (AgService *service);
const gchar *ag_service_get_icon_name (AgService *service);
+const gchar *ag_service_get_i18n_domain (AgService *service);
void ag_service_get_file_contents (AgService *service,
const gchar **contents,
gsize *data_offset);
--- tests/accounts-glib-test.sh.in
+++ tests/accounts-glib-test.sh.in
@@ -5,6 +5,7 @@
datadir=@datadir@
export AG_SERVICES=@testdatadir@/
+export AG_SERVICE_TYPES=@testdatadir@/
export AG_PROVIDERS=@testdatadir@/
export ACCOUNTS=/tmp/
--- tests/check_ag.c
+++ tests/check_ag.c
@@ -325,6 +325,7 @@
const gboolean check_automatically = TRUE;
const gchar *display_name = "My test account";
AgSettingSource source;
+ GError *error = NULL;
g_type_init ();
@@ -416,9 +417,17 @@
g_object_unref (manager);
manager = ag_manager_new ();
- account = ag_manager_get_account (manager, account_id);
+
+ /* first, try to load an unexisting account */
+ account = ag_manager_load_account (manager, account_id + 2, &error);
+ fail_unless (account == NULL, "Loading a non-existing account!");
+ fail_unless (error != NULL, "Error is NULL");
+ g_clear_error (&error);
+
+ account = ag_manager_load_account (manager, account_id, &error);
fail_unless (AG_IS_ACCOUNT (account),
"Couldn't load account %u", account_id);
+ fail_unless (error == NULL, "Error is not NULL");
provider_name = ag_account_get_provider_name (account);
fail_unless (g_strcmp0 (provider_name, PROVIDER) == 0,
@@ -1802,16 +1811,42 @@
gint n_services;
AgService *service1, *service2;
+ /*
+ * Two additional managers:
+ * manager2 : e-mail type
+ * manager3 : sharing type
+ * */
+ AgManager *manager2, *manager3;
+
+ /*
+ * Same instances of account:
+ * account2: from e-mail type manager
+ * account3: from sharing manager
+ * */
+ AgAccount *account2, *account3;
+
+ /*
+ * new account for the same manager
+ * */
+ AgAccount *account4;
+
g_type_init ();
/* delete the database */
g_unlink (db_filename);
+
manager = ag_manager_new ();
+ fail_unless (manager != NULL);
+
+ manager2 = ag_manager_new_for_service_type ("e-mail");
+ fail_unless (manager2 != NULL);
+
+ manager3 = ag_manager_new_for_service_type ("sharing");
+ fail_unless (manager3 != NULL);
account = ag_manager_create_account (manager, "maemo");
fail_unless (account != NULL);
-
service1 = ag_manager_get_service (manager, "MyService");
fail_unless (service1 != NULL);
service2 = ag_manager_get_service (manager, "OtherService");
@@ -1827,9 +1862,9 @@
ag_account_store (account, account_store_now_cb, TEST_STRING);
services = ag_account_list_enabled_services (account);
-
n_services = g_list_length (services);
fail_unless (n_services == 1, "Got %d services, expecting 1", n_services);
+ ag_manager_list_free (services);
/* 2 services, 2 enabled */
ag_account_select_service (account, service2);
@@ -1840,15 +1875,42 @@
n_services = g_list_length (services);
fail_unless (n_services == 2, "Got %d services, expecting 2", n_services);
+ ag_manager_list_free (services);
+
+ account2 = ag_manager_get_account (manager2, account->id);
+ fail_unless (account2 != NULL);
+
+ account3 = ag_manager_get_account (manager3, account->id);
+ fail_unless (account3 != NULL);
+
+ services = ag_account_list_enabled_services (account2);
+
+ n_services = g_list_length (services);
+ fail_unless (n_services == 1, "Got %d services, expecting 1", n_services);
+ ag_manager_list_free (services);
+
+ services = ag_account_list_enabled_services (account3);
+
+ n_services = g_list_length (services);
+ fail_unless (n_services == 1, "Got %d services, expecting 1", n_services);
+ ag_manager_list_free (services);
/* 2 services, 0 enabled */
+ account4 = ag_manager_create_account (manager, "maemo");
+ fail_unless (account4 != NULL);
+
ag_account_select_service (account, service1);
ag_account_set_enabled (account, FALSE);
ag_account_select_service (account, service2);
ag_account_set_enabled (account, FALSE);
+
ag_account_store (account, account_store_now_cb, TEST_STRING);
+ ag_account_select_service (account4, service2);
+ ag_account_set_enabled (account4, TRUE);
+ ag_account_store (account4, account_store_now_cb, TEST_STRING);
+
services = ag_account_list_enabled_services (account);
n_services = g_list_length (services);
@@ -1859,6 +1921,12 @@
ag_service_unref (service2);
ag_manager_list_free (services);
+ g_object_unref (account2);
+ g_object_unref (account3);
+ g_object_unref (account4);
+ g_object_unref (manager2);
+ g_object_unref (manager3);
+
end_test ();
}
END_TEST
More information about the MeeGo-commits
mailing list