--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libtelepathy/tsrc/src/telepathygabbleadddeletecontact.cpp Tue Feb 02 01:10:06 2010 +0200
@@ -0,0 +1,316 @@
+/*
+* Copyright (c) 2008 - 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Used for Contact management(add/delete etc) related Test Cases
+*
+*/
+
+
+
+
+//Include files
+#include <e32err.h>
+#include <e32const.h>
+#include <e32base.h>
+#include <glib.h>
+#include <StifLogger.h>
+
+#include "telepathygabbleutils.h"
+#include "telepathygabbleadddeletecontact.h"
+#include "telepathygabblelogintest.h"
+
+
+
+//-----------------------------------------------------------------------------
+// function_name : CTelepathyGabbleAddDeleteContact
+// description : constructor
+//-----------------------------------------------------------------------------
+CTelepathyGabbleAddDeleteContact::CTelepathyGabbleAddDeleteContact()
+{
+}
+
+//-----------------------------------------------------------------------------
+// function_name : ConstructL
+// description : constructor
+//-----------------------------------------------------------------------------
+void CTelepathyGabbleAddDeleteContact::ConstructL()
+{
+ //do nothing
+}
+
+//-----------------------------------------------------------------------------
+// function_name : NewL
+// description : constructor
+//-----------------------------------------------------------------------------
+CTelepathyGabbleAddDeleteContact* CTelepathyGabbleAddDeleteContact::NewL()
+{
+ CTelepathyGabbleAddDeleteContact* self = new(ELeave) CTelepathyGabbleAddDeleteContact;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+}
+
+// Destructor
+//-----------------------------------------------------------------------------
+// function_name : ~CTelepathyGabbleAddDeleteContact
+// description : Destructor
+//-----------------------------------------------------------------------------
+CTelepathyGabbleAddDeleteContact::~CTelepathyGabbleAddDeleteContact()
+{
+
+}
+
+//-----------------------------------------------------------------------------
+// function_name : add_contact
+// description : adding a contact
+//-----------------------------------------------------------------------------
+TInt CTelepathyGabbleAddDeleteContact::add_contact ( const gchar *contact_id,
+ const gchar *message,
+ CTestData* aTestData )
+{
+ guint handle;
+ GArray *handles = NULL;
+ //gpointer userdata = (gpointer)contact_id;
+
+ //first check the contact_id.
+ if( contact_id == NULL )
+ {
+ return CTestData::EADD_FAIL;
+ }
+
+ aTestData->SetAddDeleteContactStatus(CTestData::EADD_FAIL);
+
+ //acess the utils class function to get the contact handle.
+ handle = CTelepathyGabbleUtils::get_handle_from_contact ( contact_id, aTestData );
+
+ if ( handle == KErrNotFound )
+ {
+ return CTestData::EADD_FAIL;
+ }
+
+ handles = g_array_new (FALSE, FALSE, sizeof (guint));
+
+ g_array_append_val (handles, handle);
+
+ DBusGProxy *group_iface_subscribe = aTestData->GetGroupSubscribeInterface();
+ DBusGProxy *group_iface_publish = aTestData->GetGroupPublishInterface();
+ DBusGProxy *group_iface_known = aTestData->GetGroupKnownInterface();
+
+
+ //register the callback, commented for now.
+ dbus_g_proxy_connect_signal (group_iface_subscribe, "MembersChanged",
+ G_CALLBACK (roster_members_changed_cb ),
+ aTestData, NULL);
+
+ dbus_g_proxy_connect_signal (group_iface_publish, "MembersChanged",
+ G_CALLBACK (roster_members_changed_cb ),
+ aTestData, NULL);
+
+
+ dbus_g_proxy_connect_signal (group_iface_known, "MembersChanged",
+ G_CALLBACK (roster_members_changed_cb ),
+ aTestData, NULL);
+
+
+ tp_chan_iface_group_add_members_async ( group_iface_subscribe, handles, message, add_contact_cb, aTestData );
+
+ //Start the main loop
+ g_main_loop_run (aTestData->GetMainLoop());
+
+ g_array_free (handles, TRUE);
+
+ //return the status was updated in the callback.
+ return aTestData->GetAddDeleteContactStatus();
+}
+
+
+//-----------------------------------------------------------------------------
+// function_name : remove_contact
+// description : remove the contact.
+//-----------------------------------------------------------------------------
+TInt CTelepathyGabbleAddDeleteContact::remove_contact ( const gchar *contact_id,
+ const gchar *message,
+ CTestData* aTestData
+ )
+{
+
+ guint handle;
+ GArray *handles = NULL;
+
+ //first check the contact_id.
+ if( contact_id == NULL )
+ {
+ return CTestData::EDELETE_FAIL;
+ }
+
+ aTestData->SetAddDeleteContactStatus( CTestData::EDELETE_FAIL );
+
+ handle = CTelepathyGabbleUtils::get_handle_from_contact ( contact_id, aTestData);
+
+ if ( handle == KErrNotFound )
+ {
+ return CTestData::EDELETE_FAIL;
+ }
+
+
+ DBusGProxy *group_iface_known = aTestData->GetGroupKnownInterface();
+
+ handles = g_array_new (FALSE, FALSE, sizeof (guint));
+
+ g_array_append_val (handles, handle);
+
+ tp_chan_iface_group_remove_members_async ( group_iface_known, handles, message, remove_contact_cb, aTestData );
+
+ //Start the main loop
+ g_main_loop_run (aTestData->GetMainLoop());
+
+ g_array_free (handles, TRUE);
+
+ return (aTestData->GetAddDeleteContactStatus());
+}
+
+
+//-----------------------------------------------------------------------------
+// function_name : add_contact_cb
+// description :Callback for add contact
+//-----------------------------------------------------------------------------
+void CTelepathyGabbleAddDeleteContact::add_contact_cb( DBusGProxy* /*proxy*/, GError* error, gpointer userdata )
+{
+ CTestData* testdata = static_cast<CTestData*> (userdata);
+ if ( !error )
+ {
+ testdata->SetAddDeleteContactStatus(CTestData::EADD_SUCCESS);
+ }
+ else
+ {
+ testdata->SetAddDeleteContactStatus(CTestData::EADD_FAIL);
+
+ }
+
+ //Quit the main loop
+ g_main_loop_quit(testdata->GetMainLoop());
+
+}
+
+//-----------------------------------------------------------------------------
+// function_name : remove_contact_cb
+// description : Callback for remove contact.
+//-----------------------------------------------------------------------------
+
+void CTelepathyGabbleAddDeleteContact::remove_contact_cb( DBusGProxy* proxy, GError *error, gpointer userdata )
+{
+
+ CTestData* testdata = static_cast<CTestData*> (userdata);
+ if ( error )
+ {
+ testdata->GetStifLogger()->Log( _L("CTelepathyGabbleTest::deleting already removed contact,it should give some error \n") );
+ testdata->SetAddDeleteContactStatus( CTestData::EDELETE_FAIL );
+ }
+ else
+ {
+ testdata->GetStifLogger()->Log( _L("CTelepathyGabbleTest::deleted successfully \n") );
+ testdata->SetAddDeleteContactStatus( CTestData::EDELETE_SUCCESS );
+ }
+ //Quit the main loop started in Delete contact.
+ g_main_loop_quit(testdata->GetMainLoop());
+}
+
+//-----------------------------------------------------------------------------
+// function_name : roster_members_changed_cb
+// description : Callback for change in the contacts.
+//-----------------------------------------------------------------------------
+
+void CTelepathyGabbleAddDeleteContact::roster_members_changed_cb (DBusGProxy* /*group_iface*/,
+ gchar* /*message */,
+ GArray *added,
+ GArray *removed,
+ GArray *local_pending,
+ GArray *remote_pending,
+ guint /*actor*/,
+ guint /*reason*/,
+ gpointer userdata)
+{
+
+ gchar **contact_name = NULL;
+
+
+
+ CTestData* atestData = static_cast<CTestData*> (userdata);
+
+ //TInt return_value = KErrNone;
+
+
+
+ if (added->len > 0)
+ {
+
+ //this is not working, use async api later
+ /*tp_conn_inspect_handles( DBUS_G_PROXY(atestData->GetTpConn()),
+ TP_CONN_HANDLE_TYPE_CONTACT ,added,
+ &contact_name,NULL);*/
+ if(contact_name)
+ {
+ //The contact has been added.
+ // Must verify this against the contact_name for which the request was sent?
+ // This will depend on whether we will hit callback for one contact at a time
+ // or multiple callbacks for all contacts at a single time. ?
+ //return_value = KErrNone;
+ //atestData->SetAddDeleteContactStatus(CTestData::EADD_SUCCESS);
+
+ }
+ }
+ if (removed->len > 0)
+ {
+ /*tp_conn_inspect_handles( DBUS_G_PROXY(atestData->GetTpConn()),
+ TP_CONN_HANDLE_TYPE_CONTACT ,removed,
+ &contact_name,NULL);*/
+ if(contact_name)
+ {
+ //The contact_name was deleted
+ //Must verify this against the contact_name for which the request was sent?
+ //return_value == KErrNone;
+ }
+ }
+ if (local_pending->len > 0)
+ {
+ /*tp_conn_inspect_handles( DBUS_G_PROXY(atestData->GetTpConn()),
+ TP_CONN_HANDLE_TYPE_CONTACT ,local_pending,
+ &contact_name,NULL);*/
+ if(contact_name)
+ {
+ //what should be tested here ?
+ //like what is next action expected ?
+ //since the contact is still local_pending, is the test case failed ?
+ //return_value = KErrNone;
+ //atestData->GetAddDeleteContactStatus();
+ }
+
+ }
+ if (remote_pending->len > 0)
+ {
+ /*tp_conn_inspect_handles( DBUS_G_PROXY(atestData->GetTpConn()),
+ TP_CONN_HANDLE_TYPE_CONTACT ,remote_pending,
+ &contact_name,NULL);*/
+ if(contact_name)
+ {
+ //return_value = KErrNone;
+ //atestData->GetAddDeleteContactStatus();
+ }
+
+ }
+
+ //dont quit from here right now.
+}
+
+// End of File