--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/appfw/apparchitecture/tef/T_MRUStep.CPP Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,342 @@
+// Copyright (c) 2005-2009 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:
+// Test MRU list\n
+// Tests MRU list by calling CApaProcess::SetMainDocFileName().\n
+//
+// t_mrustep.cpp
+//
+
+/**
+ @file t_mrustep.cpp
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <f32file.h>
+#include <apaid.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <apaidpartner.h>
+#include <apgicnflpartner.h>
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <apgaplst.h>
+#include <apgicnfl.h>
+#include <apgdoor.h>
+#include <apparc.h>
+#include "tstapp.h"
+#include <fbs.h>
+#include <s32std.h>
+#include <s32stor.h>
+#include <s32file.h>
+#include <s32mem.h>
+#include "T_MruStep.h"
+
+#if !defined(__E32TEST_H__)
+#include <e32test.h>
+#endif
+
+
+void CT_MruStep::setup()
+ {
+#if defined(__EPOC32__)
+ // if we're on the rack create the directories we need
+ TFullName filePath=_L("c:\\docs\\tstapp.doc");
+ TFullName tempPath=_L("c:\\system\\temp\\");
+ TParse parser;
+ parser.Set(filePath,NULL,NULL);
+ iFs.MkDirAll(parser.DriveAndPath());
+ parser.Set(tempPath,NULL,NULL);
+ iFs.MkDirAll(parser.DriveAndPath());
+#endif
+ }
+
+
+/**
+ @SYMTestCaseID T-MruStep-TestMRUL
+
+ @SYMPREQ
+
+ @SYMTestCaseDesc Test MRU list by calling CApaProcess::SetMainDocFileName() multiple times.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Test MRU list by calling CApaProcess::SetMainDocFileName()
+ in the following cases:\n
+ (1) Call CApaProcess::SetMainDocFileName() with no document created.\n
+ (2) Call CApaProcess::SetMainDocFileName() after document creation. \n
+ (3) Create a document for tstapp. Call CApaProcess::SetMainDocFileName()
+ multiple times using the same filename to be set in the
+ Most Recently Used (MRU) list. Ensure that only once the list is updated
+ with the filename.\n
+ (4) Create a document for tstapp. Call CApaProcess::SetMainDocFileName()
+ multiple times using different filename to be set in the
+ Most Recently Used (MRU) list on each attempt. Ensure that only a
+ maximum of 50 filenames are present.\n
+ (5) Open MRU.DAT and then call CApaProcess::SetMainDocFileName().
+ The filename set should not appear in MRU list since MRU.DAT is open.\n
+ (6) Create a document for tstapp. Call CApaProcess::SetMainDocFileName()
+ multiple times when there is no memory available on the device.
+ The MRU list should not reflect the newly set file name.\n
+ (7) Test CApaRecentFile::GetRecentFileL() by passing KNullUid.
+ Ensure that all entries for those last used documents are retrieved
+ when KNullUid is passed.\n
+ (8) Test CApaRecentFile::GetRecentFileListL() to ensure that it returns NULL.\n
+ In the above mentioned situations tests ensure that
+ there are no memory leaks.\n\n
+ API Calls:\n
+ CApaProcess::SetMainDocFileName(const TDesC& aMainDocFileName)\n
+ CApaRecentFile::GetRecentFileL(RFs& aFs, TUid aAppUid, TInt aIndex)\n
+ CApaRecentFile::GetRecentFileListL(RFs& aFs, TUid aAppUid)\n
+
+ @SYMTestExpectedResults Each of the tests should complete with the desired
+ output and without any memory leaks.
+
+ */
+void CT_MruStep::TestMRUL()
+ {
+ CApaProcess* process=NULL;
+ CApaDocument* doc=NULL;
+
+ // Test 1
+ INFO_PRINTF1(_L("SetMainDocFileName with no document"));
+ __UHEAP_RESET;
+ __UHEAP_MARK;
+ process = CApaProcess::NewL(iFs);
+ process->SetMainDocFileName(_L("FileName 01"));
+ delete process;
+ __UHEAP_MARKEND;
+
+ // test 2
+ INFO_PRINTF1(_L("SetMainDocFileName after document construction"));
+
+ __UHEAP_RESET;
+ __UHEAP_MARK;
+
+ // Create document
+ process = CApaProcess::NewL(iFs);
+ TApaApplicationFactory appFact(KUidTestApp);
+ doc = process->AddNewDocumentL(appFact);
+
+ // Set file name into MRU list
+ process->SetMainDocFileName(_L("FileName 02"));
+ process->DestroyDocument(doc);
+ delete process;
+ REComSession::FinalClose();
+ __UHEAP_MARKEND;
+
+ // test 3
+ INFO_PRINTF1(_L("SetMainDocFileName x100 with same filename"));
+ TInt count;
+
+ __UHEAP_RESET;
+ __UHEAP_MARK;
+
+ process = CApaProcess::NewL(iFs);
+ doc = process->AddNewDocumentL(appFact);
+
+ // Set file name into MRU list - this name should only appear once
+ for (count=0; count<100; count++)
+ process->SetMainDocFileName(_L("FileName 03"));
+
+ process->DestroyDocument(doc);
+ delete process;
+
+ REComSession::FinalClose();
+ __UHEAP_MARKEND;
+
+ // test 4
+ INFO_PRINTF1(_L("SetMainDocFileName x100 with different filenames"));
+
+ __UHEAP_RESET;
+ __UHEAP_MARK;
+
+ process = CApaProcess::NewL(iFs);
+ doc = process->AddNewDocumentL(appFact);
+
+ /** Set file name into MRU list - there should only be a maximum of 50 names in the list */
+ TBuf<20> fileName;
+
+ for (count=0; count < 100; count++)
+ {
+ fileName.Zero();
+ fileName.AppendFormat(_L("FileName %d"),count);
+
+ process->SetMainDocFileName(fileName);
+ }
+
+ process->DestroyDocument(doc);
+ delete process;
+
+ REComSession::FinalClose();
+ __UHEAP_MARKEND;
+
+
+ // test 7
+ INFO_PRINTF1(_L("Testing GetRecentFileL with KNullUid"));
+
+ __UHEAP_RESET;
+ __UHEAP_MARK;
+
+ process = CApaProcess::NewL(iFs);
+ doc = process->AddNewDocumentL(appFact);
+
+ process->DestroyDocument(doc);
+ delete process;
+
+ REComSession::FinalClose();
+ __UHEAP_MARKEND;
+
+ // MRU functionality has been removed in 7.0s test that GetRecentFile returns NULL
+ // test 8
+ INFO_PRINTF1(_L("Testing GetRecentFileListL returns NULL"));
+
+ __UHEAP_RESET;
+ __UHEAP_MARK;
+
+ process = CApaProcess::NewL(iFs);
+ doc = process->AddNewDocumentL(appFact);
+
+ process->DestroyDocument(doc);
+ delete process;
+
+ REComSession::FinalClose();
+ __UHEAP_MARKEND;
+ }
+
+
+/**
+ Auxiliary Fn for all Test Cases.
+
+ This method creates and installs an active scheduler and puts the
+ test code onto the scheduler as a CIdle object. The method initiates
+ all tests by calling the static method CT-MruTestCallBackWrapper::CallBack().
+
+*/
+void CT_MruStep::DoTestsInScheldulerLoopL()
+ {
+ // create an active scheduler
+ CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
+ CActiveScheduler::Install(scheduler);
+ CleanupStack::PushL(scheduler);
+
+ // put the test code onto the scheduler as an idle object
+ CIdle* idle=CIdle::NewL(-20);
+ CleanupStack::PushL(idle);
+
+ CT_MruTestCallBackWrapper* callBack = new(ELeave) CT_MruTestCallBackWrapper(this);
+ CleanupStack::PushL(callBack);
+
+ idle->Start(TCallBack(CT_MruTestCallBackWrapper::CallBack,callBack));
+ // start the test code
+ CActiveScheduler::Start();
+
+ // all outstanding requests complete - kill the scheduler
+ CleanupStack::PopAndDestroy(3); //scheduler, callBack, idle
+ }
+
+
+CT_MruTestCallBackWrapper::CT_MruTestCallBackWrapper(CT_MruStep* aTestStep)
+/**
+ Constructor
+ */
+ {
+ iTestStep=aTestStep;
+ }
+
+CT_MruTestCallBackWrapper::~CT_MruTestCallBackWrapper()
+/**
+ Destructor
+ */
+ {
+ }
+
+TInt CT_MruTestCallBackWrapper::CallBack(TAny* aPtr)
+/**
+ This static method is the callback function of CIdle object.The method
+ calls the non-static method TestMRUL() which initiates all the tests.
+*/
+ {
+ __UHEAP_MARK;
+
+ TRAPD(r,((CT_MruTestCallBackWrapper *)aPtr)->iTestStep->TestMRUL());
+ __ASSERT_ALWAYS(!r,User::Panic(_L("TestMRUL"),r));
+ __UHEAP_MARKEND;
+
+ CActiveScheduler::Stop();
+ return EFalse; // don't call back again
+ }
+
+CT_MruStep::~CT_MruStep()
+/**
+ Destructor
+ */
+ {
+ }
+
+CT_MruStep::CT_MruStep()
+/**
+ Constructor
+ */
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KT_MruStep);
+ }
+
+TVerdict CT_MruStep::doTestStepPreambleL()
+/**
+ @return - TVerdict code
+ Override of base class virtual
+ */
+ {
+ SetTestStepResult(EPass);
+ return TestStepResult();
+ }
+
+TVerdict CT_MruStep::doTestStepPostambleL()
+/**
+ @return - TVerdict code
+ Override of base class virtual
+ */
+ {
+ return TestStepResult();
+ }
+
+
+TVerdict CT_MruStep::doTestStepL()
+/**
+ @return - TVerdict code
+ Override of base class virtual
+ */
+ {
+ INFO_PRINTF1(_L("Testing Apparch...T_Mru"));
+
+ // set up an fbs
+ FbsStartup();
+ TInt ret=RFbsSession::Connect();
+ TEST(!ret);
+
+ // set up the directory structure
+ iFs.Connect();
+ setup();
+
+ // run the testcode
+ TRAP(ret,DoTestsInScheldulerLoopL())
+ TEST(ret==KErrNone);
+
+ iFs.Close();
+
+ INFO_PRINTF1(_L("Testing T_Mru Completed!"));
+ return TestStepResult();
+ }
+