imsrv_plat/ximp_core_feature_plugin_api/tsrc/tsrcutils/testcaseutils/prfwtesteventfactory.cpp
changeset 0 e6b17d312c8b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imsrv_plat/ximp_core_feature_plugin_api/tsrc/tsrcutils/testcaseutils/prfwtesteventfactory.cpp	Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,426 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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:
+*
+*/
+
+
+#include "prfwtestcaseutilspanics.h"
+#include "prfwtesteventfactory.h"
+
+#include <eunitmacros.h>
+#include <ximpcontextstateevent.h>
+#include <ximprequestcompleteevent.h>
+#include <ximpstatus.h>
+#include <presentitypresenceevent.h>
+#include <presentitygrouplistevent.h>
+#include <presentitygroupcontentevent.h>
+#include <presenceinfo.h>
+
+#include "ximpidentityimp.h"
+#include "presencetypehelpers.h"
+#include "presentitygroupinfoimp.h"
+#include "presentitygroupmemberinfoimp.h"
+#include "presentitygroupcontenteventimp.h"
+#include "presentitygrouplisteventimp.h"
+
+
+
+using namespace NXIMPTestCaseUtilsPanic;
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// create a group content event with given arrays
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPresentityGroupContentEventImp*
+XIMPTestEventFactory::CreateGroupContentEventLCX(
+        const TDesC& aGroupId,
+        const TDesC& aIdentityForDelta,
+        const TDesC& aDispNameForDelta,
+        TTestPGLContentArraySpecifier aArraySpec,
+        const TDesC& aIdentityCurrent,
+        const TDesC& aDispNameCurrent,
+        MXIMPDataSubscriptionState::TSubscriptionState aSubscriptionState,
+        MXIMPDataSubscriptionState::TDataState aDataState
+        )
+    {
+    // id for group
+    CXIMPIdentityImp* idForGroup = CXIMPIdentityImp::NewLC( aGroupId );
+
+    // create the arrays
+    RPrGrpMemInfoImpArray* addedList = new ( ELeave ) RPrGrpMemInfoImpArray;
+    CleanupDeletePushL( addedList );
+
+    RPrGrpMemInfoImpArray* updatedList = new ( ELeave ) RPrGrpMemInfoImpArray;
+    CleanupDeletePushL( updatedList );
+
+    RPrGrpMemInfoImpArray* removedList = new ( ELeave ) RPrGrpMemInfoImpArray;
+    CleanupDeletePushL( removedList );
+
+    RPrGrpMemInfoImpArray* currentList = new ( ELeave ) RPrGrpMemInfoImpArray;
+    CleanupDeletePushL( currentList );
+
+    // populate the current list
+    if ( aIdentityCurrent.Length() > 0 )
+        {
+        // but don't put "KNullDesC" there if it's really empty
+        CXIMPIdentityImp* idForCurrent = CXIMPIdentityImp::NewLC( aIdentityCurrent );
+        CPresentityGroupMemberInfoImp* grpInfoForCurrent =
+            CPresentityGroupMemberInfoImp::NewLC( *idForCurrent, aDispNameCurrent );
+        currentList->AppendL( grpInfoForCurrent );
+        CleanupStack::Pop( grpInfoForCurrent );
+        CleanupStack::PopAndDestroy( idForCurrent );
+        }
+
+    // create the delta list
+    CXIMPIdentityImp* idForEvent = CXIMPIdentityImp::NewLC( aIdentityForDelta );
+    CPresentityGroupMemberInfoImp* grpInfoForEvent =
+        CPresentityGroupMemberInfoImp::NewLC( *idForEvent, aDispNameForDelta );
+
+    // notice the cleanup stack usage. AppendL takes ownership, but
+    // it might not be done always.
+    TBool didAppend = EFalse;
+
+    // put the given group info into the specified array.
+    switch ( aArraySpec )
+        {
+        case ETestPGLCntAdded :
+            {
+            if ( aIdentityForDelta.Length() > 0 )
+                {
+                addedList->AppendL( grpInfoForEvent );
+                didAppend = ETrue;
+                }
+            break;
+            }
+
+        case ETestPGLCntUpdated :
+            {
+            if ( aIdentityForDelta.Length() > 0 )
+                {
+                updatedList->AppendL( grpInfoForEvent );
+                didAppend = ETrue;
+                }
+            break;
+            }
+
+        case ETestPGLCntRemoved :
+            {
+            if ( aIdentityForDelta.Length() > 0 )
+                {
+                removedList->AppendL( grpInfoForEvent );
+                didAppend = ETrue;
+                }
+            break;
+            }
+
+        case ETestPGLCntEmpty :
+            {
+            // don't add, thus creating an empty array.
+            break;
+            }
+
+        default:
+            {
+            User::Leave( KErrArgument );
+            break;
+            }
+        };
+
+    // remove the event and id from cleanupstack. removal
+    // method depends on whether we did append or not
+    if ( didAppend )
+        {
+        CleanupStack::Pop( grpInfoForEvent );
+        CleanupStack::PopAndDestroy( idForEvent );
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy( 2, idForEvent );
+        }
+
+    CXIMPDataSubscriptionStateImp* stateImp = CXIMPDataSubscriptionStateImp::NewLC();
+    stateImp->SetSubscriptionStateL( aSubscriptionState );
+    stateImp->SetDataStateL( aDataState );
+        
+    // create the actual event
+    CPresentityGroupContentEventImp* tmp =
+        CPresentityGroupContentEventImp::NewLC(
+                *idForGroup,
+                addedList,
+                updatedList,
+                removedList,
+                currentList,
+                stateImp
+                );
+    CleanupStack::Pop( 2, stateImp );
+    CleanupStack::PushL( tmp );
+
+    // test the accessors
+    if ( aIdentityForDelta.Length() > 0 )
+        {
+        switch ( aArraySpec )
+            {
+            case ETestPGLCntAdded :
+                {
+                EUNIT_ASSERT_DESC( tmp->NewMembersCount() == 1, "Added group member count mismatch" );
+                TBool same = 0 == tmp->NewMember( 0 ).GroupMemberId().Identity().Compare( aIdentityForDelta );
+                EUNIT_ASSERT_DESC( same, "Added group member id mismatch" );
+                break;
+                }
+
+            case ETestPGLCntUpdated :
+                {
+                EUNIT_ASSERT_DESC( tmp->UpdatedMembersCount() == 1, "Updated group member count mismatch" );
+                TBool same = 0 == tmp->UpdatedMember( 0 ).GroupMemberId().Identity().Compare( aIdentityForDelta );
+                EUNIT_ASSERT_DESC( same, "Updated group member id mismatch" );
+                break;
+                }
+
+            case ETestPGLCntRemoved :
+                {
+                EUNIT_ASSERT_DESC( tmp->DisappearedMembersCount() == 1, "Removed group member count mismatch" );
+                TBool same = 0 == tmp->DisappearedMember( 0 ).GroupMemberId().Identity().Compare( aIdentityForDelta );
+                EUNIT_ASSERT_DESC( same, "Removed group member id mismatch" );
+                break;
+                }
+
+            case ETestPGLCntEmpty :
+                {
+                // don't add, thus creating an empty array.
+                break;
+                }
+
+            default :
+                {
+                break;
+                }
+            }
+        }
+
+    if ( aIdentityCurrent.Length() > 0 )
+        {
+        EUNIT_ASSERT_DESC( tmp->CurrentMembersCount() == 1, "Current group member count mismatch" );
+        
+        TBool same = 0 == tmp->CurrentMember( 0 ).GroupMemberId().Identity().Compare( aIdentityCurrent );
+        EUNIT_ASSERT_DESC( same, "Current group member id mismatch" );
+        
+        same = 0 == tmp->CurrentMember( 0 ).GroupMemberDisplayName().Compare( aDispNameCurrent );
+        EUNIT_ASSERT_DESC( same, "Current group member display name mismatch" );
+        }
+    else
+        {
+        EUNIT_ASSERT_DESC( tmp->CurrentMembersCount() == 0, "Current group member count mismatch" );
+        }
+
+    /*
+     * In cleanupstack there are 6 items, FIFO:
+     *   - identity object
+     *   - added list
+     *   - updated list
+     *   - removed list
+     *   - current member list
+     *   - event imp
+     */
+
+    return tmp;
+    }
+
+
+// ---------------------------------------------------------------------------
+// create a group list event with given arrays
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPresentityGroupListEventImp* XIMPTestEventFactory::CreateGroupListEventLCX(
+        const TDesC& aUri,
+        const TDesC& aDispName,
+        TTestPGLArraySpecifier aArraySpec,
+        const TDesC& aUriCurrent,
+        const TDesC& aDispNameCurrent,
+        MXIMPDataSubscriptionState::TSubscriptionState aSubscriptionState,
+        MXIMPDataSubscriptionState::TDataState aDataState
+        )
+    {
+    // create the arrays
+    RPrGrpInfoImpArray* createdList = new ( ELeave ) RPrGrpInfoImpArray;
+    CleanupDeletePushL( createdList );
+
+    RPrGrpInfoImpArray* updatedList = new ( ELeave ) RPrGrpInfoImpArray;
+    CleanupDeletePushL( updatedList );
+
+    RPrGrpInfoImpArray* deletedList = new ( ELeave ) RPrGrpInfoImpArray;
+    CleanupDeletePushL( deletedList );
+    
+    RPrGrpInfoImpArray* currentList = new ( ELeave ) RPrGrpInfoImpArray;
+    CleanupDeletePushL( currentList );
+
+    // create the group info
+    CXIMPIdentityImp* idForEvent = CXIMPIdentityImp::NewLC( aUri );
+    CPresentityGroupInfoImp* grpInfoForEvent =
+        CPresentityGroupInfoImp::NewLC( *idForEvent, aDispName );
+
+    // populate the current list
+    if ( aUriCurrent.Length() > 0 )
+        {
+        // but don't put "KNullDesC" there if it's really empty
+        CXIMPIdentityImp* idForCurrent = CXIMPIdentityImp::NewLC( aUriCurrent );
+        CPresentityGroupInfoImp* grpInfoForCurrent =
+            CPresentityGroupInfoImp::NewLC( *idForCurrent, aDispNameCurrent );
+        currentList->AppendL( grpInfoForCurrent );
+        CleanupStack::Pop( grpInfoForCurrent );
+        CleanupStack::PopAndDestroy( idForCurrent );
+        }
+    
+    // notice the cleanup stack usage. AppendL takes ownership, but
+    // it might not be done always.
+    TBool didAppend = EFalse;
+
+    // put the given group info into the specified array
+    switch ( aArraySpec )
+        {
+        case ETestPGLCreated :
+            {
+            if ( aUri.Length() > 0 )
+                {
+                createdList->AppendL( grpInfoForEvent );
+                didAppend = ETrue;
+                }
+            break;
+            }
+
+        case ETestPGLUpdated :
+            {
+            if ( aUri.Length() > 0 )
+                {
+                updatedList->AppendL( grpInfoForEvent );
+                didAppend = ETrue;
+                }
+            break;
+            }
+
+        case ETestPGLDeleted :
+            {
+            if ( aUri.Length() > 0 )
+                {
+                deletedList->AppendL( grpInfoForEvent );
+                didAppend = ETrue;
+                }
+            break;
+            }
+
+        case ETestPGLEmpty :
+            {
+            // don't add, thus creating an empty array
+            break;
+            }
+
+        default:
+            {
+            User::Leave( KErrArgument );
+            break;
+            }
+        };
+
+    // remove the event and id from cleanupstack. removal
+    // method depends on whether we did append or not
+    if ( didAppend )
+        {
+        CleanupStack::Pop( grpInfoForEvent );
+        CleanupStack::PopAndDestroy( idForEvent );
+        }
+    else
+        {
+        CleanupStack::PopAndDestroy( 2, idForEvent );
+        }
+
+    CXIMPDataSubscriptionStateImp* stateImp = CXIMPDataSubscriptionStateImp::NewLC();
+    stateImp->SetSubscriptionStateL( aSubscriptionState );
+    stateImp->SetDataStateL( aDataState );
+        
+    // create the actual event
+    CPresentityGroupListEventImp* tmp =
+        CPresentityGroupListEventImp::NewLC(
+                createdList,
+                updatedList,
+                deletedList,
+                currentList,
+                stateImp
+                );                
+    CleanupStack::Pop( 2, stateImp );
+    CleanupStack::PushL( tmp );
+
+    // verify that the event contains correct information
+    if ( aUri.Length() > 0 )
+        {
+        switch ( aArraySpec )
+            {
+            case ETestPGLCreated :
+                {
+                EUNIT_ASSERT_DESC( tmp->NewGroupsCount() == 1, "Created group count mismatch" );
+                TBool same = 0 == tmp->NewGroup( 0 ).GroupId().Identity().Compare( aUri );
+                EUNIT_ASSERT_DESC( same, "Created group id mismatch" );
+                break;
+                }
+
+            case ETestPGLUpdated :
+                {
+                EUNIT_ASSERT_DESC( tmp->UpdatedGroupsCount() == 1, "Updated group count mismatch" );
+                TBool same = 0 == tmp->UpdatedGroup( 0 ).GroupId().Identity().Compare( aUri );
+                EUNIT_ASSERT_DESC( same, "Updated group id mismatch" );
+                break;
+                }
+
+            case ETestPGLDeleted :
+                {
+                EUNIT_ASSERT_DESC( tmp->DisappearedGroupsCount() == 1, "Deleted group count mismatch" );
+                TBool same = 0 == tmp->DisappearedGroup( 0 ).GroupId().Identity().Compare( aUri );
+                EUNIT_ASSERT_DESC( same, "Deleted group id mismatch" );
+                break;
+                }
+            }
+        }
+    
+    if ( aUriCurrent.Length() > 0 )
+        {
+        EUNIT_ASSERT_DESC( tmp->CurrentGroupsCount() == 1, "Current group count mismatch" );
+   
+        TBool same = 0 == tmp->CurrentGroup( 0 ).GroupId().Identity().Compare( aUriCurrent );
+        EUNIT_ASSERT_DESC( same, "Current group id mismatch" );
+        
+        same = 0 == tmp->CurrentGroup( 0 ).GroupDisplayName().Compare( aDispNameCurrent );
+        EUNIT_ASSERT_DESC( same, "Current group display name mismatch" );
+        }
+    else
+        {
+        EUNIT_ASSERT_DESC( tmp->CurrentGroupsCount() == 0, "Current group count mismatch, expected 0" );
+        }
+
+    /*
+     * In cleanupstack there are 5 items, FIFO:
+     *   - created list
+     *   - updated list
+     *   - deleted list
+     *   - current list
+     *   - event imp
+     */
+
+    return tmp;
+    }
+
+// end of file
+