--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lowlevellibsandfws/apputils/tsrc/T_NamedPlugins.CPP Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,452 @@
+// Copyright (c) 2006-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:
+// Tests for CBaNamedPlugins class, which contains CParameters class
+//
+//
+
+#include <banamedplugins.h>
+#include <e32test.h>
+#include <basched.h>
+#include <f32file.h>
+#include <baflpan.h>
+
+RTest TheTest(_L("T_NamedPlugins"));
+RFs TheFs;
+
+//Test macros and functions
+
+LOCAL_C void Check(TInt aValue, TInt aLine)
+ {
+ if(!aValue)
+ {
+ TheTest(EFalse, aLine);
+ }
+ }
+
+LOCAL_C void Check(TInt aValue, TInt aExpected, TInt aLine)
+ {
+ if(aValue != aExpected)
+ {
+ RDebug::Print(_L("*** Expected error: %d, got: %d\r\n"), aExpected, aValue);
+ TheTest(EFalse, aLine);
+ }
+ }
+
+#define TEST(arg) Check((arg), __LINE__)
+#define TEST2(aValue, aExpected) Check(aValue, aExpected, __LINE__)
+
+
+TUid KUid1 = {0xE1A01753};
+TUid KUid2 = {0xE1B01753};
+
+_LIT(KRscFileName1, "\\resource\\plugins\\E1A01753.RSC");
+_LIT(KRscFileName2, "\\resource\\plugins\\E1B01753.RSC");
+_LIT(KIdentifier, "plugin");
+_LIT(KBadIdentifier, "plugni");
+_LIT(KMainPath, "\\system\\data\\");
+_LIT(KLitWildCard, "*.RSC");
+_LIT(KTextForNone, "NoPlugin");
+
+class CImplementation: public CBaNamedPlugins::MFallBackName
+{
+ public:
+
+ HBufC* FallBackNameL(const TDesC& aFullResourceFileName) const;
+};
+
+HBufC* CImplementation::FallBackNameL(const TDesC& aFullResourceFileName) const
+{
+ return aFullResourceFileName.AllocL();
+}
+
+TBool TestAlgorithmToCompareNames(const TDesC& aName1, const TDesC& aName2)
+ {
+ return( aName1.CompareC(aName2) == 0); // Function is supposed to return 1, when CompareC returns 0
+ }
+
+/*
+@SYMTestCaseID SYSLIB-BAFL-CT-1756
+@SYMTestCaseDesc CBaNamedPlugins class test
+ Tests for CBaNamedPlugins::IndexOfIdentifier(), CBaNamedPlugins::IndexOfUid(), CBaNamedPlugins::MdcaPoint(), CBaNamedPlugins::IdentifierAtIndex(), CBaNamedPlugins::UidAtIndex(),CBaNamedPlugins::MdcaCount() functions
+@SYMTestPriority Medium
+@SYMTestActions CBaNamedPlugins object is populated with resource file names and checking for identifier and Uid
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+
+void DoTests1()
+{
+ TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1756 Testing DoTests1... "));
+ TBuf<64> buf;
+
+ CBaNamedPlugins* namedPlugins;
+ RArray<CBaNamedPlugins::TResourceFile> arrayOfResourceFiles;
+ CleanupClosePushL(arrayOfResourceFiles);
+
+ buf = KRscFileName1;
+
+ CBaNamedPlugins::TResourceFile resourceFile1;
+ resourceFile1.iFullFileName = buf.AllocLC();
+ resourceFile1.iIdentifier = NULL;
+ resourceFile1.iUid = KUid1;
+ resourceFile1.iFormat = CBaNamedPlugins::TResourceFile::EFormatTbuf;
+ User::LeaveIfError(arrayOfResourceFiles.Append(resourceFile1));
+ CleanupStack::Pop(resourceFile1.iFullFileName);
+
+ buf = KRscFileName2;
+
+ CBaNamedPlugins::TResourceFile resourceFile2;
+ resourceFile2.iFullFileName = buf.AllocLC();
+ buf = KIdentifier;
+ resourceFile2.iIdentifier = buf.AllocLC();
+ resourceFile2.iUid = KUid2;
+ resourceFile2.iFormat = CBaNamedPlugins::TResourceFile::EFormatTbuf;
+ User::LeaveIfError(arrayOfResourceFiles.Append(resourceFile2));
+ CleanupStack::Pop(resourceFile2.iIdentifier);
+
+ CleanupStack::Pop(resourceFile2.iFullFileName);
+
+ CBaNamedPlugins::CParameters* const parameters = CBaNamedPlugins::CParameters::NewLC(TheFs, arrayOfResourceFiles.Array());
+ HBufC* textForNone=KTextForNone().AllocL();
+ parameters->SetTextForNone(textForNone,CBaNamedPlugins::EArrayPositionLast);
+
+ // This call to SetTextForNoneL will delete textForNone
+ parameters->SetTextForNoneL(KTextForNone,CBaNamedPlugins::EArrayPositionLast);
+
+ namedPlugins = CBaNamedPlugins::NewL(*parameters);
+
+ CBaNamedPlugins::TEquivalentIdentifiers eqIdent = TestAlgorithmToCompareNames;
+ TInt i = (*namedPlugins).IndexOfIdentifier(KIdentifier,eqIdent);
+ // With the sorting algorithm and resource files benig used KIdentifier is at index 0
+ TEST2(i,0);
+ i = (*namedPlugins).IndexOfIdentifier(KBadIdentifier,eqIdent);
+ TEST2(i,KErrNotFound);
+
+ TInt index = namedPlugins->IndexOfUid(KUid1);
+ TEST(index>=0);
+ TPtrC name;
+ if( index >= 0 )
+ {
+ name.Set((*namedPlugins).MdcaPoint(index));
+ }
+ index = (namedPlugins)->IndexOfUid(TUid::Uid(0x123));
+ TEST2(index,-1);
+
+ TEST((*namedPlugins).IdentifierAtIndex(1)!= &buf);
+ TEST((*namedPlugins).UidAtIndex(0)==KUid2);
+ TEST((*namedPlugins).UidAtIndex(1)==KUid1);
+
+ TInt count = (*namedPlugins).MdcaCount();
+ TEST2(count,3);
+
+ count = arrayOfResourceFiles.Count();
+ for(i = 0; i < count; i++ )
+ {
+ const CBaNamedPlugins::TResourceFile& resourceFileData=arrayOfResourceFiles[i];
+ delete resourceFileData.iFullFileName;
+ delete resourceFileData.iIdentifier;
+ }
+
+ CleanupStack::PopAndDestroy(2, &arrayOfResourceFiles);
+ delete namedPlugins;
+
+ // Test EFormatArrayOfUidNamePairs format
+ buf = KRscFileName1;
+
+ CleanupClosePushL(arrayOfResourceFiles);
+
+ CBaNamedPlugins::TResourceFile resourceFile;
+ resourceFile.iFullFileName = KRscFileName1().AllocLC();
+ resourceFile.iIdentifier = NULL;
+ resourceFile.iUid = KNullUid;
+ resourceFile.iFormat = CBaNamedPlugins::TResourceFile::EFormatArrayOfUidNamePairs;
+ User::LeaveIfError(arrayOfResourceFiles.Append(resourceFile));
+ CleanupStack::Pop(resourceFile.iFullFileName);
+
+ CBaNamedPlugins::CParameters* const parameters1 = CBaNamedPlugins::CParameters::NewL(TheFs, arrayOfResourceFiles.Array());
+ textForNone=KTextForNone().AllocL();
+ parameters1->SetTextForNone(textForNone,CBaNamedPlugins::EArrayPositionFirst);
+ namedPlugins = CBaNamedPlugins::NewL(*parameters1);
+
+ delete resourceFile.iFullFileName;
+
+ CleanupStack::PopAndDestroy(&arrayOfResourceFiles);
+ delete parameters1;
+ delete namedPlugins;
+}
+
+/*
+@SYMTestCaseID SYSLIB-BAFL-CT-1757
+@SYMTestCaseDesc CBaNamedPlugins::CParameters class test
+ Tests for CParameters::SetFallBackName,CParameters::SetCompareNames,getting file names by searching file system
+@SYMTestPriority Medium
+@SYMTestActions Setting the algorithm to compare two plugin names
+@SYMTestExpectedResults Test must not fail
+@SYMREQ REQ0000
+*/
+
+void DoTests2()
+{
+ TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-1757 Testing DoTests2... "));
+ TBuf<64> buf;
+ buf = KMainPath;
+
+ CBaNamedPlugins* namedPlugins;
+ RArray<CBaNamedPlugins::TResourceFile> arrayOfResourceFiles;
+ CleanupClosePushL(arrayOfResourceFiles);
+
+ TFindFile* findFile = new(ELeave) TFindFile(TheFs);
+ CleanupStack::PushL(findFile);
+
+ CDir* directory = NULL;
+
+ TInt err = findFile->FindWildByDir(KLitWildCard, buf, directory);
+ TInt mdcaCount=0;
+ while(err==KErrNone)
+ {
+ CleanupStack::PushL(directory);
+ for (TInt i=directory->Count()-1; i>=0; --i)
+ {
+ const TEntry& entry = (*directory)[i];
+ CBaNamedPlugins::TResourceFile resourceFile;
+ resourceFile.iFullFileName = entry.iName.AllocLC();
+ resourceFile.iIdentifier = NULL;
+ resourceFile.iUid = KNullUid;
+ resourceFile.iFormat = CBaNamedPlugins::TResourceFile::EFormatTbuf;
+ ++mdcaCount;
+ User::LeaveIfError(arrayOfResourceFiles.Append(resourceFile));
+ CleanupStack::Pop(resourceFile.iFullFileName);
+ }
+ CleanupStack::PopAndDestroy(); // directory
+ directory = NULL;
+ err=findFile->FindWild(directory);
+ }
+ CleanupStack::PopAndDestroy(); // findfile
+
+ CBaNamedPlugins::CParameters* const parameters = CBaNamedPlugins::CParameters::NewL(TheFs, arrayOfResourceFiles.Array());
+
+ CBaNamedPlugins::TCompareNames compName = TestAlgorithmToCompareNames;
+ (*parameters).SetCompareNames(compName);
+ namedPlugins = CBaNamedPlugins::NewL(*parameters);
+
+ // Test CBaNamedPlugins constructor when fall back name is set
+ CImplementation obj;
+ (*parameters).SetFallBackName(obj);
+ delete namedPlugins;
+ namedPlugins = CBaNamedPlugins::NewL(*parameters);
+
+ TInt count = (*namedPlugins).MdcaCount();
+ TEST2(count,mdcaCount);
+
+ count=arrayOfResourceFiles.Count();
+ for( TInt i = 0; i < count; i++ )
+ {
+ const CBaNamedPlugins::TResourceFile& resourceFileData=arrayOfResourceFiles[i];
+ delete resourceFileData.iFullFileName;
+ }
+ CleanupStack::PopAndDestroy(&arrayOfResourceFiles);
+ delete parameters;
+ delete namedPlugins;
+}
+
+LOCAL_C void StartTestPanicBadArrayPositionL()
+ {
+ CBaNamedPlugins* namedPlugins;
+ RArray<CBaNamedPlugins::TResourceFile> arrayOfResourceFiles;
+ CleanupClosePushL(arrayOfResourceFiles);
+ RFs fs;
+ fs.Connect();
+ TBuf<64> buf;
+ buf = KRscFileName2;
+
+ // Test Panic
+ CBaNamedPlugins::TResourceFile resourceFile;
+ resourceFile.iFullFileName = buf.AllocLC();
+ resourceFile.iIdentifier = NULL;
+ resourceFile.iUid = KNullUid;
+ resourceFile.iFormat = CBaNamedPlugins::TResourceFile::EFormatTbuf;
+ User::LeaveIfError(arrayOfResourceFiles.Append(resourceFile));
+ CleanupStack::Pop(resourceFile.iFullFileName);
+
+ CBaNamedPlugins::CParameters* const parameters = CBaNamedPlugins::CParameters::NewL(fs, arrayOfResourceFiles.Array());
+
+ HBufC* textForNone=KTextForNone().AllocL();
+ parameters->SetTextForNone(textForNone,static_cast<CBaNamedPlugins::TArrayPosition>(255)); // Pick an illegal position
+
+ // This should panic
+ namedPlugins = CBaNamedPlugins::NewL(*parameters);
+
+ delete resourceFile.iFullFileName;
+
+ CleanupStack::PopAndDestroy(&arrayOfResourceFiles);
+ delete parameters;
+ delete namedPlugins;
+ }
+
+LOCAL_C TInt TestPanicBadArrayPosition(TAny* /*aData*/)
+ {
+ __UHEAP_MARK;
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ if(!cleanup)
+ return KErrNoMemory;
+
+ TRAPD(err, StartTestPanicBadArrayPositionL());
+
+ // Won't get here but add this line to get rid of ARMV5 warning
+ TEST2(err, KErrNone);
+
+ delete cleanup;
+ __UHEAP_MARKEND;
+
+ return (KErrNone);
+ }
+
+LOCAL_C void StartTestPanicBadResourceFileFormatL()
+ {
+ CBaNamedPlugins* namedPlugins;
+ RArray<CBaNamedPlugins::TResourceFile> arrayOfResourceFiles;
+ CleanupClosePushL(arrayOfResourceFiles);
+ RFs fs;
+ fs.Connect();
+ TBuf<64> buf;
+ buf = KRscFileName2;
+
+ // Test Panic
+ CBaNamedPlugins::TResourceFile resourceFile;
+ resourceFile.iFullFileName = buf.AllocLC();
+ resourceFile.iIdentifier = NULL;
+ resourceFile.iUid = KNullUid;
+ resourceFile.iFormat = static_cast<CBaNamedPlugins::TResourceFile::TFormat>(255); // Pick an illegal format
+ User::LeaveIfError(arrayOfResourceFiles.Append(resourceFile));
+ CleanupStack::Pop(resourceFile.iFullFileName);
+
+ CBaNamedPlugins::CParameters* const parameters = CBaNamedPlugins::CParameters::NewL(fs, arrayOfResourceFiles.Array());
+
+ // This should panic
+ namedPlugins = CBaNamedPlugins::NewL(*parameters);
+
+ delete resourceFile.iFullFileName;
+
+ CleanupStack::PopAndDestroy(&arrayOfResourceFiles);
+ delete parameters;
+ delete namedPlugins;
+ }
+
+LOCAL_C TInt TestPanicBadResourceFileFormat(TAny* /*aData*/)
+ {
+ __UHEAP_MARK;
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ if(!cleanup)
+ return KErrNoMemory;
+
+ TRAPD(err, StartTestPanicBadResourceFileFormatL());
+
+ // Won't get here but add this line to get rid of ARMV5 warning
+ TEST2(err, KErrNone);
+
+ delete cleanup;
+ __UHEAP_MARKEND;
+
+ return (KErrNone);
+ }
+
+/*
+@SYMTestCaseID SYSLIB-BAFL-CT-3379
+@SYMTestCaseDesc CBaNamedPlugins::CParameters class test
+ Tests the class panic conditions
+@SYMTestPriority Medium
+@SYMTestActions Cause the class to panic by setting bad enums.
+@SYMTestExpectedResults Test must not fail
+@SYMREQ DEF101753
+*/
+LOCAL_C void NamedPluginsPanicConditionsThread()
+ {
+ TheTest.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-3379 Testing CBaNamedPlugins Panics... "));
+ TBool jitEnabled = User::JustInTime();
+ User::SetJustInTime(EFalse);
+
+ TRequestStatus status;
+
+ _LIT(KName, "NamedPlugins_Panic_Thread");
+
+ RThread thread;
+ const TInt KThreadStackSize =0x2000; // 8k
+ const TInt KThreadMinHeapSize =0x4000; // 16k
+ const TInt KThreadMaxHeapSize =0xf000; // 60k
+
+ // Test EBafPanicBadResourceFileFormat
+ TInt rc = thread.Create(KName,TestPanicBadResourceFileFormat,KThreadStackSize,KThreadMinHeapSize,KThreadMaxHeapSize,NULL);
+
+ TEST(rc==KErrNone);
+
+ thread.Logon(status);
+ thread.Resume();
+
+ User::WaitForRequest(status);
+
+ // Should result in a EExitPanic exit type and an EBafPanicBadResourceFileFormat exit reason
+ TEST(thread.ExitType() == EExitPanic);
+ TEST(thread.ExitReason() == EBafPanicBadResourceFileFormat);
+
+ CLOSE_AND_WAIT(thread);
+
+ // Test EBafPanicBadArrayPosition
+ rc = thread.Create(KName,TestPanicBadArrayPosition,KThreadStackSize,KThreadMinHeapSize,KThreadMaxHeapSize,NULL);
+
+ TEST(rc==KErrNone);
+
+ thread.Logon(status);
+ thread.Resume();
+
+ User::WaitForRequest(status);
+
+ // Should result in a EExitPanic exit type and an EBafPanicBadArrayPosition exit reason
+ TEST(thread.ExitType() == EExitPanic);
+ TEST(thread.ExitReason() == EBafPanicBadArrayPosition);
+
+ thread.Close();
+
+ User::SetJustInTime(jitEnabled);
+ }
+
+
+void DoTestsL()
+{
+ TheTest.Next(_L("Calling the tests"));
+ TheFs.Connect();
+ CleanupClosePushL(TheFs);
+
+ DoTests1();//Getting the resource file names from literals
+ DoTests2();//Getting the resource file names by performing a search on the file system
+ NamedPluginsPanicConditionsThread(); // Test Panic condition
+
+ CleanupStack::PopAndDestroy(); // TheFs
+}
+
+TInt E32Main()
+{
+ __UHEAP_MARK;
+
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ TheTest.Title();
+ TheTest.Start(_L("Testing CBaNamedPlugins Class"));
+ TRAPD(err,DoTestsL());
+ TEST2(err,KErrNone);
+ TheTest.End();
+ TheTest.Close();
+ delete cleanup;
+
+ __UHEAP_MARKEND;
+ return(0);
+}