emailservices/emailstore/tsrc/message_store_test/src/FolderTests.cpp
changeset 1 12c456ceeff2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailstore/tsrc/message_store_test/src/FolderTests.cpp	Thu Jan 07 12:38:38 2010 +0200
@@ -0,0 +1,322 @@
+/*
+* 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 FILES] - do not remove
+#include <tz.h>
+#include "FolderTests.h"
+//#include <ismsgstorepropertykeys.h>
+#include "messagestoreclientserver.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+CFolderTests* CFolderTests::NewL( CStifLogger* aLog )
+    {
+    CFolderTests* self = new(ELeave) CFolderTests( aLog );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// Constructor
+// -----------------------------------------------------------------------------
+CFolderTests::CFolderTests( CStifLogger* aLog ) : CAsyncTestCaseBase( aLog ) 
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+CFolderTests::~CFolderTests()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// 2nd phase constructor
+// -----------------------------------------------------------------------------
+void CFolderTests::ConstructL()
+    {
+    CAsyncTestCaseBase::ConstructL();
+    }
+
+// -----------------------------------------------------------------------------
+// ExecuteL : start executing the test case
+// -----------------------------------------------------------------------------
+TBool CFolderTests::ExecuteL()
+    {
+    LogHeader( _L("Folder") );
+    
+    //account 1
+    CMsgStoreAccount* account1 = CMsgStoreAccount::NewLC( 1234, KNullDesC );   //+1
+    CMsgStoreMailBox* mailBox1 = iMsgStore->CreateAccountL( *account1 );
+    CleanupStack::PushL( mailBox1 );                                           //+2
+    
+    iLog->Log( _L("Case %d: Create Top-Level folders"), iCaseId++ );
+    
+    CMsgStorePropertyContainer* properties = CMsgStorePropertyContainer::NewL();
+    CleanupStack::PushL( properties );                                         //+3
+    
+    TestAddIntegerPropertyL( *properties, _L8("INTEGER PROPERTY"), 99999 );
+    TestAddDes8PropertyL( *properties, _L8("STRING PROPERTY"), _L8("STRING VALUE") );
+    
+    TMsgStoreId folder1Id = mailBox1->CreateFolderL( mailBox1->Id(), *properties );
+    
+    CMsgStoreFolder* folder = mailBox1->FolderL( folder1Id );
+    
+    ComparePropertiesL( *properties, *folder );
+    CheckCondition( _L("parent folder ID"), folder->ParentId() ==  mailBox1->Id() );
+    delete folder;
+    
+    iLog->Log( _L("Case %d: Create local sub-folder"), iCaseId++ );
+    TMsgStoreId folder2Id = mailBox1->CreateFolderL( folder1Id, *properties, ETrue );
+    
+    folder = mailBox1->FolderL( folder2Id );
+    CheckCondition( _L("is local flag"), folder->IsLocalL() );
+    
+    ComparePropertiesL( *properties, *folder );
+    CheckCondition( _L("parent folder ID"), folder->ParentId() == folder1Id );
+    delete folder;
+    
+    iLog->Log( _L("Case %d: Move folder"), iCaseId++ );
+    TMsgStoreId folder3Id = mailBox1->CreateFolderL( mailBox1->Id(), *properties );
+    mailBox1->MoveFolderL( folder3Id, mailBox1->Id(), folder2Id );
+    
+    iLog->Log( _L("Case %d: Delete folder"), iCaseId++ );
+    mailBox1->DeleteFolderL( folder3Id );
+    
+    iLog->Log( _L("Case %d: Error - Open non-existing folder"), iCaseId++ );
+    TRAPD( err, folder = mailBox1->FolderL( folder3Id ) );  //folder should be deleted
+    CheckCondition( _L("open non-existing folder - -1"), err == KErrNotFound );
+    
+    iLog->Log( _L("Case %d: Get root folders"), iCaseId++ );
+    //get the system folders
+    TMsgStoreRootFolders rootFolders; 
+    MsgStoreFolderUtils::InitializeRootFoldersL( *mailBox1, rootFolders ); 
+    
+    RPointerArray<CMsgStoreFolder> folders;
+    mailBox1->FoldersL( folders );
+    
+    RArray<TMsgStoreId> expectedIds;
+    expectedIds.AppendL( folder1Id );
+    expectedIds.AppendL( folder2Id );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreInbox] );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreOutbox] );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreDrafts] );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreSent] );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreDeleted] );
+
+    
+    VerifyFolderIdsL( folders, expectedIds );
+    
+    for ( int i = 0 ; i < folders.Count() ; i++ )
+        {
+        iLog->Log( _L("  folderId=%d, parentId=%d"), folders[i]->Id(), folders[i]->ParentId() );
+        }
+    
+    folders.ResetAndDestroy();
+    expectedIds.Reset();
+    
+    
+    iLog->Log( _L("Case %d: Create more user defined folders, with messages in them"), iCaseId++ );
+    folder3Id = mailBox1->CreateFolderL( folder1Id, *properties );
+
+    CMsgStoreMessage* message = mailBox1->CreateMessageL( folder2Id, *properties );
+    TMsgStoreId messageId = message->Id();
+    message->CommitL();
+    delete message;
+    message = mailBox1->CreateMessageL( folder2Id, *properties );
+    message->CommitL();
+    delete message;
+    
+    TMsgStoreId folder4Id = mailBox1->CreateFolderL( folder2Id, *properties );
+    
+    message = mailBox1->CreateMessageL( folder4Id, *properties );
+    message->CommitL();
+    delete message;
+
+    TMsgStoreId folder5Id = mailBox1->CreateFolderL( folder2Id, *properties );
+
+    iLog->Log( _L("Case %d: List all folders"), iCaseId++ );
+    mailBox1->FoldersL( folders );
+    
+    expectedIds.AppendL( folder1Id );
+    expectedIds.AppendL( folder2Id );
+    expectedIds.AppendL( folder3Id );
+    expectedIds.AppendL( folder4Id );
+    expectedIds.AppendL( folder5Id );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreInbox] );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreOutbox] );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreDrafts] );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreSent] );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreDeleted] );
+    VerifyFolderIdsL( folders, expectedIds );
+    
+    folders.ResetAndDestroy();
+    
+    iLog->Log( _L("Case %d: List child folders"), iCaseId++ );
+    mailBox1->FoldersL( folder1Id, folders );
+    
+    RArray<TMsgStoreId> expectedIds2;
+    expectedIds2.AppendL( folder2Id );
+    expectedIds2.AppendL( folder3Id );
+    VerifyFolderIdsL( folders, expectedIds2 );
+    
+    folders.ResetAndDestroy();
+    expectedIds2.Reset();
+
+    iLog->Log( _L("Case %d: List child folders recursively"), iCaseId++ );
+    //list all subfolders of folder1Id
+    mailBox1->FoldersL( folder1Id, folders, ETrue );
+    
+    expectedIds2.Reset();
+    expectedIds2.AppendL( folder2Id );
+    expectedIds2.AppendL( folder3Id );
+    expectedIds2.AppendL( folder4Id );
+    expectedIds2.AppendL( folder5Id );
+    VerifyFolderIdsL( folders, expectedIds2 );
+    
+    folders.ResetAndDestroy();          
+    expectedIds2.Reset();
+
+    mailBox1->FoldersL( folder2Id, folders );
+    
+    expectedIds2.AppendL( folder4Id );
+    expectedIds2.AppendL( folder5Id );
+    VerifyFolderIdsL( folders, expectedIds2 );
+
+    folders.ResetAndDestroy();          
+    expectedIds2.Reset();
+    
+    iLog->Log( _L("Case %d: Delete user defined folder with no children"), iCaseId++ );
+    mailBox1->DeleteFolderL( folder5Id );
+
+    mailBox1->FoldersL( folders );
+    
+    expectedIds.Remove( 4 ); // folder5
+    VerifyFolderIdsL( folders, expectedIds );
+    folders.ResetAndDestroy();
+    expectedIds.Reset();
+    
+    iLog->Log( _L("Case %d: Delete user defined folder with children"), iCaseId++ );
+    mailBox1->DeleteFolderL( folder2Id );
+
+    mailBox1->FoldersL( folders );
+    
+    expectedIds.AppendL( folder1Id ); 
+    expectedIds.AppendL( folder3Id ); 
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreInbox] );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreOutbox] );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreDrafts] );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreSent] );
+    expectedIds.AppendL( rootFolders.iFolders[EMsgStoreDeleted] );
+    
+    VerifyFolderIdsL( folders, expectedIds );
+    
+    folders.ResetAndDestroy();          
+    expectedIds.Reset();
+    
+    // ERROR PATH TESTS
+    
+    iLog->Log( _L("Case %d: Error - Delete nonexistent folder"), iCaseId++ );
+    TRAPD( result, mailBox1->DeleteFolderL( folder5Id ) );
+    CheckCondition( _L("not found error"), result == KErrNotFound );
+        
+    iLog->Log( _L("Case %d: Error - Create folder in nonexistent folder"), iCaseId++ );
+    TRAP( result, mailBox1->CreateFolderL( folder5Id, *properties ) );
+    CheckCondition( _L("not found error"), result == KErrNotFound );
+        
+    iLog->Log( _L("Case %d: Error - FolderL for nonexistent folder"), iCaseId++ );
+    TRAP( result, mailBox1->FolderL( folder4Id ) );
+    CheckCondition( _L("not found error"), result == KErrNotFound );
+        
+    iLog->Log( _L("Case %d: Error - FoldersL for nonexistent parent folder"), iCaseId++ );
+    TRAP( result, mailBox1->FoldersL( folder2Id, folders ) );
+    CheckCondition( _L("not found error"), result == KErrNotFound );
+        
+    iLog->Log( _L("Case %d: Error - Create folder with wrong type for folder"), iCaseId++ );
+    TRAP( result, mailBox1->CreateFolderL( messageId, *properties ) );
+    CheckCondition( _L("argument error"), result == KErrArgument );
+        
+    iLog->Log( _L("Case %d: Error - Delete folder with wrong type for folder"), iCaseId++ );
+    TRAP( result, mailBox1->DeleteFolderL( messageId ) );
+    CheckCondition( _L("argument error"), result == KErrArgument );
+        
+    iLog->Log( _L("Case %d: Error - FolderL with wrong type for folder"), iCaseId++ );
+    TRAP( result, mailBox1->FolderL( messageId ) );
+    CheckCondition( _L("argument error"), result == KErrArgument );
+        
+    iLog->Log( _L("Case %d: Error - FoldersL with wrong type for folder"), iCaseId++ );
+    TRAP( result, mailBox1->FoldersL( messageId, folders ) );
+    CheckCondition( _L("argument error"), result == KErrArgument );
+
+    // OUT OF MEMORY ERROR PATH TESTS
+
+    iLog->Log( _L("Case %d: Error - Out of memory"), iCaseId++ );
+    for( TInt i = 0; i < 1; i++ )
+        {        
+        SimulateLowDiskSpaceL( i );
+        TRAP( result, mailBox1->CreateFolderL( folder1Id, *properties ) );
+        CheckCondition( _L("out of memory"), result == KErrNoMemory );
+        }
+        
+    CleanupStack::PopAndDestroy( 3 );
+    
+    //we are done 
+    return ETrue;
+    }
+
+void CFolderTests::VerifyFolderIdsL( RPointerArray<CMsgStoreFolder>& aFolders, RArray<TMsgStoreId>& aExpectedIds )
+    {           
+    iLog->Log( _L(" >> VerifyFolderIdsL") );
+    
+    TBool passed = (aFolders.Count() == aExpectedIds.Count() );
+    
+    for( TInt i = 0; i < aFolders.Count(); i++ )
+        {
+        TBool found = EFalse;
+        for ( TInt j = 0; j < aExpectedIds.Count() && !found; j++ )
+            {
+            found = (aFolders[i]->Id() == aExpectedIds[j]);
+            }
+        passed = passed && found;               
+        }
+
+    if( !passed )
+        {
+        for( TInt i = 0; i < aExpectedIds.Count(); i++ )
+            {                   
+            iLog->Log( _L("  expected[%i]=%x"), i, aExpectedIds[i] );
+            }
+        for( TInt i = 0; i < aFolders.Count(); i++ )
+            {                   
+            iLog->Log( _L("  found[%i]=%x"), i, aFolders[i]->Id() );
+            }               
+        }
+    
+    TBuf<30> text;
+    text.Format( _L("%i ids matched"), aFolders.Count() );
+    CheckCondition( text, passed );         
+    
+    iLog->Log( _L(" << VerifyFolderIdsL") );
+    }
+                
+
+
+//  End of File