diff -r 000000000000 -r 08ec8eefde2f persistentstorage/store/TSTOR/t_stordict.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/persistentstorage/store/TSTOR/t_stordict.cpp Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,275 @@ +// Copyright (c) 1998-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: +// + +#if !defined(__E32TEST_H__) +#include +#endif + +#include + +// +// CTestStreamDictionary +// + +class CTestStreamDictionary : public CStreamDictionary + { +public: + struct TEntry {TUid uid;TStreamId id;}; +public: + static CTestStreamDictionary* NewL(); + CTestStreamDictionary(); +//* TUid Uid(TInt aInt) { return (*iEntryList)[aInt].iUid; } +//* TStreamId StreamId(TInt aInt) { return (*iEntryList)[aInt].iStreamId; } +//* TInt Count() { return iEntryList->Count(); } + TUid Uid(TInt aInt) { return (*iCheat)[aInt].uid; } + TStreamId StreamId(TInt aInt) { return (*iCheat)[aInt].id; } + TInt Count() { return iCheat->Count(); } +private: + CArrayFixSeg* iCheat; + }; + +CTestStreamDictionary* CTestStreamDictionary::NewL() + { + CTestStreamDictionary* thing=new(ELeave) CTestStreamDictionary(); +//* CleanupStack::PushL(thing); +//* thing->ConstructL(); +//* CleanupStack::Pop(); + return thing; + } + +CTestStreamDictionary::CTestStreamDictionary() + : iCheat((CArrayFixSeg*)&iCheat-1) // modification to get to count etc + {} + + +// +// Test code +// + +const TInt KTestCleanupStack=0x40; +const TInt KTestExpandSize=0x20; + +LOCAL_D RTest test(_L("t_stordict")); +LOCAL_D CTrapCleanup* TheTrapCleanup; + +// some uid-stream pairs to use for testing +const TUid testUid1={1}; +LOCAL_D TStreamId testStreamId1=TStreamId(1); +// +const TUid testUid2={57}; +LOCAL_D TStreamId testStreamId2=TStreamId(57); +// +const TUid testUid3={99999}; +LOCAL_D TStreamId testStreamId3=TStreamId(425); +// + +/** +@SYMTestCaseID SYSLIB-STORE-CT-1201 +@SYMTestCaseDesc Tests for copy operations on dictionary files +@SYMTestPriority High +@SYMTestActions Attempt for copying two classes using memory based streams. +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +template +void testCopyL(T1& aCopy,const T2& anOriginal) + { + test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1201 ")); + CBufSeg* buf=0; + TRAPD(r,buf=CBufSeg::NewL(KTestExpandSize)); + if (r!=KErrNone) + test.Panic(_L("Allocating buffer")); +// +// Write anOriginal out to the buffer. +// + RBufWriteStream out; + out.Append(*buf); + TRAP(r,out<>aCopy); + test(r==KErrNone); +// +// See if it's consumed the lot. +// + TUint8 b; + test(in.Source()->ReadL(&b,1)==0); +// + delete buf; + } + +/** +@SYMTestCaseID SYSLIB-STORE-CT-1202 +@SYMTestCaseDesc Tests if two dictionary files are equal +@SYMTestPriority High +@SYMTestActions Tests if count of entries,UID and streamID's are equal +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +void testIsEqual(CTestStreamDictionary* aCopy,CTestStreamDictionary* aOrig) + { + test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1202 ")); + TInt origCount=aOrig->Count(); + test(origCount==aCopy->Count()); + // + for (TInt i=0 ; iUid(i)==aCopy->Uid(i)); + test(aOrig->StreamId(i)==aCopy->StreamId(i)); + } + } + +/** +@SYMTestCaseID SYSLIB-STORE-CT-1203 +@SYMTestCaseDesc Tests for simple operations on a dictionary file +@SYMTestPriority High +@SYMTestActions Tests for assign,re-assigning,removing entries from the file +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +LOCAL_C void simpleTestsL() + { + CTestStreamDictionary* dic=CTestStreamDictionary::NewL(); + // attempt finding and removing with an empty dictionary + test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1203 Manipulating an empty dictionary ")); + test(dic->Count()==0); + test(dic->At(testUid1)==KNullStreamId); + dic->Remove(testUid1); + test(dic->Count()==0); + test(dic->IsNull()); + // + // assign an entry + test.Next(_L("Assigning entries and manipulating them")); + TRAPD(ret,dic->AssignL(testUid1,testStreamId1)); + test(ret==KErrNone); + test(dic->Count()==1); + test(!dic->IsNull()); + test(dic->At(testUid1)==testStreamId1); + // + // assign another entry + TRAP(ret,dic->AssignL(testUid2,testStreamId2)); + test(ret==KErrNone); + test(dic->Count()==2); + test(dic->At(testUid2)==testStreamId2); + // + // re-assign uid1 + TRAP(ret,dic->AssignL(testUid1,testStreamId3)); + test(ret==KErrNone); + test(dic->Count()==2); + test(dic->At(testUid1)==testStreamId3); + // + // test finding and removing a non-existant entry from a non-empty dictionary + test(dic->At(testUid3)==KNullStreamId); + dic->Remove(testUid3); + test(dic->Count()==2); + // + // test removing an entry + dic->Remove(testUid1); + test(dic->Count()==1); + test(dic->At(testUid1)==KNullStreamId); + test(dic->At(testUid2)==testStreamId2); + test(!dic->IsNull()); + // + // test removing the other entry + dic->Remove(testUid2); + test(dic->Count()==0); + test(dic->IsNull()); + test(dic->At(testUid1)==KNullStreamId); + test(dic->At(testUid2)==KNullStreamId); + // + delete dic; + } + +/** +@SYMTestCaseID SYSLIB-STORE-CT-1204 +@SYMTestCaseDesc Streaming dictionary files tests +@SYMTestPriority High +@SYMTestActions Tests for copying an empty dictionary and dictionary containing different sets of entries + Tests for equality of two dictionary files and test the copied file. +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +LOCAL_C void streamingTestsL() + { + CTestStreamDictionary* orig=CTestStreamDictionary::NewL(); + CTestStreamDictionary* copy=CTestStreamDictionary::NewL(); + // + // copy an empty dictionary + test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1204 Streaming an empty dictionary ")); + test(orig->IsNull()); + testCopyL(*copy,*orig); + test(copy->IsNull()); + // + // copy a dictionary containing a range of entries + test.Next(_L("Streaming a dictionary containing entries")); + TRAPD(ret,orig->AssignL(testUid1,testStreamId1)); + TRAP(ret,orig->AssignL(testUid2,testStreamId2)); + TRAP(ret,orig->AssignL(testUid3,testStreamId3)); + testCopyL(*copy,*orig); + testIsEqual(copy,orig); + test(!copy->IsNull()); + // + delete orig; + delete copy; + } + + +// +// Initialise the cleanup stack. +// +LOCAL_C void setupCleanup() + { + TheTrapCleanup=CTrapCleanup::New(); + TRAPD(r,\ + {\ + for (TInt i=KTestCleanupStack;i>0;i--)\ + CleanupStack::PushL((TAny*)1);\ + test(r==KErrNone);\ + CleanupStack::Pop(KTestCleanupStack);\ + }); + } + + +GLDEF_C TInt E32Main() + { + setupCleanup(); + // + test.Title(); + test.Start(_L("Testing CStreamDictionary...")); + // + // run the testcode (inside an alloc heaven harness) + __UHEAP_MARK; + + TRAPD(r,simpleTestsL()); + test(r==KErrNone); + + TRAP(r,streamingTestsL()); + test(r==KErrNone); + + __UHEAP_MARKEND; + + test.End(); + test.Close(); + + delete TheTrapCleanup; + return KErrNone; + } +