installationservices/swcomponentregistry/test/tscrapparc/source/appreginfoapparcsteps.cpp
branchRCL_3
changeset 25 7333d7932ef7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swcomponentregistry/test/tscrapparc/source/appreginfoapparcsteps.cpp	Tue Aug 31 15:21:33 2010 +0300
@@ -0,0 +1,1312 @@
+/*
+* Copyright (c) 2009-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: 
+* Implements the test steps for component management APIs in the SCR
+*
+*/
+
+#include "appreginfoapparcsteps.h"
+#include "tscrdefs.h"
+#include <scs/cleanuputils.h>
+#include <barsread.h> 
+using namespace Usif;
+
+void CScrGetApplicationRegistrationViewSubsessionStep::PrintPerformanceLog(TTime aTime)
+    {
+    TDateTime timer = aTime.DateTime();
+    INFO_PRINTF6(_L("%S,%d:%d:%d:%d"), &KPerformanceTestInfo(), timer.Hour(), timer.Minute(), timer.Second(), timer.MicroSecond());
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::StartTimer()
+    {
+    iStartTime.HomeTime();
+    PrintPerformanceLog(iStartTime);
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::StopTimerAndPrintResultL()
+    {
+    TTime endTime;
+    endTime.HomeTime();
+    PrintPerformanceLog(endTime);
+    
+    TTimeIntervalMicroSeconds duration = endTime.MicroSecondsFrom(iStartTime);
+    TInt actualDuration = I64INT(duration.Int64())/1000; // in millisecond
+        
+    TInt maxDuration = 0;
+    if(!GetIntFromConfig(ConfigSection(), KMaxDurationName, maxDuration))
+        {
+        ERR_PRINTF2(_L("%S could not be found in configuration."), &KMaxDurationName());
+        User::Leave(KErrNotFound);
+        }
+    else
+        {
+        INFO_PRINTF3(_L("%S,%d"), &KMaxTestCaseDuration(), maxDuration);
+        INFO_PRINTF3(_L("%S,%d"), &KActualTestCaseDuration(), actualDuration);
+        }
+    
+    if(actualDuration <= maxDuration)
+        {
+        INFO_PRINTF2(_L("This test meets performance requirement (Duration=%d)."), actualDuration);
+        }
+    else
+        {
+        ERR_PRINTF2(_L("This test does not meet performance requirement (Duration=%d)."), actualDuration);
+        SetTestStepResult(EFail);
+        }
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GenerateIndexedAttributeNameL(TDes& aInitialAttributeName, TInt aIndex)
+    {
+    const TInt MAX_INT_STR_LEN = 8;
+    TBuf<MAX_INT_STR_LEN> integerAppendStr;
+    integerAppendStr.Format(_L("%d"), aIndex);
+    aInitialAttributeName.Append(integerAppendStr);
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetAppOwnedFilesL(RPointerArray<HBufC>& aOwnedFileArray,HBufC* aConfigSection)
+    {
+    TInt ownedFileCount = 0;
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+       configsection = ConfigSection().AllocL();
+    else
+       configsection = aConfigSection->AllocL();
+    
+    GetIntFromConfig(*configsection, _L("OwnedFileCount"), ownedFileCount);
+    for (TUint i = 0; i < ownedFileCount; ++i)
+        {
+        TPtrC tOwnedFileName;
+        TBuf<20> fileName;
+        fileName = KOwnedFileName;
+        GenerateIndexedAttributeNameL(fileName, i);
+        GetStringFromConfig(*configsection, fileName, tOwnedFileName);
+        HBufC* ownedFileName = tOwnedFileName.AllocLC();
+        aOwnedFileArray.AppendL(ownedFileName);
+        CleanupStack::Pop(ownedFileName);
+        }
+    delete configsection;
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::GetUidFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TUid& aUid)
+    {
+    TInt val;
+    if(GetHexFromConfig(aSectName, aKeyName, val))
+        {
+        aUid = TUid::Uid(val);
+        return ETrue;
+        }
+    else
+        {
+        return EFalse;
+        }
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::PrintErrorL(const TDesC& aMsg, TInt aErrNum,...)
+    {
+    VA_LIST list;
+    VA_START(list, aErrNum);
+    
+    RBuf msgBuf;
+    msgBuf.CreateL(MAX_SCR_ERROR_MESSAGE_LENGTH);
+    msgBuf.CleanupClosePushL();
+    msgBuf.AppendFormatList(aMsg, list);
+    
+    ERR_PRINTF1(msgBuf);
+    SetTestStepResult(EFail);
+
+    CleanupStack::PopAndDestroy(&msgBuf);
+    User::Leave(aErrNum);
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetAppUidL(TUid& aAppUid, HBufC* aConfigSection)
+    {    
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+       configsection = ConfigSection().AllocL();
+    else
+       configsection = aConfigSection->AllocL();
+    
+    if (!GetUidFromConfig(*configsection, _L("AppUid"), aAppUid))
+        {
+        delete configsection;
+        PrintErrorL(_L("AppUid was not found!"), KErrNotFound);        
+        }    
+    INFO_PRINTF2(_L("AppUid is 0x%x"), aAppUid.iUid);
+    delete configsection;
+    }
+    
+void CScrGetApplicationRegistrationViewSubsessionStep::GetAppServiceInfoL(
+        RPointerArray<CServiceInfo>& aServiceInfoArray, HBufC* aConfigSection)
+    {
+    TInt serviceInfoCount = 0;
+    TInt totalOpaqueDataCount = 0;
+    TInt totalServiceDataTypeCount = 0;
+    HBufC* configsection;
+    if (aConfigSection == NULL)
+        configsection = ConfigSection().AllocL();
+    else
+        configsection = aConfigSection->AllocL();
+
+    GetIntFromConfig(*configsection, _L("ServiceInfoCount"),
+            serviceInfoCount);
+    for (TUint i = 0; i < serviceInfoCount; ++i)
+        {
+        // service Uid
+        TBuf<20> uid;
+        TUid serviceUid;
+        uid = KServiceUid;
+        GenerateIndexedAttributeNameL(uid, i);
+        GetUidFromConfig(*configsection, uid, serviceUid);
+
+        // service opaque data
+        RPointerArray<COpaqueData> serviceOpaqueDataInfoArray;
+        TBuf<27> servOpaqueDataCountStr;
+        servOpaqueDataCountStr = KServiceOpaqueDataInfoCount;
+        GenerateIndexedAttributeNameL(servOpaqueDataCountStr, i);
+        TInt serviceOpaqueDataInfoCount = 0;
+        GetIntFromConfig(*configsection, servOpaqueDataCountStr, serviceOpaqueDataInfoCount);
+        GetServiceOpaqueDataInfoL(serviceOpaqueDataInfoArray, serviceOpaqueDataInfoCount, totalOpaqueDataCount, configsection);
+        totalOpaqueDataCount += serviceOpaqueDataInfoCount;
+                
+        //GetServiceOpaqueDataInfoL(serviceOpaqueDataInfoArray);
+        //CleanupStack::PushL(&serviceOpaqueDataInfoArray);
+
+        // service data type
+        TBuf<21> serviceDataTypeCountString;
+        serviceDataTypeCountString = KServiceDataTypeCount;
+        GenerateIndexedAttributeNameL(serviceDataTypeCountString, i);
+        TInt serviceDataTypeCount = 0;
+        GetIntFromConfig(*configsection, serviceDataTypeCountString,
+                serviceDataTypeCount);
+        totalServiceDataTypeCount += serviceDataTypeCount;
+        RPointerArray<CDataType> serviceDataTypeArray;
+        for (TUint j = 0; j < serviceDataTypeCount; ++j)
+            {
+            TInt indexToRead = totalServiceDataTypeCount
+                    - serviceDataTypeCount + j;
+            TInt serviceDataTypePriority;
+            TPtrC serviceType;
+            TBuf<25> priority, type;
+            priority = KServiceDataTypePriority;
+            GenerateIndexedAttributeNameL(priority, indexToRead);
+            GetIntFromConfig(*configsection, priority,
+                    serviceDataTypePriority);
+            type = KServiceDataType;
+            GenerateIndexedAttributeNameL(type, indexToRead);
+            GetStringFromConfig(*configsection, type, serviceType);
+            CDataType* serviceDataType = CDataType::NewLC(
+                    serviceDataTypePriority, serviceType);
+            serviceDataTypeArray.AppendL(serviceDataType);
+            CleanupStack::Pop(serviceDataType);
+            }
+
+        CServiceInfo* serviceInfo = CServiceInfo::NewLC(serviceUid,
+                serviceOpaqueDataInfoArray, serviceDataTypeArray);
+        aServiceInfoArray.AppendL(serviceInfo);
+        CleanupStack::Pop(serviceInfo);
+        }
+    delete configsection;
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetAppLocalizableInfoL(RPointerArray<CLocalizableAppInfo>& aLocalizableAppInfoArray, HBufC* aConfigSection)
+    {
+    TInt localizableAppInfoCount = 0;
+    TInt totalViewDataCount=0;
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+      configsection = ConfigSection().AllocL();
+    else
+      configsection = aConfigSection->AllocL();
+    
+    GetIntFromConfig(*configsection, _L("LocalizableAppInfoCount"), localizableAppInfoCount);
+    for (TUint i = 0; i < localizableAppInfoCount; ++i)
+        {
+        TPtrC locShortCaption;
+        TLanguage locLanguage = (TLanguage)0;
+        TInt lang;
+        TPtrC locGroupName;
+        TBuf<20> shortCaption, language, groupName, viewDataCount;
+        shortCaption = KLocShortCaption;
+        GenerateIndexedAttributeNameL(shortCaption, i);
+        GetStringFromConfig(*configsection, shortCaption, locShortCaption);
+        language = KLocAppLanguage;
+        GenerateIndexedAttributeNameL(language, i);
+        GetIntFromConfig(*configsection, language, lang);
+        locLanguage = static_cast<TLanguage>(lang);
+        groupName = KLocGroupName;
+        GenerateIndexedAttributeNameL(groupName, i);
+        GetStringFromConfig(*configsection, groupName, locGroupName);
+        
+        TPtrC locCaption;
+        TPtrC locIconFileName;
+        TInt locNoOfAppIcons = 0;
+        TBuf<20> caption, iconFileName, noOfAppIcons;
+        caption = KLocCaption;
+        GenerateIndexedAttributeNameL(caption, i);
+        GetStringFromConfig(*configsection, caption, locCaption);
+        iconFileName = KLocIconFileName;
+        GenerateIndexedAttributeNameL(iconFileName, i);
+        GetStringFromConfig(*configsection, iconFileName, locIconFileName);
+        noOfAppIcons = KLocNumberOfAppIcons;
+        GenerateIndexedAttributeNameL(noOfAppIcons, i);
+        GetIntFromConfig(*configsection, noOfAppIcons, locNoOfAppIcons);
+        CCaptionAndIconInfo* captionAndIconInfo = NULL;
+        if(locCaption.Length() != 0 || locIconFileName.Length() !=0 || locNoOfAppIcons != 0)
+          {
+           captionAndIconInfo = CCaptionAndIconInfo::NewLC(locCaption,locIconFileName,locNoOfAppIcons);
+          }
+        else
+          CleanupStack::PushL(captionAndIconInfo);
+        
+        TInt viewDataCountForLocale = 0;
+        viewDataCount=KViewDataCount;
+        GenerateIndexedAttributeNameL(viewDataCount, i);
+        GetIntFromConfig(*configsection, viewDataCount , viewDataCountForLocale);
+        totalViewDataCount+=viewDataCountForLocale;
+        RPointerArray<CAppViewData> viewDataArray;
+        for (TUint i = 0; i < viewDataCountForLocale; ++i)
+            {
+            TInt viewScreenMode = 0 ,vUid,indexToRead;
+            TBuf<20> uid, screenMode;
+            uid = KVwUid;
+            indexToRead=totalViewDataCount-viewDataCountForLocale+i;
+            GenerateIndexedAttributeNameL(uid, indexToRead);
+            GetIntFromConfig(*configsection, uid, vUid);
+            TUid viewUid = TUid::Uid(vUid);
+            screenMode = KVwScreenMode;
+            GenerateIndexedAttributeNameL(screenMode, indexToRead);
+            GetIntFromConfig(*configsection, screenMode, viewScreenMode);
+            
+            TPtrC viewCaption;
+            TPtrC viewIconFileName;
+            TInt viewNoOfAppIcons = 0;
+            TBuf<20> caption, iconFileName, noOfAppIcons;
+            caption = KVwCaption;
+            GenerateIndexedAttributeNameL(caption, indexToRead);
+            GetStringFromConfig(*configsection, caption, viewCaption);
+            iconFileName = KVwIconFileName;
+            GenerateIndexedAttributeNameL(iconFileName, indexToRead);
+            GetStringFromConfig(*configsection, iconFileName, viewIconFileName);
+            noOfAppIcons = KVwNumberOfAppIcons;
+            GenerateIndexedAttributeNameL(noOfAppIcons, indexToRead);
+            GetIntFromConfig(*configsection, noOfAppIcons, viewNoOfAppIcons);
+            CCaptionAndIconInfo* viewCaptionAndIconInfo = NULL;
+            if(viewCaption.Length() != 0 || viewIconFileName.Length() !=0 || viewNoOfAppIcons != 0)
+              {
+               viewCaptionAndIconInfo = CCaptionAndIconInfo::NewLC(viewCaption,viewIconFileName,viewNoOfAppIcons);
+              }
+            else
+              CleanupStack::PushL(viewCaptionAndIconInfo);          
+            
+            CAppViewData* viewData = CAppViewData::NewLC(viewUid,viewScreenMode,viewCaptionAndIconInfo);
+            viewDataArray.AppendL(viewData);
+            CleanupStack::Pop(2, viewCaptionAndIconInfo);
+            }
+
+        CLocalizableAppInfo* localizableAppInfo = CLocalizableAppInfo::NewLC(locShortCaption,locLanguage,locGroupName,captionAndIconInfo,viewDataArray);
+        aLocalizableAppInfoArray.AppendL(localizableAppInfo);
+        CleanupStack::Pop(localizableAppInfo);
+        CleanupStack::Pop(captionAndIconInfo);
+        }
+    delete configsection;
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetAppOpaqueDataInfoL(RPointerArray<Usif::COpaqueData>& aAppOpaqueDataInfoArray, HBufC* aConfigSection)
+    {
+    TInt appOpaqueDataInfoCount = 0;
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+      configsection = ConfigSection().AllocL();
+    else
+      configsection = aConfigSection->AllocL();
+
+    GetIntFromConfig(*configsection, _L("AppOpaqueDataInfoCount"), appOpaqueDataInfoCount);
+    for (TUint i = 0; i < appOpaqueDataInfoCount; ++i)
+        {
+        TBuf<16> localeAttr;
+        localeAttr = KAppOpaqueDataLocale;
+        TInt locale = 0;
+        GenerateIndexedAttributeNameL(localeAttr, i);
+        GetIntFromConfig(*configsection, localeAttr, locale);
+                    
+        TBuf<14> opaqueDataAttr;
+        opaqueDataAttr = KAppOpaqueData;
+        TPtrC opaqueData;
+        GenerateIndexedAttributeNameL(opaqueDataAttr, i);
+        GetStringFromConfig(*configsection, opaqueDataAttr, opaqueData);
+
+        TPtrC8 blobOpaqueData((TUint8*)opaqueData.Ptr(), opaqueData.Length()*2);
+
+        COpaqueData* appOpaqueData = COpaqueData::NewLC(blobOpaqueData, (TLanguage) locale);
+        aAppOpaqueDataInfoArray.AppendL(appOpaqueData);
+        CleanupStack::Pop(1, appOpaqueData);
+        }
+    delete configsection;
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetServiceOpaqueDataInfoL(RPointerArray<Usif::COpaqueData>& aServiceOpaqueDataInfoArray, TInt aServiceOpaqueDataInfoCount, TInt aStartingIndex, HBufC* aConfigSection)
+    {
+    for (TUint i = 0; i < aServiceOpaqueDataInfoCount; ++i)
+        {
+        TBuf<20> localeAttr;
+        localeAttr = KServiceOpaqueLocale;
+        TInt locale = 0;
+        TInt indexToRead = i + aStartingIndex;
+        GenerateIndexedAttributeNameL(localeAttr, indexToRead);
+        GetIntFromConfig(*aConfigSection, localeAttr, locale);
+                    
+        TBuf<18> opaqueDataAttr;
+        opaqueDataAttr = KServiceOpaqueData;
+        TPtrC opaqueData;
+        GenerateIndexedAttributeNameL(opaqueDataAttr, indexToRead);
+        GetStringFromConfig(*aConfigSection, opaqueDataAttr, opaqueData);
+                
+        TPtrC8 blobOpaqueData((TUint8*)opaqueData.Ptr(), opaqueData.Length()*2);
+        COpaqueData* serviceOpaqueData = COpaqueData::NewLC(blobOpaqueData, (TLanguage) locale);
+        aServiceOpaqueDataInfoArray.AppendL(serviceOpaqueData);
+        CleanupStack::Pop(1, serviceOpaqueData);
+        }    
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::Get64BitIntegerFromConfigL(const TDesC& aConfigKeyName, TInt64& aRetVal,HBufC* aConfigSection)
+    {
+    TPtrC int64Str;
+    HBufC* configsection;
+        if(aConfigSection == NULL)
+            configsection = ConfigSection().AllocLC();
+        else
+            configsection = aConfigSection->AllocLC();
+    
+    if (!GetStringFromConfig(*configsection, aConfigKeyName, int64Str))
+        return EFalse;
+
+    TLex lex(int64Str);
+    User::LeaveIfError(lex.Val(aRetVal));
+    CleanupStack::PopAndDestroy(configsection);
+    return ETrue;
+    }
+
+CPropertyEntry* CScrGetApplicationRegistrationViewSubsessionStep::GetPropertyFromConfigLC(TBool aIsSingle, TInt aIndex, TBool aSupportLocalized,HBufC* aConfigSection)
+    {
+    // This function can be used for getting a single property, which is defined by attributes such as PropertyName etc.
+    // or a property in a set - in this case the properties would be PropertyType0, PropertyName0 etc.
+    // aIsSingle defines the working mode. aIndex applies only if aIsSingle is false
+    
+    // First, we need to generate the property name
+    TBuf<MAX_SCR_PARAM_LENGTH> propertyTypeParam, propertyNameParam, propertyValueParam, propertyLocaleParam;
+    propertyTypeParam = KPropertyTypeParam;
+    propertyNameParam = KPropertyNameParam;
+    propertyValueParam = KPropertyValueParam;
+    propertyLocaleParam = KPropertyLocaleParam;
+    if (!aIsSingle)
+        {
+        GenerateIndexedAttributeNameL(propertyTypeParam, aIndex);
+        GenerateIndexedAttributeNameL(propertyNameParam, aIndex);
+        GenerateIndexedAttributeNameL(propertyValueParam, aIndex);
+        GenerateIndexedAttributeNameL(propertyLocaleParam, aIndex);
+        }
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+        configsection = ConfigSection().AllocLC();
+    else
+        configsection = aConfigSection->AllocLC();
+    
+    TPtrC propertyName;
+    if (!GetStringFromConfig(*configsection, propertyNameParam, propertyName))
+        {
+        ERR_PRINTF2(_L("The property name param %S could not be found in configuration."), &propertyNameParam);
+        User::Leave(KErrNotFound);
+        }
+    
+    TInt propertyTypeInt;
+    if (!GetIntFromConfig(*configsection, propertyTypeParam, propertyTypeInt))
+        {
+        ERR_PRINTF2(_L("The property type param %S could not be found in configuration."), &propertyTypeParam);
+        User::Leave(KErrNotFound);
+        }
+    
+    CPropertyEntry::TPropertyType propertyType = static_cast<CPropertyEntry::TPropertyType>(propertyTypeInt);
+    
+    CPropertyEntry* propertyEntry(NULL);
+    switch (propertyType)
+        {
+        case CPropertyEntry::EBinaryProperty:
+        case CPropertyEntry::ELocalizedProperty:
+            {
+            TPtrC propertyStrValue;
+            if (!GetStringFromConfig(*configsection, propertyValueParam, propertyStrValue))
+                {
+                ERR_PRINTF2(_L("The property value param %S could not be found in configuration."), &propertyValueParam);
+                User::Leave(KErrNotFound);
+                }
+            if(!aSupportLocalized || propertyType == CPropertyEntry::EBinaryProperty)
+                {
+                HBufC8* buffer8Bit = ConvertBufferTo8bitL(propertyStrValue);
+                CleanupStack::PushL(buffer8Bit);
+                propertyEntry = CBinaryPropertyEntry::NewL(propertyName, *buffer8Bit);
+                CleanupStack::PopAndDestroy(buffer8Bit);
+                break;
+                }
+            // Handle ELocalProperty case
+            TLanguage locale;
+            TInt localeParam;
+            if (!GetIntFromConfig(*configsection, propertyLocaleParam, localeParam))
+                {
+                ERR_PRINTF2(_L("The property locale param %S could not be found in configuration."), &propertyLocaleParam);
+                User::Leave(KErrNotFound);  
+                }
+            locale = static_cast<TLanguage>(localeParam);
+            propertyEntry = CLocalizablePropertyEntry::NewL(propertyName, propertyStrValue, locale);
+            break;                      
+            }
+        case CPropertyEntry::EIntProperty:
+            {
+            TInt64 int64Value;
+            if (!Get64BitIntegerFromConfigL(propertyValueParam, int64Value, configsection))
+                {
+                ERR_PRINTF2(_L("The integer param %S could not be found in configuration."), &propertyValueParam);
+                User::Leave(KErrNotFound);
+                }
+            propertyEntry = CIntPropertyEntry::NewL(propertyName, int64Value);
+            break;
+            }           
+        }
+    CleanupStack::PopAndDestroy(configsection);
+    CleanupStack::PushL(propertyEntry);
+    return propertyEntry;
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetAppPropertiesL(RPointerArray<CPropertyEntry>& aAppPropertyArray,TBool aSupportLocalized, HBufC* aConfigSection)
+    {
+    TInt propertiesCount = 0;  
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+      configsection = ConfigSection().AllocLC();
+    else
+      configsection = aConfigSection->AllocLC();
+     
+    if (!GetIntFromConfig(*configsection, KPropertiesCountParamName, propertiesCount))
+       {
+        INFO_PRINTF1(_L("Properties count was not found!"));
+        CleanupStack::PopAndDestroy(configsection);
+        return;
+        }
+    
+    if (propertiesCount < 0)
+        {
+        INFO_PRINTF1(_L("Properties count was negative !"));
+        CleanupStack::PopAndDestroy(configsection);
+        return;
+        }
+    
+    for (TInt i = 0; i < propertiesCount; ++i)
+        {
+        CPropertyEntry *propertyEntry = GetPropertyFromConfigLC(EFalse, i, aSupportLocalized,configsection);
+        User::LeaveIfError(aAppPropertyArray.Append(propertyEntry));
+        CleanupStack::Pop(propertyEntry);
+        }
+    CleanupStack::PopAndDestroy(configsection);
+    }
+
+CApplicationRegistrationData* CScrGetApplicationRegistrationViewSubsessionStep::GetAppRegInfoFromConfigLC(HBufC* aConfigSection )
+    {
+    TUid appUid;
+    HBufC* configsection;
+    if(aConfigSection == NULL)
+       configsection = ConfigSection().AllocLC();
+    else
+       configsection = aConfigSection->AllocLC();
+    
+    GetAppUidL(appUid, configsection);
+
+    TPtrC appFile; 
+    
+    GetStringFromConfig(*configsection, _L("AppFile"), appFile);
+    
+    TInt attributes = 0, hidden = 0, embeddability = 0, newFile = 0, launch = 0, defScreenNo = 0;
+    GetIntFromConfig(*configsection, _L("Attributes"), attributes);
+    GetIntFromConfig(*configsection, _L("Hidden"), hidden);
+    GetIntFromConfig(*configsection, _L("Embeddability"), embeddability);
+    GetIntFromConfig(*configsection, _L("NewFile"), newFile);
+    GetIntFromConfig(*configsection, _L("Launch"), launch);
+
+    TPtrC groupName; 
+    GetStringFromConfig(*configsection, _L("GroupName"), groupName);
+    
+    GetIntFromConfig(*configsection, _L("DefaultScreenNumber"), defScreenNo);
+    
+    RPointerArray<HBufC> ownedFileArray;
+    GetAppOwnedFilesL(ownedFileArray, configsection);
+    CleanupStack::PushL(&ownedFileArray);
+    RPointerArray<CServiceInfo> serviceInfoArray;
+    GetAppServiceInfoL(serviceInfoArray, configsection);
+    CleanupStack::PushL(&serviceInfoArray);
+    RPointerArray<CLocalizableAppInfo> localizableAppInfoArray;
+    GetAppLocalizableInfoL(localizableAppInfoArray, configsection);
+    CleanupStack::PushL(&localizableAppInfoArray);
+    RPointerArray<COpaqueData> appOpaqueDataInfoArray;
+    GetAppOpaqueDataInfoL(appOpaqueDataInfoArray, configsection);
+    CleanupStack::PushL(&appOpaqueDataInfoArray);
+    RPointerArray<CPropertyEntry> appPropertyArray;
+    GetAppPropertiesL(appPropertyArray,ETrue, configsection);
+    CleanupStack::PushL(&appPropertyArray);
+    INFO_PRINTF1(_L("Going to create CApplicationRegistrationData obj."));
+    
+    TApplicationCharacteristics appCharacteristics;
+    appCharacteristics.iAttributes = attributes;
+    appCharacteristics.iAppIsHidden = hidden;
+    appCharacteristics.iEmbeddability = TApplicationCharacteristics::TAppEmbeddability(embeddability);
+    appCharacteristics.iGroupName = groupName;
+    appCharacteristics.iLaunchInBackground = launch;
+    CApplicationRegistrationData* appRegData = CApplicationRegistrationData::NewLC(ownedFileArray, serviceInfoArray, localizableAppInfoArray, appPropertyArray, appOpaqueDataInfoArray, appUid, appFile, appCharacteristics, defScreenNo);
+    INFO_PRINTF1(_L("Created CApplicationRegistrationData obj."));
+    CleanupStack::Pop(6);
+    CleanupStack::PopAndDestroy(configsection);
+    CleanupStack::PushL(appRegData);
+    return appRegData;
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareFileOwnershipInfo(RPointerArray<HBufC> aActualData, RPointerArray<HBufC> aExpectedData)
+    {
+    TInt expectedAppOwnedFilesCount = aExpectedData.Count();
+    TInt actualAppOwnedFilesCount = aActualData.Count();
+    
+    if(actualAppOwnedFilesCount != expectedAppOwnedFilesCount)
+        {        
+        INFO_PRINTF1(_L("The no of expected owned files by an app is not same as the no of actual owned files"));
+        return EFalse;
+        }
+    
+    for (TInt i=0 ; i < expectedAppOwnedFilesCount ; i++)
+        {
+       if(!aExpectedData.Find(aActualData[i]))
+          {
+          INFO_PRINTF1(_L("The expected owned file name is not same as the actual file  name"));
+          return EFalse;      
+          }
+        }    
+    return ETrue;    
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareDataType(RPointerArray<Usif::CDataType> aActualData,  RPointerArray<Usif::CDataType> aExpectedData)
+    {
+    TInt expectedDataTypeCount = aExpectedData.Count();
+    TInt actualDataTypeCount = aActualData.Count();
+           
+    if(actualDataTypeCount != expectedDataTypeCount)
+      {        
+      INFO_PRINTF1(_L("The no of expected data types for a service is not same as the no of actual recieved data types"));
+      return EFalse;
+      }
+    for(TInt i = 0 ; i < expectedDataTypeCount ; i++)
+        {
+        if(aExpectedData[i]->Priority()!= aActualData[i]->Priority())
+           {
+           INFO_PRINTF1(_L("The expected priority for a service data type is not same as the actual recieved"));
+           return EFalse;      
+           }
+        
+        if(!(aExpectedData[i]->Type() == aActualData[i]->Type()))
+           {
+           INFO_PRINTF1(_L("The expected type for a service data type is not same as the actual recieved"));
+           return EFalse;      
+           }
+        }
+    return ETrue;
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareOpaqueDataL(RPointerArray<Usif::COpaqueData> aActualData,  RPointerArray<Usif::COpaqueData> aExpectedData)
+    {
+    TInt expectedCount = aExpectedData.Count();
+    TInt actualCount = aActualData.Count();
+           
+    if(actualCount != expectedCount)
+      {        
+
+      INFO_PRINTF1(_L("The no of expected opaque data is not same as the no of actual opaque data"));
+      INFO_PRINTF2(_L("The expected data : %d"), expectedCount);
+      INFO_PRINTF2(_L("The actual data : %d"), actualCount);
+      return EFalse;
+      }
+    for(TInt i = 0 ; i < expectedCount ; i++)
+        {
+        if(aExpectedData[i]->Language()!= aActualData[i]->Language())
+           {
+           INFO_PRINTF1(_L("The expected lang for a service data type is not same as the actual recieved"));
+           return EFalse;      
+           }
+        
+        TBool compareWithDb = EFalse;
+        GetBoolFromConfig(ConfigSection(), _L("CompareWithDb"), compareWithDb);
+        
+        if(compareWithDb)
+            {
+            TResourceReader reader;
+            reader.SetBuffer(&aActualData[i]->OpaqueData());
+            HBufC16* actualDataBuffer = reader.ReadHBufCL();
+            CleanupStack::PushL(actualDataBuffer);
+            
+            TPtrC16 ptr16(reinterpret_cast<const TUint16*>(aExpectedData[i]->OpaqueData().Ptr()),(aExpectedData[i]->OpaqueData().Length()/2));
+            HBufC16* expectedDataBuffer = ptr16.AllocLC();
+            
+            if(*actualDataBuffer != *expectedDataBuffer)
+               {                
+               INFO_PRINTF1(_L("The expected data for a service opqdata is not same as the actual recieved"));
+               INFO_PRINTF2(_L("The expected data %S"), expectedDataBuffer);
+               INFO_PRINTF2(_L("The Actual data %S"), actualDataBuffer);
+               CleanupStack::PopAndDestroy(2, actualDataBuffer);
+               return EFalse;      
+               }
+            CleanupStack::PopAndDestroy(2, actualDataBuffer);
+
+            }
+        else
+            {
+            if(aActualData[i]->OpaqueData() != aExpectedData[i]->OpaqueData())
+               {                
+               INFO_PRINTF1(_L("The expected data for a service opqdata is not same as the actual recieved"));
+               INFO_PRINTF2(_L("The expected data %S"), &aExpectedData[i]->OpaqueData());
+               INFO_PRINTF2(_L("The Actual data %S"), &aActualData[i]->OpaqueData());
+               return EFalse;      
+               }
+            }
+        }
+    return ETrue;
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareServiceInfoL(RPointerArray<Usif::CServiceInfo> aActualData,  RPointerArray<Usif::CServiceInfo> aExpectedData)
+    {
+    TInt expectedServicesCount = aExpectedData.Count();
+    TInt actualServicesCount = aActualData.Count();
+       
+    if(actualServicesCount != expectedServicesCount)
+      {        
+      INFO_PRINTF1(_L("The no of expected services for an app is not same as the no of actual services"));
+      return EFalse;
+      }
+    
+    for (TInt i=0 ; i < expectedServicesCount ; i++)
+      {
+        // Compare uids
+      if(aExpectedData[i]->Uid() != aActualData[i]->Uid())
+      {
+      INFO_PRINTF2(_L("Expected Uid 0x%08x"), aExpectedData[i]->Uid());
+      INFO_PRINTF2(_L("Actual Uid 0x%08x"), aActualData[i]->Uid());
+      INFO_PRINTF1(_L("The expected service uid is not same as the actual service uid"));
+      return EFalse;      
+      }
+
+      // Compare Opaque data
+      if(!CompareOpaqueDataL(aActualData[i]->OpaqueData(), aExpectedData[i]->OpaqueData()))
+        {
+        return EFalse;      
+        }
+      
+      //compare data type
+      if(!CompareDataType(aActualData[i]->DataTypes(), aExpectedData[i]->DataTypes()))
+          {
+          return EFalse;
+          }     
+      }
+    return ETrue; 
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareCaptionandIconInfo(const CCaptionAndIconInfo* aActualData,const CCaptionAndIconInfo* aExpectedData)
+    {       
+    if(aExpectedData == NULL && aActualData == NULL)
+      {
+      return ETrue;  
+      }
+    
+    if((aExpectedData == NULL && aActualData != NULL) || (aExpectedData != NULL && aActualData == NULL))
+      {
+      INFO_PRINTF1(_L("The caption and icon info  for a localizable is either not present ot not expected"));
+      return EFalse;   
+      }               
+            
+    if(aActualData->NumOfAppIcons() != aExpectedData->NumOfAppIcons())
+      {
+      INFO_PRINTF1(_L("The expected no od icons for a locale is not same as the actual recieved"));
+      return EFalse;
+      }
+           
+    if(aActualData->Caption().Compare(aExpectedData->Caption()))
+      {
+      INFO_PRINTF1(_L("The expected caption for a locale is not same as the actual recieved"));
+      return EFalse;
+      }
+       
+    if(aActualData->IconFileName().Compare(aExpectedData->IconFileName()))
+      {
+      INFO_PRINTF2(_L("Expected Icon File %S"), &aExpectedData->IconFileName());
+      INFO_PRINTF2(_L("Actual Icon File %S"), &aActualData->IconFileName());
+      INFO_PRINTF1(_L("The expected icon file name is not same as the actual recieves"));
+      return EFalse;
+      }
+    return ETrue;
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareViewData(RPointerArray<Usif::CAppViewData> aActualData,  RPointerArray<Usif::CAppViewData> aExpectedData)
+    {
+    TInt expectedViewDataCount = aExpectedData.Count();
+    TInt actualViewDataCount = aActualData.Count();
+              
+    if(actualViewDataCount != expectedViewDataCount)
+      {        
+      INFO_PRINTF1(_L("The no of expected localizable info for an app is not same as the no of actual recieved"));
+      return EFalse;
+      }
+    for (TInt i=0 ; i < expectedViewDataCount ; i++)
+        {
+        if(aExpectedData[i]->ScreenMode() != aActualData[i]->ScreenMode())
+          {
+          INFO_PRINTF1(_L("The expected screen mode for a view is not same as the actual recieved"));
+          return EFalse;      
+          }              
+                 
+        if(aExpectedData[i]->Uid() != aActualData[i]->Uid())
+          {
+          INFO_PRINTF1(_L("The expected uid for a view is not same as the actual recieved"));
+          return EFalse;      
+          } 
+           
+        //compare captionandicon info
+       if(!CompareCaptionandIconInfo(aActualData[i]->CaptionAndIconInfo(),aExpectedData[i]->CaptionAndIconInfo()))
+          {
+          return EFalse;
+          }
+        }
+    return ETrue;                      
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareLocalizableAppInfo(RPointerArray<Usif::CLocalizableAppInfo> aActualData,  RPointerArray<Usif::CLocalizableAppInfo> aExpectedData)
+    {
+    TInt expectedLocalizableCount = aExpectedData.Count();
+    TInt actualLocalizableCount = aActualData.Count();
+          
+    if(actualLocalizableCount != expectedLocalizableCount)
+       {        
+       INFO_PRINTF1(_L("The no of expected localizable info for an app is not same as the no of actual recieved"));
+       return EFalse;
+       }
+    for (TInt i=0 ; i < expectedLocalizableCount ; i++)
+       {
+       if(aExpectedData[i]->ShortCaption().Compare(aActualData[i]->ShortCaption()))
+         {
+         INFO_PRINTF1(_L("The expected short caption for a localizable info is not same as the actual recieved"));
+         return EFalse;      
+         }
+       
+       if(aExpectedData[i]->GroupName().Compare(aActualData[i]->GroupName()))
+         {
+         INFO_PRINTF1(_L("The expected group name for a localizable info is not same as the actual recieved"));
+         return EFalse;      
+         }
+             
+       if(aExpectedData[i]->ApplicationLanguage() != aActualData[i]->ApplicationLanguage())
+         {
+         INFO_PRINTF1(_L("The expected locale for a localizable info is not same as the actual recieved"));
+         INFO_PRINTF2(_L("The expected language %d"), aExpectedData[i]->ApplicationLanguage());
+         INFO_PRINTF2(_L("The Actual language %d"), aActualData[i]->ApplicationLanguage());
+         return EFalse;      
+         } 
+       
+       //compare caption and icon info
+       if(!CompareCaptionandIconInfo(aActualData[i]->CaptionAndIconInfo(),aExpectedData[i]->CaptionAndIconInfo()))
+           {
+          return EFalse;
+           }
+       
+       // compare view data    
+       if(!CompareViewData(aActualData[i]->ViewDataList(), aExpectedData[i]->ViewDataList()))
+           {
+           return EFalse;
+           }
+       }
+    return ETrue;
+    }
+
+TBool CScrGetApplicationRegistrationViewSubsessionStep::CompareApplicationRegistrationDataL(
+        Usif::CApplicationRegistrationData *aActualData,
+        Usif::CApplicationRegistrationData *aExpectedData)
+    {
+    //comparing AppRegistrationInfo    
+    if (aActualData->AppUid() != aExpectedData->AppUid())
+        {
+        INFO_PRINTF2(_L("Actual AppUid is 0x%x"), aActualData->AppUid().iUid);
+        INFO_PRINTF2(_L("Expected AppUid is 0x%x"), aExpectedData->AppUid().iUid);
+        INFO_PRINTF1(_L("The expected App Uid is not same as the actual AppUid"));
+        return EFalse;
+        }
+
+    if (aActualData->AppFile().Compare(aExpectedData->AppFile()))
+        {
+        INFO_PRINTF2(_L("Expected app File %S"), &aExpectedData->AppFile());
+        INFO_PRINTF2(_L("Actual app File %S"), &aActualData->AppFile());
+        INFO_PRINTF1(_L("The expected App File is not same as the actual App File"));
+        return EFalse;
+        }
+
+    if (aActualData->Attributes() != aExpectedData->Attributes())
+        {
+        INFO_PRINTF1(_L("The expected App Attribute is not same as the actual App Attribute"));
+        return EFalse;
+        }
+
+    if (aActualData->Hidden() != aExpectedData->Hidden())
+        {
+        INFO_PRINTF1(_L("The expected Hidden Value is not same as the actual App Hidden Value"));
+        return EFalse;
+        }
+
+    if (aActualData->Embeddability() != aExpectedData->Embeddability())
+        {
+        INFO_PRINTF1(_L("The expected embeddability value is not same as the actual embeddability value"));
+        return EFalse;
+        }
+
+    if (aActualData->NewFile() != aExpectedData->NewFile())
+        {
+        INFO_PRINTF1(_L("The expected App NewFile Value is not same as the actual App NewFile Value"));
+        return EFalse;
+        }
+
+    if (aActualData->Launch() != aExpectedData->Launch())
+        {
+        INFO_PRINTF1(_L("The expected App Launch Value is not same as the actual App Launch Value"));
+        return EFalse;
+        }
+
+    if (aActualData->GroupName().Compare(aExpectedData->GroupName()))
+        {
+        INFO_PRINTF1(_L("The expected App Group Name is not same as the actual App Group Name"));
+        return EFalse;
+        }
+
+    if (aActualData->DefaultScreenNumber()
+            != aExpectedData->DefaultScreenNumber())
+        {
+        INFO_PRINTF1(_L("The expected App DefaultScreenNumber is not same as the actual App DefaultScreenNumber"));
+        return EFalse;
+        }
+
+    // Compare Opaque data
+    if (!CompareOpaqueDataL(aActualData->AppOpaqueData(),
+            aExpectedData->AppOpaqueData()))
+        {
+        return EFalse;
+        }
+
+    // comparing FileOwnershipInfo
+    if (!CompareFileOwnershipInfo(aActualData->OwnedFileArray(),
+            aExpectedData->OwnedFileArray()))
+        {
+        return EFalse;
+        }
+
+    // comparing  Service info
+    if (!CompareServiceInfoL(aActualData->ServiceArray(),
+            aExpectedData->ServiceArray()))
+        {
+        return EFalse;
+        }
+
+    //comparing localizable app info
+    if (!CompareLocalizableAppInfo(aActualData->LocalizableAppInfoList(),
+            aExpectedData->LocalizableAppInfoList()))
+        {
+        return EFalse;
+        }
+
+    return ETrue;
+    }
+
+//-----------------CScrGetApplicationRegistrationViewStep-------------
+
+CScrGetApplicationRegistrationViewSubsessionStep::CScrGetApplicationRegistrationViewSubsessionStep() 
+    {
+    
+    }
+
+CScrGetApplicationRegistrationViewSubsessionStep::~CScrGetApplicationRegistrationViewSubsessionStep()
+// Destructor.
+    {
+    iScrSession.Close();
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep:: MarkAsPerformanceStep()
+    {
+    iIsPerformanceTest = ETrue;
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::ImplTestStepPreambleL()
+    {
+    User::LeaveIfError(iScrSession.Connect());
+    }
+
+
+void CScrGetApplicationRegistrationViewSubsessionStep::GetApplicationRegistrationDataFromConfigL(RPointerArray<Usif::CApplicationRegistrationData>& aEntries)
+    {
+    TInt configSectionCount(0);
+    CApplicationRegistrationData *applicationRegistrationData = NULL;
+    TPtrC configSectionName(ConfigSection());
+    HBufC* cnfSecName = NULL;
+    
+    GetIntFromConfig(ConfigSection(), _L("AppRegEntriesConfigCount"), configSectionCount);          
+
+    for (TUint i = 0; i < configSectionCount; ++i)
+        {
+        TBuf<20> configSection = _L("configsection");
+        GenerateIndexedAttributeNameL(configSection, i);
+        GetStringFromConfig(ConfigSection(),configSection, configSectionName);
+        cnfSecName = configSectionName.AllocLC();
+        applicationRegistrationData = GetAppRegInfoFromConfigLC(cnfSecName);
+        aEntries.AppendL(applicationRegistrationData);
+        CleanupStack::Pop(applicationRegistrationData);
+        CleanupStack::PopAndDestroy(cnfSecName);
+        }  
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::ImplTestStepL()
+    {            
+    TInt locale;    
+    TInt expextedAppRegDataCount(0);
+    TInt actualAppRegDataCount(0);
+    TInt count = 0;
+    TInt remainingExpectedCount = 0;
+    TBool isFinish = EFalse;
+    TBool isError = EFalse;
+    TInt index = 0;
+      
+    RPointerArray<Usif::CApplicationRegistrationData> expectedAppRegData;
+    CleanupClosePushL(expectedAppRegData);
+    INFO_PRINTF1(_L("Read expected entries for verification "));
+    GetApplicationRegistrationDataFromConfigL(expectedAppRegData);
+    expextedAppRegDataCount = expectedAppRegData.Count();
+    remainingExpectedCount = expextedAppRegDataCount; 
+    
+    TInt noOfEntries(1);
+    GetIntFromConfig(ConfigSection(), _L("NoOfEntries"), noOfEntries);
+    
+    TInt noOfAppRegAppUid = 0;
+    TBuf<20> appRegAppUidName;
+    RArray<TUid> expectedAppRegAppUids;
+    CleanupClosePushL(expectedAppRegAppUids);
+
+    GetIntFromConfig(ConfigSection(), _L("AppRegAppUidCount"), noOfAppRegAppUid);
+    for (TUint i = 0; i < noOfAppRegAppUid; ++i)
+        {   
+        TUid appRegAppUid;
+        appRegAppUidName = _L("AppRegAppUid");
+        GenerateIndexedAttributeNameL(appRegAppUidName, i);
+        GetUidFromConfig(ConfigSection(), appRegAppUidName, appRegAppUid);
+        expectedAppRegAppUids.AppendL(appRegAppUid);
+        }
+    
+    TInt err = KErrNone;
+    RApplicationRegistryView subSession;
+    CleanupClosePushL(subSession);
+    if(GetIntFromConfig(ConfigSection(), _L("Locale"), locale))
+        {
+        if(expectedAppRegAppUids.Count())
+            {
+            TRAP(err,subSession.OpenViewL(iScrSession, expectedAppRegAppUids, (TLanguage)locale));
+            }
+        else
+            {
+            TRAP(err,subSession.OpenViewL(iScrSession, (TLanguage)locale));
+            }
+        if(KErrNone != err)
+            {
+            CleanupStack::PopAndDestroy(1,&subSession);
+            expectedAppRegAppUids.Close();
+            CleanupStack::Pop(2); //poping expectedAppRegAppUids expectedAppRegData            
+            expectedAppRegData.ResetAndDestroy();
+            User::Leave(err);
+            }
+        }
+    else
+        {
+        if(expectedAppRegAppUids.Count())
+            {
+            TRAP(err,subSession.OpenViewL(iScrSession, expectedAppRegAppUids));
+            }
+        else
+            {
+            TRAP(err,subSession.OpenViewL(iScrSession));
+            }
+        if(KErrNone != err)
+           {
+            CleanupStack::PopAndDestroy(1,&subSession);
+            expectedAppRegAppUids.Close();
+            CleanupStack::Pop(2); //poping expectedAppRegAppUids expectedAppRegData            
+            expectedAppRegData.ResetAndDestroy();
+            User::Leave(err);
+           }
+        }
+    
+    RPointerArray<CApplicationRegistrationData> actualAppRegData;
+    CleanupClosePushL(actualAppRegData);
+    
+    while(1)
+    {    
+    actualAppRegData.ResetAndDestroy();
+    
+    if(iIsPerformanceTest)
+        StartTimer();
+    TRAP(err,subSession.GetNextApplicationRegistrationInfoL(noOfEntries, actualAppRegData))
+    if(iIsPerformanceTest)
+        StopTimerAndPrintResultL();
+    
+    if( (KErrNone != err) || (iIsPerformanceTest && (EFail == TestStepResult())) )
+        {
+        CleanupStack::Pop(1); //poping actualAppRegData 
+        actualAppRegData.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(1,&subSession);
+        expectedAppRegAppUids.Close();
+        CleanupStack::Pop(2); //poping expectedAppRegAppUids expectedAppRegData
+        expectedAppRegData.ResetAndDestroy();
+        User::Leave(err);
+        }
+    
+    actualAppRegDataCount = actualAppRegData.Count();
+    
+    if(remainingExpectedCount > noOfEntries)
+        {
+        count = noOfEntries;
+        remainingExpectedCount -=  count;        
+        }
+    else
+        {
+        count =  remainingExpectedCount;
+        isFinish = ETrue;
+        }
+        
+    if(isFinish)
+        {
+        break;
+        }
+    
+    if (count != actualAppRegDataCount)
+        {
+        INFO_PRINTF1(_L("actualAppRegDataCount is not same as expextedAppRegDataCount"));
+        SetTestStepResult(EFail);  
+        CleanupStack::Pop(1); //poping actualAppRegData 
+        actualAppRegData.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(1,&subSession);
+        expectedAppRegAppUids.Close();
+        CleanupStack::Pop(2); //poping expectedAppRegAppUids expectedAppRegData
+        expectedAppRegData.ResetAndDestroy();
+        return;
+        }       
+    
+    for(TInt i=0 ; i < count ; i++)
+        {
+      if(!CompareApplicationRegistrationDataL(actualAppRegData[i], expectedAppRegData[index]))
+          {
+          SetTestStepResult(EFail);
+          isError = ETrue;
+          break;
+          }     
+      index++;
+        }
+    
+    if(isError)
+        {
+        break;
+        }    
+    }
+    
+    CleanupStack::Pop(1); //poping actualAppRegData 
+    actualAppRegData.ResetAndDestroy();
+    CleanupStack::PopAndDestroy(1,&subSession);
+    expectedAppRegAppUids.Close();
+    CleanupStack::Pop(2); //poping expectedAppRegAppUids expectedAppRegData
+    expectedAppRegData.ResetAndDestroy();
+    }
+
+void CScrGetApplicationRegistrationViewSubsessionStep::ImplTestStepPostambleL()
+    {
+    
+    }
+//-----------------CScrMultipleSubsessionsForAppRegistryViewStep-------------
+
+CScrMultipleSubsessionsForAppRegistryViewStep::CScrMultipleSubsessionsForAppRegistryViewStep() 
+    {
+    
+    }
+
+CScrMultipleSubsessionsForAppRegistryViewStep::~CScrMultipleSubsessionsForAppRegistryViewStep()
+// Destructor.
+    {
+    iScrSession.Close();
+    }
+
+void CScrMultipleSubsessionsForAppRegistryViewStep::ImplTestStepPreambleL()
+    {
+    User::LeaveIfError(iScrSession.Connect());
+    }
+
+void CScrMultipleSubsessionsForAppRegistryViewStep::ImplTestStepL()
+    {            
+    TInt locale;    
+    TInt actualAppRegDataCount(0);
+    TInt count = 0;
+    TInt index = 0;
+      
+    RPointerArray<Usif::CApplicationRegistrationData> expectedAppRegData;
+    CleanupClosePushL(expectedAppRegData);
+    INFO_PRINTF1(_L("Read expected entries for verification "));
+    GetApplicationRegistrationDataFromConfigL(expectedAppRegData);
+    
+    TInt noOfEntries(1);
+    GetIntFromConfig(ConfigSection(), _L("NoOfEntries"), noOfEntries);
+    
+    TInt noOfAppRegAppUid = 0;
+    TBuf<20> appRegAppUidName;
+    RArray<TUid> appUidsBeingQueried;
+    CleanupClosePushL(appUidsBeingQueried);
+
+    GetIntFromConfig(ConfigSection(), _L("AppRegAppUidCount"), noOfAppRegAppUid);
+    for (TUint i = 0; i < noOfAppRegAppUid; ++i)
+        {   
+        TUid appRegAppUid;
+        appRegAppUidName = _L("AppRegAppUid");
+        GenerateIndexedAttributeNameL(appRegAppUidName, i);
+        GetUidFromConfig(ConfigSection(), appRegAppUidName, appRegAppUid);
+        appUidsBeingQueried.AppendL(appRegAppUid);
+        }
+    
+    GetIntFromConfig(ConfigSection(), _L("Locale"), locale);
+    
+    TInt err = KErrNone;
+    RApplicationRegistryView subSession;
+    CleanupClosePushL(subSession);
+    
+    TRAP(err,subSession.OpenViewL(iScrSession, (TLanguage)locale));
+    if(KErrNone != err)
+        {
+        CleanupStack::PopAndDestroy(1,&subSession);
+        appUidsBeingQueried.Close();
+        CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData            
+        expectedAppRegData.ResetAndDestroy();
+        User::Leave(err);
+        }
+
+    RPointerArray<CApplicationRegistrationData> actualAppRegData;
+    CleanupClosePushL(actualAppRegData);
+    
+    actualAppRegData.ResetAndDestroy();
+    TRAP(err,subSession.GetNextApplicationRegistrationInfoL(noOfEntries, actualAppRegData));
+    if(KErrNone != err)
+        {
+        CleanupStack::Pop(1); //poping actualAppRegData 
+        actualAppRegData.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(1,&subSession);
+        appUidsBeingQueried.Close();
+        CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData
+        expectedAppRegData.ResetAndDestroy();
+        User::Leave(err);
+        }
+              
+    actualAppRegDataCount = actualAppRegData.Count();
+    count = noOfEntries;
+           
+    if (count != actualAppRegDataCount)
+        {
+        INFO_PRINTF1(_L("actualAppRegDataCount is not same as noOfEntries"));
+        SetTestStepResult(EFail);  
+        CleanupStack::Pop(1); //poping actualAppRegData 
+        actualAppRegData.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(1,&subSession);
+        appUidsBeingQueried.Close();
+        CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData
+        expectedAppRegData.ResetAndDestroy();
+        return;
+        }  
+       
+    for(TInt i=0 ; i < count ; i++)
+        {
+        // Compare the first "count" number of entries in the DB to the entries specified in the config file. 
+        if(!CompareApplicationRegistrationDataL(actualAppRegData[i], expectedAppRegData[index]))
+             {
+             SetTestStepResult(EFail);
+             break;
+             }     
+        index++;
+        }
+       
+    actualAppRegData.ResetAndDestroy();
+    TRAP(err,subSession.OpenViewL(iScrSession, appUidsBeingQueried, (TLanguage)locale));
+    if(KErrNone != err)
+        {
+        CleanupStack::PopAndDestroy(1,&subSession);
+        appUidsBeingQueried.Close();
+        CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData            
+        expectedAppRegData.ResetAndDestroy();
+        User::Leave(err);
+        }
+              
+    TRAP(err,subSession.GetNextApplicationRegistrationInfoL(noOfEntries, actualAppRegData))
+    if(KErrNone != err)
+        {
+        CleanupStack::Pop(1); //poping actualAppRegData 
+        actualAppRegData.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(1,&subSession);
+        appUidsBeingQueried.Close();
+        CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData
+        expectedAppRegData.ResetAndDestroy();
+        User::Leave(err);
+        }
+                    
+     actualAppRegDataCount = actualAppRegData.Count();
+     count = noOfAppRegAppUid;
+                  
+     if (count != actualAppRegDataCount)
+        {
+        INFO_PRINTF1(_L("actualAppRegDataCount is not same as noOfAppRegAppUid to be fetched"));
+        SetTestStepResult(EFail);  
+        CleanupStack::Pop(1); //poping actualAppRegData 
+        actualAppRegData.ResetAndDestroy();
+        CleanupStack::PopAndDestroy(1,&subSession);
+        appUidsBeingQueried.Close();
+        CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData
+        expectedAppRegData.ResetAndDestroy();
+        return;
+        }     
+          
+     index = 0;
+     for(TInt i=0 ; i < count ; i++)
+        {
+         // Compare the entries fetched from the DB to the entries specified in the config file.
+        if(!CompareApplicationRegistrationDataL(actualAppRegData[i], expectedAppRegData[index]))
+           {
+           SetTestStepResult(EFail);
+           break;
+           }     
+        index++;
+        }
+
+    CleanupStack::Pop(1); //poping actualAppRegData 
+    actualAppRegData.ResetAndDestroy();
+    CleanupStack::PopAndDestroy(1,&subSession);
+    appUidsBeingQueried.Close();
+    CleanupStack::Pop(2); //poping appUidsBeingQueried expectedAppRegData
+    expectedAppRegData.ResetAndDestroy();
+    }
+
+void CScrMultipleSubsessionsForAppRegistryViewStep::ImplTestStepPostambleL()
+    {
+    
+    }