emailservices/emailstore/tsrc/message_store_test/src/MruTests.cpp
changeset 1 12c456ceeff2
child 8 e1b6206813b4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailstore/tsrc/message_store_test/src/MruTests.cpp	Thu Jan 07 12:38:38 2010 +0200
@@ -0,0 +1,260 @@
+/*
+* Copyright (c) 2002 - 2007 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:  Base class for all test cases class member functions
+*
+*/
+
+
+//#include <BAUTILS.H>
+#include "MruTests.h"
+//#include <ismsgstorepropertykeys.h>
+#include "messagestoreclientserver.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+CMruTests* CMruTests::NewL( CStifLogger* aLog )
+    {
+    CMruTests* self = new(ELeave) CMruTests( aLog );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// Constructor
+// -----------------------------------------------------------------------------
+CMruTests::CMruTests( CStifLogger* aLog ) : CAsyncTestCaseBase( aLog ) 
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+CMruTests::~CMruTests()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// 2nd phase constructor
+// -----------------------------------------------------------------------------
+void CMruTests::ConstructL()
+    {
+    CAsyncTestCaseBase::ConstructL();
+    }
+
+// -----------------------------------------------------------------------------
+// ExecuteL : start executing the test case
+// -----------------------------------------------------------------------------
+TBool CMruTests::ExecuteL()
+    {
+    LogHeader( _L("MRU") );
+    
+    CMsgStoreAccount* account1 = CMsgStoreAccount::NewL(1234, _L("Account 1") );
+    CleanupStack::PushL( account1 );                                            //+1
+    
+    CMsgStoreAccount* account2 = CMsgStoreAccount::NewL(1234, _L("") );
+    CleanupStack::PushL( account2 );                                            //+2
+    
+    CMsgStoreAccount* account3 = CMsgStoreAccount::NewL(5678, _L("Account 3") );
+    CleanupStack::PushL( account3 );                                            //+3
+    
+    CMsgStoreMailBox* mailBox1 = iMsgStore->CreateAccountL( *account1 );
+    CleanupStack::PushL( mailBox1 );                                            //+4
+    
+    CMsgStoreMailBox* mailBox2 = iMsgStore->CreateAccountL( *account2 );
+    CleanupStack::PushL( mailBox2 );                                            //+5
+    
+    CMsgStoreMailBox* mailBox3 = iMsgStore->CreateAccountL( *account3 );
+    CleanupStack::PushL( mailBox3 );                                            //+6
+
+    iLog->Log( _L("Case %d: Calling MruAddressesL() on empty mailbox"), iCaseId++ );
+    RPointerArray<CMsgStoreAddress> expectedArray;
+    CompareMruArraysL( mailBox2, expectedArray );
+    
+    RPointerArray<CMsgStoreAddress> inputArray;
+    
+    TBuf<100> addrBuf;
+    TBuf<100> nameBuf;
+    
+    for ( TInt i = 0 ; i < 20 ; i++ )
+        {
+        addrBuf.Format(_L("name%d@nok%d.com"), i, i );
+        nameBuf.Format(_L("Fname%d LName%d"), i, i );
+        if ( i == 3 || i == 6 )
+            {
+            nameBuf.Copy( KNullDesC );
+            }
+        CMsgStoreAddress* address = CMsgStoreAddress::NewL( addrBuf, nameBuf );
+        inputArray.Append( address );
+        expectedArray.Append( address );
+        }
+    
+    TRAPD( err, mailBox1->AddMruAddressesL( inputArray ) );
+    CheckCondition( _L("AddMruAddressesL() ok"), err == KErrNone );
+    
+    CompareMruArraysL( mailBox1, expectedArray );
+    
+    inputArray.Reset();  //do not destroy because the memory is also in the expectedArray
+   
+    iLog->Log( _L("Case %d: Add more address to the top of MRU address list"), iCaseId++ );
+    for ( TInt i = 0 ; i < 20 ; i++ )
+        {
+        addrBuf.Format(_L("new name%d@nok%d.com"), i, i );
+        nameBuf.Format(_L("new Fname%d LName%d"), i, i );
+        if ( i == 3 || i == 7 )
+            {
+            nameBuf.Copy( KNullDesC );
+            }
+        CMsgStoreAddress* address = CMsgStoreAddress::NewL( addrBuf, nameBuf );
+        inputArray.Append( address );
+        //add the new addresss to the top of the array in the correct order
+        expectedArray.Insert( address, i );
+        }
+    
+    iLog->Log( _L("Case %d: Calling AddMruAddressesL()"), iCaseId++ );
+    TRAP( err, mailBox1->AddMruAddressesL( inputArray ) );
+    CheckCondition( _L("AddMruAddressesL() ok"), err == KErrNone );
+    
+    CompareMruArraysL( mailBox1, expectedArray );
+    
+    iLog->Log( _L("Case %d: Promoting some address to top and add some to the top"), iCaseId++ );
+    inputArray.Reset();
+    for ( TInt i = 0 ; i < expectedArray.Count() ; i += 3 )
+        {
+        CMsgStoreAddress* address = expectedArray[i];
+        inputArray.Insert( address, 0 );
+        expectedArray.Remove(i);
+        expectedArray.Insert( address, 0 );
+        }
+    for ( TInt i = 40 ; i < 43 ; i++ )
+        {
+        addrBuf.Format(_L("new name%d@nok%d.com"), i, i );
+        nameBuf.Format(_L("new Fname%d LName%d"), i, i );
+        CMsgStoreAddress* address = CMsgStoreAddress::NewL( addrBuf, nameBuf );
+        inputArray.Insert(address, 5);
+        expectedArray.Insert(address, 5);
+        }
+    TRAP( err, mailBox1->AddMruAddressesL( inputArray ) );
+    CheckCondition( _L("AddMruAddressesL() ok"), err == KErrNone );
+    
+    CompareMruArraysL( mailBox1, expectedArray );
+    
+    TInt newMaxCount=30;
+    iLog->Log( _L("Case %d: Change the MaxMruAddressCount"), iCaseId++ );
+    iMsgStore->SetMaxMruAddressCountL( newMaxCount );
+    while( expectedArray.Count() > newMaxCount )
+        {
+        CMsgStoreAddress* address = expectedArray[newMaxCount];
+        expectedArray.Remove(newMaxCount);
+        delete address;
+        }
+    CompareMruArraysL( mailBox1, expectedArray );
+
+    inputArray.Reset();
+    
+    iLog->Log( _L("Case %d: Add some more to make sure only %d are returned"), iCaseId++ );
+    for ( int i = 0 ; i < 10 ; i++ )
+        {
+        addrBuf.Format(_L("newer name%d@nok%d.com"), i, i );
+        nameBuf.Format(_L("newer Fname%d LName%d"), i, i );
+        CMsgStoreAddress* address = CMsgStoreAddress::NewL( addrBuf, nameBuf );
+        inputArray.Insert(address, 0);
+        expectedArray.Insert(address, 0);
+        }
+    while( expectedArray.Count() > newMaxCount )
+        {
+        CMsgStoreAddress* address = expectedArray[newMaxCount];
+        expectedArray.Remove(newMaxCount);
+        delete address;
+        }
+    
+    TRAP( err, mailBox1->AddMruAddressesL( inputArray ) );
+    CheckCondition( _L("AddMruAddressesL() ok"), err == KErrNone );
+    
+    CompareMruArraysL( mailBox1, expectedArray );
+    
+    //__LOG_WRITE_INFO("Test Dynamic Encryption")
+    //TRAP( err, iMsgStore->EnableEncryptionL() );
+    //CheckCondition( _L("EnableEncryption() should return KErrNone or KErrAlreadyExists() ok"), err == KErrNone || err == KErrAlreadyExists);
+    //if ( err == KErrAlreadyExists )
+    //    {
+        //encryption may be still going on, make sure it's complete before calling DisableEncryption()
+    //    WaitUntilEncryptDecryptCompleteL( EMsgStoreESEncrypting, mailBox1 );
+        
+    //    __LOG_WRITE_INFO("Store is encrypted, decrypt it")
+    //    iMsgStore->DisableEncryptionL();
+    //    __LOG_WRITE_INFO("Wait for decryption to complete")
+    //    WaitUntilEncryptDecryptCompleteL( EMsgStoreESDecrypting, mailBox1 );
+    //    }
+    //else
+    //    {
+    //    __LOG_WRITE_INFO("Wait for encryption to complete")
+    //    WaitUntilEncryptDecryptCompleteL( EMsgStoreESEncrypting, mailBox1 );
+    //    }
+    
+    //__LOG_WRITE_INFO("Comparing results")
+    //CompareMruArraysL( mailBox1, expectedArray );
+    
+    //add a few more address to see if it works when encryption is turned on
+
+    inputArray.Reset();
+    
+    CleanupStack::PopAndDestroy( 6 );
+    
+    //we are done 
+    return ETrue;
+    }
+
+void CMruTests::CompareMruArraysL( CMsgStoreMailBox* aMailBox, RPointerArray<CMsgStoreAddress>& aExpected )
+    {
+    iLog->Log(_L("  >> CompareMruArraysL") );
+    
+    RPointerArray<CMsgStoreAddress> results;
+    TRAPD(err, aMailBox->MruAddressesL( results ) );
+    CheckCondition( _L("MruAddressesL() ok"), err == KErrNone );
+
+    CheckCondition( _L("same counts"), aExpected.Count() == results.Count() );
+    
+    TInt count = aExpected.Count();
+    
+    iLog->Log( _L("  comparing %d addresses"), count);
+    
+    for ( TInt i = 0 ; i < count  ; i++ )
+        {
+        CMsgStoreAddress* addr1 = aExpected[i];
+        CMsgStoreAddress* addr2 = results[i];
+        iLog->Log( _L("  i=%d, addr=%S, dispName=%S"), i, &addr2->EmailAddress(), &addr2->DisplayName() );
+        if ( addr1->EmailAddress() != addr2->EmailAddress() )
+            {
+            iLog->Log( _L("  Different email address found!! index=%d addr1=%S, addr2=%S"), i, &addr1->EmailAddress(), &addr2->EmailAddress() );
+            User::Leave( KErrNotFound );
+            }
+        if ( addr1->DisplayName() != addr2->DisplayName() )
+            {
+            iLog->Log( _L("  Different display name found!! index=%d name1=%S, name2=%S"), i, &addr1->DisplayName(), &addr2->DisplayName() );
+            User::Leave( KErrNotFound );
+            }
+        }
+    
+    results.ResetAndDestroy();
+    
+    iLog->Log(_L("  addresses all match!") );
+    
+    iLog->Log(_L("  << CompareMruArraysL") );
+    
+    }
+
+
+//  End of File