--- /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 <e32test.h>
+#endif
+
+#include <s32mem.h>
+
+//
+// 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<TEntry>* iCheat;
+ };
+
+CTestStreamDictionary* CTestStreamDictionary::NewL()
+ {
+ CTestStreamDictionary* thing=new(ELeave) CTestStreamDictionary();
+//* CleanupStack::PushL(thing);
+//* thing->ConstructL();
+//* CleanupStack::Pop();
+ return thing;
+ }
+
+CTestStreamDictionary::CTestStreamDictionary()
+ : iCheat((CArrayFixSeg<TEntry>*)&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 <class T1,class T2>
+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<<anOriginal);
+ test(r==KErrNone);
+ TRAP(r,out.CommitL());
+ if (r!=KErrNone)
+ test.Panic(_L("Committing write stream"));
+//
+// Read anOriginal in from the buffer.
+//
+ RBufReadStream in(*buf);
+ TRAP(r,in>>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 ; i<origCount ; i++)
+ {
+ test(aOrig->Uid(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;
+ }
+