datasourceadaptation/gpsdatasourceadaptation/psytester/psytester/src/epos_cpospsydirectioncapabilitytest.cpp
changeset 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datasourceadaptation/gpsdatasourceadaptation/psytester/psytester/src/epos_cpospsydirectioncapabilitytest.cpp	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,221 @@
+// Copyright (c) 2004-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:
+//
+
+
+
+// INCLUDE FILES
+#include <lbssatellite.h>
+#include "epos_cpospsydirectioncapabilitytest.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ constructor can NOT contain any code, that
+// might leave.
+//
+CPosPSYDirectionCapabilityTest::CPosPSYDirectionCapabilityTest(
+    CPosPSYResults& aResults,
+    const RPointerArray<TPositionInfo>& aPositionArray,
+    const TPosPSYInfo& aPSYInfo)
+    {
+    BaseConstruct(aResults, aPositionArray, aPSYInfo);
+    }
+
+// Two-phased constructor.
+CPosPSYDirectionCapabilityTest* CPosPSYDirectionCapabilityTest::NewLC(
+    CPosPSYResults& aResults,
+    const RPointerArray<TPositionInfo>& aPositionArray,
+    const TPosPSYInfo& aPSYInfo)
+    {
+    CPosPSYDirectionCapabilityTest* self = 
+        new (ELeave) CPosPSYDirectionCapabilityTest(aResults, aPositionArray, aPSYInfo);
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+// Destructor
+CPosPSYDirectionCapabilityTest::~CPosPSYDirectionCapabilityTest()
+    {
+    }
+
+// ---------------------------------------------------------
+// CPosPSYDirectionCapabilityTest::TestCapabilityL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosPSYDirectionCapabilityTest::TestCapabilityL()
+    {
+    if (iPositionArray->Count())
+        {
+        TestCapabilityForCourseInfoL();
+        CheckResultsL();
+        TestCapabilityForGenericInfoL();
+        CheckResultsL();
+        }
+    }
+
+// ---------------------------------------------------------
+// CPosPSYDirectionCapabilityTest::CheckResultsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosPSYDirectionCapabilityTest::CheckResultsL()
+    {
+    TBuf<KCapabilityBufSize> buf;
+    
+    if (!iHeadingNotSet &&
+        !iHeadingErrorNotSet &&
+        !iHeadingCombinationError &&
+        iTestingPerformed)
+        {
+        _LIT(KInfo,"Direction tests where completed successfully.");
+        AddResultL(KInfo, EInfoMessage);
+        }
+    else
+        {
+        // Not set checks
+        if (iHeadingNotSet > 0)
+            {
+            _LIT(KError,"Heading not set in %d of %d cases.");
+            buf.Format(KError, iHeadingNotSet, iPositionArray->Count());
+            AddResultL(buf, EErrorMessage);
+            }
+        if (iHeadingErrorNotSet > 0)
+            {
+            _LIT(KWarning,"Heading Error not set in %d of %d cases.");
+            buf.Format(KWarning, iHeadingErrorNotSet, iPositionArray->Count());
+            AddResultL(buf, EWarningMessage);
+            }
+        // Combination checks
+        if (iHeadingCombinationError > 0)
+            {
+            _LIT(KError,"Heading Error set but not Heading in %d of %d cases.");
+            buf.Format(KError, iHeadingCombinationError, (iPositionArray->Count()-iHeadingNotSet));
+            AddResultL(buf, EErrorMessage);
+            }
+        }
+    
+    ResetResults();
+    }
+
+// ---------------------------------------------------------
+// CPosPSYDirectionCapabilityTest::ResetResults
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosPSYDirectionCapabilityTest::ResetResults()
+    {
+    iHeadingNotSet = 0;
+    iHeadingErrorNotSet = 0;
+    iHeadingCombinationError = 0;
+    iTestingPerformed = EFalse;
+    }
+
+// ---------------------------------------------------------
+// CPosPSYDirectionCapabilityTest::TestCapabilityForCourseInfoL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosPSYDirectionCapabilityTest::TestCapabilityForCourseInfoL()
+    {
+    if ((*iPositionArray)[0]->PositionClassType() & EPositionCourseInfoClass)
+        {   
+        _LIT(KInfo,"---- Testing Direction Capability ----");
+        AddResultL(KInfo, EDisplayMessage);
+        for (TInt i = 0; i < iPositionArray->Count(); i++)
+            {
+            TCourse courseInfo;
+            static_cast<TPositionCourseInfo*>((*iPositionArray)[i])->GetCourse(courseInfo);        
+            TRealX heading (courseInfo.Heading());
+            TRealX headingError (courseInfo.HeadingAccuracy());
+            iTestingPerformed = ETrue;
+
+            if (heading.IsNaN())
+                {   
+                if (headingError.IsNaN())
+                    {
+                    iHeadingErrorNotSet++;
+                    }
+                else
+                    {
+                    iHeadingCombinationError++;
+                    }
+                iHeadingNotSet++;
+                }
+            else
+                {
+                if (headingError.IsNaN())
+                    {
+                    iHeadingErrorNotSet++;
+                    }
+                }
+            } 
+        }
+    }
+
+// ---------------------------------------------------------
+// CPosPSYDirectionCapabilityTest::TestCapabilityForGenericInfoL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosPSYDirectionCapabilityTest::TestCapabilityForGenericInfoL()
+    {
+    if ((*iPositionArray)[0]->PositionClassType() & EPositionGenericInfoClass)
+		{
+		_LIT(KInfo,"---- Testing Direction Capability for Generic Info----");
+		AddResultL(KInfo, EDisplayMessage);
+		if (iPSYInfo.Capabilities() & TPositionModuleInfo::ECapabilityDirection)
+			{
+			for (TInt i = 0; i < iPositionArray->Count(); i++)
+				{ 
+				HPositionGenericInfo* genInfo = static_cast<HPositionGenericInfo*> ((*iPositionArray)[i]);
+				TReal32 heading = 0;
+				TReal32 headingError = 0;
+				iTestingPerformed = ETrue;
+            
+				if (genInfo->GetValue(EPositionFieldHeading, heading) == KErrNotFound)
+					{   
+					if (genInfo->GetValue(EPositionFieldHeadingError, headingError) == KErrNotFound)
+						{
+						iHeadingErrorNotSet++;
+						}
+					else
+						{
+						iHeadingCombinationError++;
+						}
+					iHeadingNotSet++;
+					}
+				else
+					{
+					if (genInfo->GetValue(EPositionFieldHeadingError, headingError) == KErrNotFound)
+						{
+						iHeadingErrorNotSet++;
+						}         
+					}
+				}
+			}
+		 else
+			{
+			_LIT(KNotSupported, "Direction capability not checked because capability not supported.");
+			AddResultL(KNotSupported, EInfoMessage);
+			}
+		}
+    }
+
+//  End of File