kerneltest/e32test/buffer/d_version.cpp
changeset 271 dc268b18d709
--- /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);
+    }