--- /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