--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/buffer/d_version.cpp Wed Sep 22 10:53:45 2010 +0100
@@ -0,0 +1,240 @@
+// Copyright (c) 2010 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:
+// e32test\buffer\d_version.cpp
+// LDD for testing kernel side of TVersion
+//
+//
+
+#include <kernel/kern_priv.h>
+#include "d_version.h"
+
+class DVersionTestFactory : public DLogicalDevice
+//
+// VersionTest LDD factory
+//
+ {
+public:
+ DVersionTestFactory();
+ ~DVersionTestFactory();
+ virtual TInt Install(); //overriding pure virtual
+ virtual void GetCaps(TDes8& aDes) const; //overriding pure virtual
+ virtual TInt Create(DLogicalChannelBase*& aChannel); //overriding pure virtual
+ };
+
+class DVersionTest : public DLogicalChannelBase
+//
+// VersionTest LDD channel
+//
+ {
+public:
+ DVersionTest();
+ ~DVersionTest();
+protected:
+ virtual TInt DoCreate(TInt aUnit, const TDesC8* anInfo, const TVersion& aVer);
+ virtual TInt Request(TInt aFunction, TAny* a1, TAny* a2);
+private:
+ TBool QVS(TInt aCurrent,TInt aRequested);
+ TVersion* iTV[KNumTVersions];
+ TVersion iDefTV; // tests default constructor
+ };
+
+LOCAL_D const TText* Names[]=
+ {
+ _S("0.00(0)"),
+ _S("0.00(0)"),
+ _S("0.00(1)"),
+ _S("0.00(999)"),
+ _S("0.01(0)"),
+ _S("0.01(1)"),
+ _S("0.01(999)"),
+ _S("0.99(0)"),
+ _S("0.99(1)"),
+ _S("0.99(999)"),
+ _S("1.00(0)"),
+ _S("1.00(1)"),
+ _S("1.00(999)"),
+ _S("1.01(0)"),
+ _S("1.01(1)"),
+ _S("1.01(999)"),
+ _S("1.99(0)"),
+ _S("1.99(1)"),
+ _S("1.99(999)"),
+ _S("99.00(0)"),
+ _S("99.00(1)"),
+ _S("99.00(999)"),
+ _S("99.01(0)"),
+ _S("99.01(1)"),
+ _S("99.01(999)"),
+ _S("99.99(0)"),
+ _S("99.99(1)"),
+ _S("99.99(999)")
+ };
+
+DVersionTestFactory::DVersionTestFactory()
+//
+// Constructor
+//
+ {
+ }
+
+//
+// Destructor
+//
+DVersionTestFactory::~DVersionTestFactory()
+ {
+ }
+
+TInt DVersionTestFactory::Create(DLogicalChannelBase*& aChannel)
+//
+// Create
+//
+ {
+ aChannel=new DVersionTest;
+ return aChannel?KErrNone:KErrNoMemory;
+ }
+
+TInt DVersionTestFactory::Install()
+//
+// Install the LDD - overriding pure virtual
+//
+ {
+ return SetName(&KVersionTestLddName);
+ }
+
+void DVersionTestFactory::GetCaps(TDes8& /*aDes*/) const
+//
+// Get capabilities - overriding pure virtual
+//
+ {
+ // Not used but required as DLogicalDevice::GetCaps is pure virtual
+ }
+
+DECLARE_STANDARD_LDD()
+ {
+ return new DVersionTestFactory;
+ }
+
+DVersionTest::DVersionTest()
+//
+// Constructor
+//
+ {
+ iTV[0]=&iDefTV;
+ TInt i=1;
+ TInt major=0;
+ FOREVER
+ {
+ TInt minor=0;
+ FOREVER
+ {
+ TInt build=0;
+ FOREVER
+ {
+ iTV[i++]=new TVersion(major,minor,build);
+ if (build==999)
+ {
+ break;
+ }
+ build=(build==1? 999: 1);
+ }
+ if (minor==99)
+ {
+ break;
+ }
+ minor=(minor==1? 99: 1);
+ }
+ if (major==99)
+ {
+ break;
+ }
+ major=(major==1? 99: 1);
+ }
+ }
+
+TInt DVersionTest::DoCreate(TInt /*aUnit*/, const TDesC8* /*anInfo*/, const TVersion& /*aVer*/)
+//
+// Create channel
+//
+ {
+ return KErrNone;
+ }
+
+DVersionTest::~DVersionTest()
+//
+// Destructor
+//
+ {
+ }
+
+TInt DVersionTest::Request(TInt aFunction, TAny* /*a1*/, TAny* /*a2*/)
+ {
+ TInt r=KErrNone;
+ switch (aFunction)
+ {
+ case RVersionTest::EVersionTestName:
+ {
+ //
+ // Test the version name
+ //
+ {
+ for (TInt i=0; i<KNumTVersions; i++)
+ {
+ TPtrC Name=(TPtrC)Names[i];
+ if (iTV[i]->Name().Compare(Name))
+ {
+ r=KErrNotSupported;
+ return r;
+ }
+ }
+ }
+ break;
+ }
+ case RVersionTest::EVersionTestQVS:
+ {
+ //
+ // Check QueryVersionSupported()
+ //
+ for (TInt i=0; i<KNumTVersions; i++)
+ {
+ for (TInt j=0; j<KNumTVersions; j++)
+ {
+ if (Kern::QueryVersionSupported(*iTV[i],*iTV[j])!=QVS(i,j))
+ {
+ r=KErrNotSupported;
+ return r;
+ }
+ }
+ }
+
+ break;
+ }
+ default:
+ break;
+ }
+ return r;
+ }
+
+TBool DVersionTest::QVS(TInt aCurrent,TInt aRequested)
+//
+// An independent calculation of what QueryVersionSupported should return
+//
+ {
+ if (aCurrent)
+ aCurrent--;
+ if (aRequested)
+ aRequested--;
+ aCurrent/=3;
+ aRequested/=3;
+ return(aCurrent>=aRequested);
+ }