diff -r 000000000000 -r d0f3a028347a libtelepathy/tsrc/src/telepathygabbleadddeletecontact.cpp --- /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 +#include +#include +#include +#include + +#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 (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 (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 (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