diff -r 000000000000 -r bde4ae8d615e os/ossrv/lowlevellibsandfws/apputils/tsrc/T_CLIPB.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/ossrv/lowlevellibsandfws/apputils/tsrc/T_CLIPB.CPP Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,423 @@ +// Copyright (c) 1997-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: +// Started by DWW, October 1996 +// Tests cliboard +// +// + +#include +#include +#include +#include +#include +#include +#include + +LOCAL_D RTest test(_L("T_CLIPB")); + +const TUid KClipboardFileUid={268435515}; +const TUid KUidNameClipboardType={77001}; +const TUid KUidAddressClipboardType={77002}; +const TUid KUidNumberClipboardType={77003}; +const TUid KUidTestType={77004}; + +const TPtrC KClipboardFileCDrive=_L("C:\\System\\Data\\ClpBoard.cbd"); +const TPtrC KClipboardFileDDrive=_L("D:\\System\\Data\\ClpBoard.cbd"); +const TPtrC KClipboardFileEDrive=_L("E:\\System\\Data\\ClpBoard.cbd"); +/** + * NOTE :- On order to run this test in WINS, there must exist a mapping for the drives + * used above. So in Epoc32\Data add the following lines to epoc.ini... + * + * _epoc_drive_d \epoc32\wins\d + * _epoc_drive_e \epoc32\wins\e + * + * only needed for drive D & E as there is a mapping for drive C. + * Plus make sure that the the above directories (\epoc32\wins\d & e) exist. + */ + +class TClBase + { +public: + virtual void CopyToClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary) const=0; + virtual TBool PasteFromClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary)=0; + void CopyL(); + TBool PasteL(); + TBool PasteWithoutClipboardL(); +private: + void DoCopyL(RFs& aFsSession); + TBool DoPasteL(RFs& aFsSession); + }; + +void TClBase::CopyL() + { + RFs fsSession; + User::LeaveIfError(fsSession.Connect()); + TRAPD(err,DoCopyL(fsSession)); + fsSession.Close(); + User::LeaveIfError(err); + } + +void TClBase::DoCopyL(RFs& aFsSession) + { + CClipboard* cb=CClipboard::NewForWritingLC(aFsSession); + CopyToClipboardL(cb->Store(),cb->StreamDictionary()); + cb->CommitL(); + CleanupStack::PopAndDestroy(); + } + +TBool TClBase::PasteL() + { + RFs fsSession; + User::LeaveIfError(fsSession.Connect()); + TBool res=EFalse; + TRAPD(err,res=DoPasteL(fsSession)); + fsSession.Close(); + User::LeaveIfError(err); + return(res); + } + +TBool TClBase::DoPasteL(RFs& aFsSession) + { + CClipboard* cb=CClipboard::NewForReadingLC(aFsSession); + TBool res=PasteFromClipboardL(cb->Store(),cb->StreamDictionary()); + CleanupStack::PopAndDestroy(); + return(res); + } + +class TClName : public TClBase + { +public: + void CopyToClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary) const; + TBool PasteFromClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary); +public: + TBuf<4> iName; + }; + +class TClNameWithAddress : public TClName + { + void CopyToClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary) const; + TBool PasteFromClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary); +public: + TBuf<10> iAddress; + }; + +class TClNameWithNumber : public TClName + { + void CopyToClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary) const; + TBool PasteFromClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary); +public: + TInt32 iNumber; + }; + +class TClInteger : public TClBase + { +public: + void CopyToClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary) const; + TBool PasteFromClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary); +public: + TInt32 iInteger; + }; + +void TClName::CopyToClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary) const + { + RStoreWriteStream stream; + TStreamId streamId=stream.CreateLC(aStore); + stream<>iName; + CleanupStack::PopAndDestroy(); + return(ETrue); + } + +void TClNameWithAddress::CopyToClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary) const + { + TClName::CopyToClipboardL(aStore,aDictionary); + RStoreWriteStream stream; + TStreamId streamId=stream.CreateLC(aStore); + stream<>iAddress; + CleanupStack::PopAndDestroy(); + return(ETrue); + } + +void TClNameWithNumber::CopyToClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary) const + { + TClName::CopyToClipboardL(aStore,aDictionary); + RStoreWriteStream stream; + TStreamId streamId=stream.CreateLC(aStore); + stream<>iNumber; + CleanupStack::PopAndDestroy(); + return(ETrue); + } + +void TClInteger::CopyToClipboardL(CStreamStore& aStore,CStreamDictionary& aDictionary) const + { + RStoreWriteStream stream; + TStreamId streamId=stream.CreateLC(aStore); + stream<>iInteger; + CleanupStack::PopAndDestroy(); + return(ETrue); + } + +/** +@SYMTestCaseID SYSLIB-BAFL-CT-0404 +@SYMTestCaseDesc Tests the CClipboard::Store(),StreamDictionary functions +@SYMTestPriority High +@SYMTestActions Tests the clipboard's file store with various cases(no file,file in use,corrupt file,non-store file) +@SYMTestExpectedResults Tests must not fail +@SYMREQ REQ0000 +*/ +void TestErrorHandling(const TDesC& aTestPath) + { + + test.Next(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0404 ")); + TPtrC KClipboardFile(aTestPath); + RFs fs; + test (fs.Connect()==KErrNone); +// + test.Next(_L("No clipboard file")); + fs.Delete(KClipboardFile); + test (CClipboard::Clear(fs)==KErrNone); + CClipboard* cb=NULL; + TRAPD(err,cb=CClipboard::NewForReadingL(fs)); + test (err==KErrNone); + test (&cb->Store()==NULL); + test (&cb->StreamDictionary()!=NULL); + test (cb->StreamDictionary().IsNull()); + delete cb; +// + test.Next(_L("In use")); + RFile file; + test (file.Create(fs,KClipboardFile,EFileRead|EFileWrite)==KErrNone); + TRAP(err,cb=CClipboard::NewForReadingL(fs)); + test (err==KErrNone); + test (&cb->Store()==NULL); + test (&cb->StreamDictionary()!=NULL); + test (cb->StreamDictionary().IsNull()); + delete cb; +// + test.Next(_L("Clear while in use")); + test (CClipboard::Clear(fs)==KErrInUse); +// + test.Next(_L("Bogus clipboard file")); + file.Close(); + TRAP(err,cb=CClipboard::NewForReadingL(fs)); + test (err==KErrNone); + test (&cb->Store()==NULL); + test (&cb->StreamDictionary()!=NULL); + test (cb->StreamDictionary().IsNull()); + delete cb; +// + test.Next(_L("Non-store file")); + test (file.Replace(fs,KClipboardFile,EFileRead|EFileWrite)==KErrNone); + test (file.Write(_L8("some data which does not make this a file store"))==KErrNone); + file.Close(); + TRAP(err,cb=CClipboard::NewForReadingL(fs)); + test (err==KErrNone); + test (&cb->Store()==NULL); + test (&cb->StreamDictionary()!=NULL); + test (cb->StreamDictionary().IsNull()); + delete cb; +// + test.Next(_L("Wrong type file")); + CFileStore* store=CDirectFileStore::ReplaceLC(fs,KClipboardFile,EFileRead|EFileWrite); + store->SetTypeL(TUidType(KDirectFileStoreLayoutUid,KUidTestType)); + store->CommitL(); + CleanupStack::PopAndDestroy(); + TRAP(err,cb=CClipboard::NewForReadingL(fs)); + test (err==KErrNone); + test (&cb->Store()==NULL); + test (&cb->StreamDictionary()!=NULL); + test (cb->StreamDictionary().IsNull()); + delete cb; +// + test.Next(_L("Corrupted clipboard")); + store=CDirectFileStore::ReplaceLC(fs,KClipboardFile,EFileRead|EFileWrite); + store->SetTypeL(TUidType(KDirectFileStoreLayoutUid,KClipboardFileUid)); + store->CommitL(); + CleanupStack::PopAndDestroy(); + TRAP(err,cb=CClipboard::NewForReadingL(fs)); + test (err==KErrNone); + test (&cb->Store()==NULL); + test (&cb->StreamDictionary()!=NULL); + test (cb->StreamDictionary().IsNull()); + delete cb; +// + test.Next(_L("Clear clipboard")); + test (CClipboard::Clear(fs)==KErrNone); + TRAP(err,cb=CClipboard::NewForReadingL(fs)); + test (err==KErrNone); + test (&cb->Store()==NULL); + test (&cb->StreamDictionary()!=NULL); + test (cb->StreamDictionary().IsNull()); + delete cb; +// +#if defined(_DEBUG) + test.Next(_L("Out of memory failure")); +// + cb=CClipboard::NewForWritingLC(fs); + RStoreWriteStream stream; + TStreamId testId=stream.CreateLC(cb->Store()); + stream.WriteInt32L(0); + stream.CommitL(); + CleanupStack::PopAndDestroy(); + cb->StreamDictionary().AssignL(KUidTestType,testId); + cb->CommitL(); + CleanupStack::PopAndDestroy(); +// + __UHEAP_MARK; + for (TInt ii=0;;++ii) + { + __UHEAP_FAILNEXT(ii); + TRAP(err,cb=CClipboard::NewForReadingL(fs)); + if (err==KErrNone) + break; + test(err==KErrNoMemory); + __UHEAP_CHECK(0); + } + __UHEAP_RESET; + test (&cb->Store()!=NULL); + test (cb->StreamDictionary().At(KUidTestType)==testId); + delete cb; + __UHEAP_MARKEND; +// +#endif +// + test.Next(_L("Fail to commit clipboard")); + TRAP(err,cb=CClipboard::NewForWritingLC(fs);CleanupStack::Pop()); + test (err==KErrNone); + delete cb; + test (!BaflUtils::FileExists(fs,KClipboardFile)); +// + fs.Close(); + } + +/** +@SYMTestCaseID SYSLIB-BAFL-CT-0405 +@SYMTestCaseDesc Tests the CClipboard::NewForWritingLC,NewForReadingL +@SYMTestPriority High +@SYMTestActions Tests for copy and paste operations on TClName,TClNameWithAddress,TClInteger,TClNameWithNumber +@SYMTestExpectedResults Tests must not fail +@SYMREQ REQ0000 +*/ +void DoTestsOnDrive(const TDesC& aDrivePath) + { + test.Start(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0405 Test single paste ")); + TClName n1,n2; + n1.iName=_L("Fred"); + n2.iName=_L("Dino"); + n1.CopyL(); + TClNameWithAddress na1,na2; + test(na1.PasteL()); + n2.CopyL(); + test(na2.PasteL()); + test(na1.iName==_L("Fred")); + test(na2.iName==_L("Dino")); + na1.iAddress=_L("Bedrock"); + test.Next(_L("Test double paste")); + na1.CopyL(); + test(na2.PasteL()); + test(na2.iAddress==_L("Bedrock")); + test(na2.iName==_L("Fred")); + test.Next(_L("Test paste failure if type not present")); + TClInteger i1,i2; + test(!i1.PasteL()); + test.Next(_L("Test selecting the right data type")); + TClNameWithNumber nn1,nn2; + nn1.iNumber=36363; + test(nn1.PasteL()); + test(nn1.iNumber==36363); + test(nn1.iName==_L("Fred")); + nn1.iName=_L("Wilm"); + nn1.CopyL(); + test(i2.PasteL()); + test(i2.iInteger==36363); + test(n1.PasteL()); + test(n1.iName==_L("Wilm")); + test(nn2.PasteL()); + test(nn2.iName==_L("Wilm")); + test(nn2.iNumber==36363); +// + TestErrorHandling(aDrivePath); + test.End(); + } + +void DoTests() + { + // Tests for the HAL attribute ClipboardDrive set in the device. + // C Drive + DoTestsOnDrive(KClipboardFileCDrive); + } + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + CTrapCleanup *cleanup=CTrapCleanup::New(); + test.Title(); + test.Start(_L("Testing CClipboard ")); + TRAPD(err,DoTests()); + test(err==KErrNone); + test.End(); + test.Close(); + delete cleanup; + __UHEAP_MARKEND; + return(0); + }