diff -r 000000000000 -r a41df078684a kerneltest/e32test/examples/driver1/driver1_test.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/examples/driver1/driver1_test.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,167 @@ +// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "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: +// + +/** + @file Test code for example Device Driver + @publishedPartner + @released +*/ + +#include +#include +#include +#include "driver1.h" + +LOCAL_D RTest test(_L("DRIVER1_TEST")); + +_LIT(KDriver1LddFileName,"DRIVER1_LDD"); +_LIT(KDriver1PddFileName,"DRIVER1_PDD"); + +_LIT8(KTestSendData,"abcdefghijklmnopqrstuvwxyz"); + +GLDEF_C TInt E32Main() + { + test.Title(); + + TInt r; + + test.Start(_L("Load Physical Device")); + r=User::LoadPhysicalDevice(KDriver1PddFileName); + test(r==KErrNone || r==KErrAlreadyExists); + + test.Next(_L("Load Logical Device")); + r=User::LoadLogicalDevice(KDriver1LddFileName); + test(r==KErrNone || r==KErrAlreadyExists); + + __KHEAP_MARK; + + test.Next(_L("Open Device")); + RDevice device; + r=device.Open(RDriver1::Name()); + test(r==KErrNone); + + test.Next(_L("Get Device Capabilities")); + RDriver1::TCaps caps; + TPckgcapsPckg(caps); + capsPckg.FillZ(); // Zero 'caps' so we can tell if GetCaps has really filled it + device.GetCaps(capsPckg); + TVersion expectedVer(RDriver1::VersionRequired()); + test(caps.iVersion.iMajor==expectedVer.iMajor); + test(caps.iVersion.iMinor==expectedVer.iMinor); + test(caps.iVersion.iBuild==expectedVer.iBuild); + + test.Next(_L("Close Device")); + device.Close(); + + test.Next(_L("Open Logical Channel")); + RDriver1 ldd; + r=ldd.Open(); + test(r==KErrNone); + + test.Next(_L("GetConfig")); + RDriver1::TConfigBuf configBuf; + configBuf.FillZ(); // Zero 'config' so we can tell if GetConfig has really filled it + r=ldd.GetConfig(configBuf); + test(r==KErrNone); + + RDriver1::TConfig& config=configBuf(); + test(config.iPddBufferSize!=0); + test(config.iMaxSendDataSize!=0); + test(config.iMaxReceiveDataSize!=0); + + test.Next(_L("SetConfig")); + TInt speed = configBuf().iSpeed+1; + configBuf().iSpeed = speed; + r=ldd.SetConfig(configBuf); // Use SetConfig to change speed + test(r==KErrNone); + + configBuf.FillZ(); + r=ldd.GetConfig(configBuf); + test(r==KErrNone); + test(configBuf().iSpeed==speed); + + test.Next(_L("Check access by wrong client")); + RDriver1 ldd2=ldd; + r=ldd2.Duplicate(RThread(),EOwnerProcess); + test(r==KErrAccessDenied); + + test.Next(_L("Check handle duplication")); + ldd2=ldd; + r=ldd2.Duplicate(RThread(),EOwnerThread); + test(r==KErrNone); + ldd2.Close(); + + test.Next(_L("SendData")); + TRequestStatus status; + ldd.SendData(status,KTestSendData); + + test.Next(_L("SendDataCancel")); + ldd.SendDataCancel(); + User::WaitForRequest(status); + r=status.Int(); + test(r==KErrCancel); + + test.Next(_L("SendData")); + ldd.SendData(status,KTestSendData); + User::WaitForRequest(status); + r=status.Int(); + test(r==KErrNone); + + test.Next(_L("ReceiveData")); + TBuf8<256> buffer; + ldd.ReceiveData(status,buffer); + + test.Next(_L("ReceiveDataCancel")); + ldd.ReceiveDataCancel(); + User::WaitForRequest(status); + r=status.Int(); + test(r==KErrCancel); + + test.Next(_L("ReceiveData")); + buffer.FillZ(buffer.MaxLength()); + buffer.Zero(); + ldd.ReceiveData(status,buffer); + User::WaitForRequest(status); + r=status.Int(); + test(r==KErrNone); + + TInt expectedSize = config.iPddBufferSize; + if(expectedSize>(&KTestSendData)->Size()) + expectedSize = (&KTestSendData)->Size(); + test(buffer.Size()==expectedSize); + test(buffer==(&KTestSendData)->Right(expectedSize)); + + test.Next(_L("Close Logical Channel")); + ldd.Close(); + + __KHEAP_MARKEND; + + test.Next(_L("Unload Logical Device")); + r=User::FreeLogicalDevice(RDriver1::Name()); + test(r==KErrNone); + + test.Next(_L("Unload Physical Device")); + TName pddName(RDriver1::Name()); + _LIT(KVariantExtension,".template"); + pddName.Append(KVariantExtension); + r=User::FreePhysicalDevice(pddName); + test(r==KErrNone); + + test.End(); + + return(0); + } + +