landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp144.cpp
branchRCL_3
changeset 44 2b4ea9893b66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp144.cpp	Tue Aug 31 15:37:04 2010 +0300
@@ -0,0 +1,320 @@
+/*
+* Copyright (c) 2005 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: 
+*   ?description_line
+*
+*/
+
+
+//  INCLUDES
+
+#include "FT_CPosTp144.h"
+#include <e32math.h>
+#include <LbsPosition.h>
+
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_PosLandmarkSerialization.h>
+#include <EPos_PosLmCategorySerialization.h>
+           
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp144::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp144::StartL()
+    {  
+    
+  		CheckLmSerializationL();
+  		
+	}
+
+// ---------------------------------------------------------
+// CPosTp144::DumpBuffer
+//
+// ---------------------------------------------------------
+
+void CPosTp144::DumpBuffer(const TDesC8& aBuffer)
+    {
+    DECLARE_ERROR_LOGGING;
+    LOG("=== Buffer Dump ===");
+    message.Format(_L("Buffer size = %d units"), aBuffer.Length());
+    LOG_DES(message);
+    for (TInt i = 0; i < aBuffer.Length(); i++)
+        {
+        _LIT(KByte, "Offset %4d = % 2d");
+        _LIT(KChar, "Offset %4d = % 2c");
+        TUint8 c = aBuffer[i];
+        if (TChar(c).IsAlphaDigit())
+            {
+            message.Format(KChar, i, c);
+            }
+        else
+            {
+            message.Format(KByte, i, TInt(c));
+            }
+        LOG_DES(message);
+        }
+    LOG("===================");
+    }
+// ---------------------------------------------------------
+// CPosTp144::CompareBuffers
+//
+// ---------------------------------------------------------
+    
+void CPosTp144::CompareBuffers(
+    const TDesC8& aBuf1,
+    const TDesC8& aBuf2)
+    {
+    DECLARE_ERROR_LOGGING;
+
+    CHECK_EQUAL(aBuf1.Length(), aBuf2.Length(), "Different buffer lengths");
+    for (TInt i = 0; i < Min(aBuf1.Length(), aBuf2.Length()); i++)
+        {
+        TInt c1 = aBuf1[i], c2 = aBuf2[i];
+        if (c1 != c2)
+            {
+            _LIT(KMessage, "Different at offset %d (actual = %d, expected %d)");
+            message.Format(KMessage, i, c1, c2);
+            ERR_DES(message);
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CPosTp144::CreateDummyLandmarkLC
+//
+// ---------------------------------------------------------
+    
+CPosLandmark* CPosTp144::CreateDummyLandmarkLC()
+    {
+    CPosLandmark* lm = CPosLandmark::NewLC();
+
+    _LIT(KName, "Name");
+    _LIT(KDesc, "Description");
+    _LIT(KIcon, "IconFile");
+    const TInt KIconIndex = 1, KIconMaskIndex = 2;
+
+    const TPosLmItemId KCat[] = { 3, 4, 5 };
+    const TInt KCats = sizeof KCat / sizeof(TPosLmItemId);
+
+    _LIT(KField1Val, "field1");
+    _LIT(KField2Val, "field11");
+    const TPositionFieldId KField[] =
+        {
+        EPositionFieldComment,
+        EPositionFieldCountry
+        };
+    const TInt KFields = sizeof KField / sizeof(TPositionFieldId);
+    const TPtrC KFieldData[] =
+        {
+        KField1Val(), KField2Val()
+        };
+
+    const TReal32 KRadius = 0.12;
+    const TReal32 KHacc = 0.23, KVacc = 0.34;
+    const TReal KLat = 12, KLon = -23, KAlt = 34;
+
+    lm->SetLandmarkNameL(KName);
+    lm->SetLandmarkDescriptionL(KDesc);
+    lm->SetIconL(KIcon, KIconIndex, KIconMaskIndex);
+
+    const TLocality KLoc(TCoordinate(KLat,KLon,KAlt), KHacc, KVacc);
+    lm->SetPositionL(KLoc);
+    lm->SetCoverageRadius(KRadius);
+
+    for (TInt c = 0; c < KCats; c++)
+        {
+        lm->AddCategoryL(KCat[c]);
+        }
+
+    for (TInt f = 0; f < KFields; f++)
+        {
+        lm->SetPositionFieldL(KField[f], KFieldData[f]);
+        }
+
+    return lm;
+    }
+
+// ---------------------------------------------------------
+// CPosTp144::CompareLandmarks
+//
+// ---------------------------------------------------------
+
+void CPosTp144::CompareLandmarks(
+    CPosLandmark& aLm1,
+    CPosLandmark& aLm2)
+    {
+    DECLARE_ERROR_LOGGING;
+
+    TPtrC name1, name2;
+
+    CHECK_EQUAL(aLm1.LandmarkId(), aLm2.LandmarkId(), "Diff id");
+    CHECK_EQUAL(aLm1.IsPartial(), aLm2.IsPartial(), "Diff partial state");
+
+    aLm1.GetLandmarkName(name1);
+    aLm2.GetLandmarkName(name2);
+    ERROR(name1 != name2, "Diff name");
+
+    aLm1.GetLandmarkDescription(name1);
+    aLm2.GetLandmarkDescription(name2);
+    ERROR(name1 != name2, "Diff description");
+
+    TInt iconIndex1 = 0, iconMaskIndex1 = 0;
+    TInt iconIndex2 = 1, iconMaskIndex2 = 2;
+
+    TInt found1 = aLm1.GetIcon(name1, iconIndex1, iconMaskIndex1);
+    TInt found2 = aLm2.GetIcon(name2, iconIndex2, iconMaskIndex2);
+
+    if (found1 == found2)
+        {
+        if (found1 != KErrNotFound)
+            {
+            ERROR(name1 != name2, "Diff icon name");
+            CHECK_EQUAL(iconIndex1, iconIndex2, "Diff icon index");
+            CHECK_EQUAL(iconMaskIndex1, iconMaskIndex2, "Diff icon mask index");
+            }
+        }
+    else
+        {
+        ERR("Diff icon")
+        }
+
+    // location
+    TLocality loc1, loc2;
+    found1 = aLm1.GetPosition(loc1);
+    found2 = aLm2.GetPosition(loc2);
+
+    if (found1 == found2)
+        {
+        if (found1 != KErrNotFound)
+            {
+            CHECK_EQUAL(loc1.Latitude(), loc2.Latitude(), "Diff latitude");
+            CHECK_EQUAL(loc1.Longitude(), loc2.Longitude(), "Diff longitude");
+            CHECK_EQUAL(loc1.Altitude(), loc2.Altitude(), "Diff altitude");
+            CHECK_EQUAL(loc1.HorizontalAccuracy(), loc2.HorizontalAccuracy(), "Diff hacc");
+            CHECK_EQUAL(loc1.VerticalAccuracy(), loc2.VerticalAccuracy(), "Diff vacc");
+            CHECK_EQUAL(loc1.Datum(), loc2.Datum(), "Diff datum");
+            }
+        }
+    else
+        {
+        ERR("Diff position");
+        }
+
+    // categories
+    RArray<TPosLmItemId> cats1, cats2;
+    aLm1.GetCategoriesL(cats1);
+    aLm2.GetCategoriesL(cats2);
+    CHECK_EQUAL(cats1.Count(), cats2.Count(), "Diff amount of categories");
+    for (TInt c = 0; c < Min(cats1.Count(), cats2.Count()); c++)
+        {
+        CHECK_EQUAL(cats1[c], cats2[c], "Diff category");
+        }
+    cats1.Close();
+    cats2.Close();
+
+    // fields
+    TInt fields1 = aLm1.NumOfAvailablePositionFields();
+    TInt fields2 = aLm2.NumOfAvailablePositionFields();
+    CHECK_EQUAL(fields1, fields2, "Diff amount of fields");
+
+    TPositionFieldId fid1 = aLm1.FirstPositionFieldId();
+    TPositionFieldId fid2 = aLm2.FirstPositionFieldId();
+    for (TInt f = 0;
+        f < Min(fields1, fields2) &&
+        (fid1 != EPositionFieldNone || fid2 != EPositionFieldNone);
+        f++)
+        {
+        CHECK_EQUAL(fid1, fid2, "Diff field");
+        aLm1.GetPositionField(fid1, name1);
+        aLm2.GetPositionField(fid2, name2);
+        ERROR(name1 != name2, "Diff field data");
+
+        fid1 = aLm1.NextPositionFieldId(fid1);
+        fid2 = aLm1.NextPositionFieldId(fid2);
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CPosTp144::CheckLmSerialization_SubL
+//
+// ---------------------------------------------------------
+
+void CPosTp144::CheckLmSerialization_SubL(CPosLandmark* lm)
+ {
+    DECLARE_ERROR_LOGGING;
+
+    CPosLandmark* lm1 = lm;
+    CPosLandmark* lm2 = NULL;
+
+    TInt err = KErrNone;
+    HBufC8* buf1 = NULL;
+    HBufC8* buf2 = NULL;
+
+    TRAP(err, buf1 = PosLandmarkSerialization::PackL(*lm1));
+    IF_ERROR(err, "Packing failed");
+    User::LeaveIfError(err);
+    CleanupStack::PushL(buf1);
+
+    TRAP(err, lm2 = PosLandmarkSerialization::UnpackL(*buf1));
+    IF_ERROR(err, "Unpacking failed");
+    User::LeaveIfError(err);
+    CleanupStack::PushL(lm2);
+
+    // read and compare values
+    CompareLandmarks(*lm1, *lm2);
+
+    // compare by buffer
+    TRAP(err, buf2 = PosLandmarkSerialization::PackL(*lm2));
+    CleanupStack::PushL(buf2);
+
+    CompareBuffers(*buf1, *buf2);
+
+    // cleanup
+    CleanupStack::PopAndDestroy(buf2);
+    CleanupStack::PopAndDestroy(lm2);
+    CleanupStack::PopAndDestroy(buf1);
+ 
+    }
+
+// ---------------------------------------------------------
+// CPosTp144::CheckLmSerializationL
+//
+// ---------------------------------------------------------
+    
+    void CPosTp144::CheckLmSerializationL()
+    {
+    DECLARE_ERROR_LOGGING;
+    
+
+    //LOG("1. Dummy landmark")
+    CPosLandmark* lm = CreateDummyLandmarkLC();
+    CheckLmSerialization_SubL(lm);
+    CleanupStack::PopAndDestroy(lm);
+
+    //LOG("2. Empty landmark")
+    lm = CPosLandmark::NewLC();
+    CheckLmSerialization_SubL(lm);
+    CleanupStack::PopAndDestroy(lm);
+
+    
+    LEAVE_IF_ERRORS()  
+    }
+//  End of File