localisation/apparchitecture/tef/T_LocaleStep.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localisation/apparchitecture/tef/T_LocaleStep.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,782 @@
+// Copyright (c) 2005-2009 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 "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Tests to meet REQ758.2: "Captions localization must be efficient
+// (i.e. not waste disk space) and extensible (i.e. support non-ROM language packs)"\n
+// Test for UIKON GT0143 Typhoon Work Series 60 Changes
+// REQ758.2: Captions localization must be efficient (i.e. not waste disk space)
+// and extensible (i.e. support non-ROM language packs)
+// Test for CR0902 - Enable Dynamic Language Switching in APPARC.
+// Application's localisable information should be updated by apparc on language change event.
+// 
+//
+
+
+
+/**
+ @file
+ @internalComponent - Internal Symbian test code 
+*/
+
+#include <e32test.h>
+#include <f32file.h>
+#include <apgicnfl.h>
+#include <hal.h>
+#include <apgcli.h>
+#include "T_LocaleStep.h"
+
+const TUid KUidTestApp = { 10 }; //uid of tstapp.
+const TUid KUidCustomiseDefaultIconApp = {0x10208181}; // uid of CustomiseDefaultIconApp.
+const TInt KDelayForOnDemand = 20000; //a small delay
+const TInt KDelay = 4000000; // Most apparc tests have 2.5 secs wait time to let apparc update the app-list, but on safer side let us give 4 secs.
+const TInt KViewCount = 3; // Total no of views in tstapp
+
+
+/**
+  Auxiliary Fn for Test Case ID T-LocaleStep-TestAllLanguages
+ 
+  This method loads the required DLL for the language specified as argument
+  and changes the locale accordingly.
+ 
+*/
+void CT_LocaleStep::ChangeLocaleL(TLanguage aLanguage)
+	{
+	_LIT(KLitLocaleDllNameBase, "ELOCL");
+	_LIT(KLitLocaleDllNameExtension, ".LOC");
+	RLibrary localeDll;
+	TBuf<16> localeDllName(KLitLocaleDllNameBase);
+	CleanupClosePushL(localeDll);
+	const TUidType uidType(TUid::Uid(0x10000079),TUid::Uid(0x100039e6));
+	_LIT(TwoDigExt,".%02d");
+	localeDllName.AppendFormat(TwoDigExt, aLanguage);
+	TInt error=localeDll.Load(localeDllName, uidType);
+	if (error==KErrNotFound)
+		{
+		localeDllName=KLitLocaleDllNameBase;
+		localeDllName.Append(KLitLocaleDllNameExtension);
+		error=localeDll.Load(localeDllName, uidType);
+		}
+	User::LeaveIfError(error);
+	User::LeaveIfError(UserSvr::ChangeLocale(localeDllName));
+	CleanupStack::PopAndDestroy(); // localeDll
+	}
+
+// CheckIcons is a function used in testcase TestLocaleDefaultIconL to check the size of the default icons
+void CT_LocaleStep::CheckIcons(CArrayFixFlat<TSize>* aNewIconSizes,TSize aSmall,TSize aMedium,TSize aLarge, TSize& afstIcon, TSize& asecIcon, TSize& atrdIcon)
+	{
+	afstIcon = (*aNewIconSizes)[0];
+	asecIcon = (*aNewIconSizes)[1];
+	atrdIcon = (*aNewIconSizes)[2];
+	TEST((afstIcon==aSmall) || (afstIcon==aMedium) || (afstIcon==aLarge) && ((afstIcon!=asecIcon) && (afstIcon!=atrdIcon)));
+	TEST((asecIcon==aSmall) || (asecIcon==aMedium) || (asecIcon==aLarge) && ((asecIcon!=afstIcon) && (asecIcon!=atrdIcon)));
+	TEST((atrdIcon==aSmall) || (atrdIcon==aMedium) || (atrdIcon==aLarge) && ((atrdIcon!=afstIcon) && (atrdIcon!=asecIcon)));	
+	}
+
+/**
+  @SYMTestCaseID APPFWK-APPARC-0070
+ 
+  @SYMPREQ
+ 
+  @SYMTestCaseDesc Test whether the default app icons change with respect to the locale/language.
+  This testcase checks whether BaflUtils::NearestLanguageFile is called when the locale has been changed.
+ 
+  @SYMTestPriority High  
+ 
+  @SYMTestStatus Implemented
+
+  @SYMTestActions  Call User::Language() to check that the default locale is English; Call CT_LocaleStep::CheckIcons 
+  to check the size of the current default icons; Call UserSvr::ChangeLocale to change the Locale to French; 
+  Call CT_LocaleStep::CheckIcons to check the size of the new icons; Restore the file system and the locale 
+  and check if the icons are restored.
+  API Calls:\n	
+  
+  @SYMTestExpectedResults Returns KErrNone
+ */	
+void CT_LocaleStep::TestLocaleDefaultIconL()
+	{
+	INFO_PRINTF1(_L("APPFWK-APPARC-0070: TestLocaleDefaultIconL started..."));	
+	
+	TInt ret = 0;
+		
+	//first checks that language is not currently set to French (any other language except English since English is the default language
+	TEST(User::Language()!=ELangFrench);
+
+	// getappiconsizes must be called to check if the icons are the default ones
+	// KUidCustomiseDefaultIconApp - uid of CustomiseDefaultIconApp_reg.RSS; this app has a localisable resource file, CustomiseDefaultIconApp_loc.RSS, that does not define any icon
+	// Hence, the default icons must be picked up when the language changes to French. The default icons for French are defined in default_app_icon.m02
+
+	CArrayFixFlat<TSize>* newIconSizes = new(ELeave) CArrayFixFlat<TSize>(3);
+	CleanupStack::PushL(newIconSizes);
+	TRAP(ret,iLs.GetAppIconSizes(KUidCustomiseDefaultIconApp, *newIconSizes));
+	TEST(ret==KErrNone);
+	TEST(newIconSizes->Count()!=0);
+	// these are the sizes of the default icons
+	TSize small(24,24);
+	TSize medium(32,32);
+	TSize large(48,48);
+	TSize fstIcon;
+	TSize secIcon;
+	TSize trdIcon;
+	CheckIcons(newIconSizes, small, medium,large, fstIcon, secIcon, trdIcon);
+	
+	// Change the locale to French
+	TRAP(ret,ChangeLocaleL(ELangFrench));
+	TEST(ret==KErrNone);
+	TEST(User::Language()==ELangFrench);//checks that the language has been set to French
+
+	//Wait for a small period to let apparc receive language change notification
+	User::After(KDelayForOnDemand);
+	//call getappiconsizes to see if the new icons have been changed as as expected 
+	// The size of the icons indicates whether the icon corresponding to French Locale has been picked up
+	newIconSizes->Reset();
+	TRAP(ret,iLs.GetAppIconSizes(KUidCustomiseDefaultIconApp, *newIconSizes));
+	TEST(ret==KErrNone);
+	TEST(newIconSizes->Count()!=0);
+	small.SetSize(25,25);
+	medium.SetSize(35,35);
+	large.SetSize(50,50);
+	CheckIcons(newIconSizes, small, medium,large, fstIcon, secIcon, trdIcon);
+
+	//have to restore the locale before exiting the testcase
+	TRAP(ret,ChangeLocaleL(ELangEnglish));
+	TEST(ret==KErrNone);
+	TEST(User::Language()==ELangEnglish);
+
+	//Again wait for a small period to let apparc receive language change notification
+	User::After(KDelayForOnDemand);
+
+	//call getappiconsizes to see if the new icons have been changed as as expected 
+	// The size of the icons indicates whether the icon corresponding to English Locale has been picked up
+	newIconSizes->Reset();
+	TRAP(ret,iLs.GetAppIconSizes(KUidCustomiseDefaultIconApp, *newIconSizes));
+	TEST(ret==KErrNone);
+	TEST(newIconSizes->Count()!=0);
+	small.SetSize(24,24);
+	medium.SetSize(32,32);
+	large.SetSize(48,48);
+	CheckIcons(newIconSizes, small, medium,large, fstIcon, secIcon, trdIcon);
+
+	// Icon cleanup
+	CleanupStack::PopAndDestroy(newIconSizes);
+	newIconSizes=NULL;
+	INFO_PRINTF1(_L("APPFWK-APPARC-0070: TestLocaleDefaultIconL finished..."));	
+	}
+	
+/**
+  @SYMTestCaseID APPFWK-APPARC-0061
+ 
+  @SYMPREQ CR0902 - Enable Dynamic Language Switching in APPARC.
+ 
+  @SYMTestCaseDesc Test whether caption, short caption and app icon, is updated with respect to the change 
+  in locale/language. This test case checks on language change event apparc updates application 
+  localisable information for all installed applications, without forcing a change in the part of 
+  file system which apparc monitors. 
+  This test also tests, on a language change event, application's localisable information is 
+  updated immediately, if not yet updated by the re-scan (On demand loading). This is done by not 
+  giving enough time to finish rescan of app-list.
+ 
+  @SYMTestPriority Critical 
+ 
+  @SYMTestStatus Implemented
+
+  @SYMTestActions  Check if language is English by calling User::Language(). 
+  
+  1. Call GetAppInfo() by passing an application's UID which provides support for multiple languages.
+  Check if the caption and short caption, both are in English. Change locale to French.
+  2. Call GetAppIcon() by passing same application's UID. Check app icons are same as sepcified in 
+  app icon file for English locale.
+  
+  Wait for a small period (20 milli seconds) to let apparc receive language change notification. 
+  Again - 
+  1. Call GetAppInfo() by passing same application's UID and check if the caption and short caption, 
+  both are in French.
+  2. Call GetAppIcon() by passing same application's UID. Check app icons are same as sepcified in 
+  app icon file for French locale.
+  
+  Restore locale to English and again check - 
+  1. If caption and short caption are in English after a call to GetAppInfo() for the same application.
+  2. Call GetAppIcon() by passing same application's UID. Check app icons are same as sepcified in 
+  app icon file for English locale.
+  
+  @SYMTestExpectedResults 
+  1. GetAppInfo() should fetch caption and short caption in the newly-set language.
+  2. GetAppIcon() should fetch icons from the icon file selected for current locale.
+ */	
+void CT_LocaleStep::TestLocaleApplicationInfoOnDemandL()
+	{
+	INFO_PRINTF1(_L("APPFWK-APPARC-0061: TestLocaleApplicationInfoOnDemandL started..."));
+	TestAppInfoL(ETrue);
+	INFO_PRINTF1(_L("APPFWK-APPARC-0061: TestLocaleApplicationInfoOnDemandL finished..."));	
+	}
+
+/**
+  @SYMTestCaseID APPFWK-APPARC-0062
+ 
+  @SYMPREQ CR0902 - Enable Dynamic Language Switching in APPARC.
+ 
+  @SYMTestCaseDesc Test whether caption, short caption and app icon, is updated with respect to the change in 
+  locale/language. This test case checks on language change event apparc updates application localisable
+  information for all installed applications, without forcing a change in the part of file system which 
+  apparc monitors.
+ 
+  @SYMTestPriority Critical
+ 
+  @SYMTestStatus Implemented
+
+  @SYMTestActions  Check if language is English by calling User::Language(). 
+  
+  1. Call GetAppInfo() by passing an application's UID which provides support for multiple languages.
+  Check if the caption and short caption, both are in English. Change locale to French.
+  2. Call GetAppIcon by passing same application's UID. Check app icons are same as sepcified in 
+  app icon file for English locale.
+  
+  Change locale to French. Wait for some time (e.g. 4 seconds) to let apparc complete rescanning of app-list.
+  Again - 
+  1. Call GetAppInfo() by passing same application's UID and check if the caption and short caption, 
+  both are in French.
+  2. Call GetAppIcon() by passing same application's UID. Check app icons are same as sepcified in 
+  app icon file for French locale.
+  
+  Restore locale to English and again check - 
+  1. If caption and short caption are in English after a call to GetAppInfo() for the same application.
+  2. Call GetAppIcon() by passing same application's UID. Check app icons are same as sepcified in 
+  app icon file for English locale.
+  
+  @SYMTestExpectedResults 
+  1. GetAppInfo() should fetch caption and short caption in the newly-set language.
+  2. GetAppIcon() should fetch icons from the icon file selected for current locale.  
+ */	
+void CT_LocaleStep::TestLocaleApplicationInfoL()
+	{
+	INFO_PRINTF1(_L("APPFWK-APPARC-0062: TestLocaleApplicationInfoL started..."));	
+	TestAppInfoL(EFalse);	
+	INFO_PRINTF1(_L("APPFWK-APPARC-0062: TestLocaleApplicationInfoL finished..."));	
+	}
+			
+/** 
+  This function performs steps to test application related information (caption, short caption and app icon)
+  on language change event . 
+  It is called from TestLocaleApplicationInfoOnDemandL and TestLocaleApplicationInfoL.
+    
+  @param aOnDemand Pass true if on demand loading is required, otherwise false.
+*/
+void CT_LocaleStep::TestAppInfoL(TBool aOnDemand)
+	{
+	TInt ret = RFbsSession::Connect();
+	TEST(ret == KErrNone);
+	
+	// If it is on-demand loading delay would be very less.
+	TInt delay = aOnDemand ? KDelayForOnDemand : KDelay;
+	
+	// Check language is not currently set to French (any other language except English since English is the default language.
+	TEST(User::Language() != ELangFrench);
+	
+	// Caption and Short-caption should be same as defined in English localisable strings file (tstapp01.rls)
+	_LIT(KCaptionEng, "TstCap UK"); 
+	_LIT(KShortCaptionEng, "TC UK");
+	
+	// Call GetAppInfo() by passing KUidTestApp as tstapp's UID. tstapp provides support for multiple languages.
+	TApaAppInfo appInfo;
+	ret = iLs.GetAppInfo(appInfo, KUidTestApp);
+	TEST(ret == KErrNone);
+	
+	// Caption and short-caption should be in English.
+	TEST(appInfo.iCaption == KCaptionEng);
+	TEST(appInfo.iShortCaption == KShortCaptionEng);
+	
+	// Test application's icons, should be same as sepcified in app icon file for English locale.
+	TestAppIconL(TSize(40,55));
+		
+	// Change the locale to French
+	TRAP(ret, ChangeLocaleL(ELangFrench));
+	TEST(ret == KErrNone);
+	TEST(User::Language() == ELangFrench);//check language is set to French
+
+	// Caption and Short-caption should be same as defined in French localisable strings file (tstapp02.rls)
+	_LIT(KCaptionFrench, "TstCap FR");
+	_LIT(KShortCaptionFrench, "TC FR");
+	
+	User::After(delay);
+	
+	// Again call GetAppInfo() by passing KUidTestApp as UID. 	
+	ret = iLs.GetAppInfo(appInfo, KUidTestApp);
+	TEST(ret == KErrNone);
+	
+	// Caption and short-caption should be in French.
+	TEST(appInfo.iCaption == KCaptionFrench);
+	TEST(appInfo.iShortCaption == KShortCaptionFrench);
+	
+	// Test application's icons, should be same as sepcified in app icon file for French locale.
+	TestAppIconL(TSize(50,50));
+
+	// Restore locale before exiting the testcase.
+	TRAP(ret, ChangeLocaleL(ELangEnglish));
+	TEST(ret == KErrNone);
+	TEST(User::Language() == ELangEnglish);
+	
+	User::After(delay);
+	
+	ret = iLs.GetAppInfo(appInfo, KUidTestApp);
+	TEST(ret == KErrNone);
+	
+	// Caption and short-caption should again be in English.
+	TEST(appInfo.iCaption == KCaptionEng);
+	TEST(appInfo.iShortCaption == KShortCaptionEng);
+	
+	// Test application's icons, should be same as sepcified in app icon file for English locale.
+	TestAppIconL(TSize(40,55));
+	
+	RFbsSession::Disconnect();
+	}
+/**
+  This function tests application's icon. It is called from TestAppInfoL function.
+*/	
+void CT_LocaleStep::TestAppIconL(TSize aSize)
+	{
+	CApaMaskedBitmap* icon = CApaMaskedBitmap::NewLC();
+	TSize lastSize(0,0);
+
+	TInt ret = iLs.GetAppIcon(KUidTestApp, aSize, *icon);
+	TEST(ret == KErrNone);
+	// Returned icon size should be exactly same as asked.
+	TEST(icon->SizeInPixels().iWidth * icon->SizeInPixels().iHeight == aSize.iWidth * aSize.iHeight);
+	
+	CleanupStack::PopAndDestroy(icon);
+	}
+
+/**
+  @SYMTestCaseID APPFWK-APPARC-0063
+ 
+  @SYMPREQ CR0902 - Enable Dynamic Language Switching in APPARC.
+ 
+  @SYMTestCaseDesc Test whether caption and short caption remains same on language change, if application
+   does not provide support for multiple languages. 
+ 
+  @SYMTestPriority Critical 
+ 
+  @SYMTestStatus Implemented
+
+  @SYMTestActions  Check if language is English by calling User::Language(). Call GetAppInfo() by passing an
+  application's UID which does not provide support for multiple languages. Check if the caption and short 
+  caption, both are in English. Change locale to French.Wait for a small period (20 milli seconds) to let 
+  apparc receive language change notification. Again Call GetAppInfo() by passing same application's UID and 
+  check if the caption and short caption, both are still in English. Restore locale to English and again check 
+  if caption and short caption are in English after a call to GetAppInfo() for the same application.
+  
+  @SYMTestExpectedResults GetAppInfo() should fetch caption and short caption in the same language. 
+ */	
+void CT_LocaleStep::TestLocaleApplicationInfo1L()
+	{
+	INFO_PRINTF1(_L("APPFWK-APPARC-0063: TestLocaleApplicationInfo1L started..."));	
+	TInt ret = KErrNotFound;	
+		
+	// Check language is not currently set to French (any other language except English since English is the default language.
+	TEST(User::Language() != ELangFrench);
+	
+	// Caption and Short-caption should be same as defined in the localisable resource file. (CustomiseDefaultIconApp_loc.RSS)
+	_LIT(KCaptionEng, "CustomiseDefaultIconAppLong"); 
+	_LIT(KShortCaptionEng, "CustomiseDefaultIconApp");
+	
+	// KUidCustomiseDefaultIconApp - uid of CustomiseDefaultIconApp_reg.RSS; this app does not provide support for multiple languages.
+		
+	// Call GetAppInfo() by passing above UID.
+	TApaAppInfo appInfo;
+	ret = iLs.GetAppInfo(appInfo, KUidCustomiseDefaultIconApp);
+	TEST(ret == KErrNone);
+	
+	// Caption and short-caption should be in English.	
+	TEST(appInfo.iCaption == KCaptionEng);
+	TEST(appInfo.iShortCaption == KShortCaptionEng);
+		
+	// Change the locale to French
+	TRAP(ret,ChangeLocaleL(ELangFrench));
+	TEST(ret == KErrNone);
+	TEST(User::Language() == ELangFrench);//check language is set to French.
+
+	// Wait for a small period (20 milli seconds) to let apparc receive language change notification. 
+	User::After(KDelayForOnDemand);	
+	
+	// Again call GetAppInfo() by passing KUidTestApp as UID. 	
+	ret = iLs.GetAppInfo(appInfo, KUidCustomiseDefaultIconApp);
+	TEST(ret == KErrNone);
+	
+	// Caption and short-caption should be in English.
+	TEST(appInfo.iCaption == KCaptionEng);
+	TEST(appInfo.iShortCaption == KShortCaptionEng);	
+
+	// Restore locale before exiting the testcase.
+	TRAP(ret,ChangeLocaleL(ELangEnglish));
+	TEST(ret == KErrNone);
+	TEST(User::Language() == ELangEnglish);
+	
+	User::After(KDelayForOnDemand);
+	ret = iLs.GetAppInfo(appInfo, KUidCustomiseDefaultIconApp);
+	TEST(ret == KErrNone);
+	
+	// Caption and short-caption should be in English again.
+	TEST(appInfo.iCaption == KCaptionEng);
+	TEST(appInfo.iShortCaption == KShortCaptionEng);
+	
+	INFO_PRINTF1(_L("APPFWK-APPARC-0063: TestLocaleApplicationInfo1L finished..."));	
+	}
+
+/**
+  @SYMTestCaseID APPFWK-APPARC-0064 APPFWK-APPARC-0066 APPFWK-APPARC-0068
+ 
+  @SYMPREQ CR0902 - Enable Dynamic Language Switching in APPARC.
+ 
+  @SYMTestCaseDesc Test whether 
+  1. View's caption is updated with respect to the change in locale/language. 
+  2. View's icons is updated with respect to the change in locale/language. 
+  3. View's icon file name changes with respect to the change in locale/language. 
+  
+  This test case checks apparc updates application localisable information for all installed applications 
+  on language change event without forcing a change in the part of file system which apparc monitors.
+  This test also tests, on a language change event, application's localisable information is updated 
+  immediately, if not yet updated by the re-scan (On demand loading). This is done by not giving enough 
+  time to finish rescan of app-list.
+ 
+  @SYMTestPriority High 
+ 
+  @SYMTestStatus Implemented
+
+  @SYMTestActions  Check if language is English by calling User::Language(). Call GetAppViews() by passing 
+  an application's UID which provides support for multiple languages and different size icons for French 
+  language. 
+  
+  1. Check if all view captions are same as specified in localisable file and in English.  
+  2. Call GetAppViewIcon() passing above application's ID. Check view icon size, it should be as 
+  specified in English icon file.
+  3. Call overload of GetAppViewIcon() which returns view's icon file, passing above application's ID. 
+  
+  Change locale to French.Wait for a small period (20 milli seconds) to let apparc receive language change 
+  notification. Again - 
+  
+  1. Call GetAppViews() by passing same application's UID and check if the view captions for all views 
+  are in French.
+  2. Call GetAppViewIcon() by passing same application's UID.Check view icon size, it should be as specified 
+  in French icon file.
+  3. Call GetAppViewIcon() by passing same application's UID. Check view icon file, it should be same as 
+  specified in French locale.
+  
+  Restore locale to English and again check 
+  1. if view captions are same as specified in English resource file.
+  2. if view icon size is same as specified in English icon file.
+  3. if view icon file is same as specified in English resource file.
+  
+  @SYMTestExpectedResults Following are the expected results.
+  1. GetAppViews() should fetch captions for all views in the newly-set language.
+  2. GetAppViewIcon() should fetch icons specified in the newly-set language.
+  3. GetAppViewIcon() should fetch view's icon file specified in the newly-set language.
+ */	
+void CT_LocaleStep::TestLocaleViewCaptionAndIconOnDemandL()
+	{
+	INFO_PRINTF1(_L("APPFWK-APPARC-0064: TestLocaleViewCaptionOnDemandL started..."));		
+	INFO_PRINTF1(_L("APPFWK-APPARC-0066: TestLocaleViewIconSizeOnDemandL started..."));
+	INFO_PRINTF1(_L("APPFWK-APPARC-0068: TestLocaleViewIconFileOnDemandL started..."));
+	TestViewCaptionAndIconL(ETrue);
+	INFO_PRINTF1(_L("APPFWK-APPARC-0064: TestLocaleViewCaptionOnDemandL finished..."));
+	INFO_PRINTF1(_L("APPFWK-APPARC-0066: TestLocaleViewIconSizeOnDemandL finished..."));
+	INFO_PRINTF1(_L("APPFWK-APPARC-0068: TestLocaleViewIconFileOnDemandL finished..."));	
+	}
+	
+/**
+  @SYMTestCaseID APPFWK-APPARC-0065 APPFWK-APPARC-0067 APPFWK-APPARC-0069
+ 
+  @SYMPREQ CR0902 - Enable Dynamic Language Switching in APPARC.
+  @SYMDEF PDEF113054 - Apparc fails to detect the presence of localized Mbm files
+ 
+  @SYMTestCaseDesc Test whether 
+  1. View's caption changes with respect to the change in locale/language.
+  2. View's icons is updated with respect to the change in locale/language. 
+  3. View's icon file name changes with respect to the change in locale/language. 
+  
+  This test case checks apparc updates application localisable information for all installed applications 
+  on language change event without forcing a change in the part of file system which apparc monitors.
+  
+  It checks for localized MBM files and MBM icon files with generic extension for an application. 
+  @SYMTestPriority High 
+ 
+  @SYMTestStatus Implemented
+
+  @SYMTestActions  Check if language is English by calling User::Language(). Call GetAppViews() by passing 
+  an application's UID which provides support for multiple languages and different size icons for French 
+  language. 
+  1. Check if all view captions are same as specified in localisable file and in English.
+  2. Call GetAppViewIcon() passing above application's ID. Check view icon size, it should be as 
+  specified in English icon file.
+  3. Call overload of GetAppViewIcon() which returns view's icon file, passing above application's ID. 
+  
+  Change locale to French. Wait for some time (e.g. 4 seconds) to let apparc complete rescanning of app-list.
+  Again - 
+  1. Call GetAppViews() by passing same application's UID and check if the view captions for all views 
+  are in French.
+  2. Call GetAppViewIcon() by passing same application's UID.Check view icon size, it should be as specified 
+  in French icon file.
+  3. Call GetAppViewIcon() by passing same application's UID. Check view icon file, it should be same as 
+  specified in French locale.
+  
+  Restore locale to English and again check - 
+  1. if view captions are same as specified in English resource file.
+  2. if view icon size is same as specified in English icon file.
+  3. if view icon file is same as specified in English resource file.
+  
+  @SYMTestExpectedResults Following are the expected results.
+  1. GetAppViews() should fetch captions for all views in the newly-set language.
+  2. GetAppViewIcon() should fetch icons specified in the newly-set language. 
+  3. GetAppViewIcon() should fetch view's icon file specified in the newly-set language.  		 
+ */	
+ void CT_LocaleStep::TestLocaleViewCaptionAndIconL()
+	{
+	INFO_PRINTF1(_L("APPFWK-APPARC-0065: TestLocaleViewCaption started..."));
+	INFO_PRINTF1(_L("APPFWK-APPARC-0067: TestLocaleViewIconSizeL started..."));
+	INFO_PRINTF1(_L("APPFWK-APPARC-0069: TestLocaleViewIconFileL started..."));
+	TestViewCaptionAndIconL(EFalse);
+	INFO_PRINTF1(_L("APPFWK-APPARC-0065: TestLocaleViewCaption finished..."));
+	INFO_PRINTF1(_L("APPFWK-APPARC-0067: TestLocaleViewIconSizeL finished..."));
+	INFO_PRINTF1(_L("APPFWK-APPARC-0069: TestLocaleViewIconFileL finished..."));
+	}
+		
+
+/** 
+  This function performs steps to test view related information (view caption, view icon size and view icon 
+  file name) on language change event.
+  and view icon file name.
+  
+  This function is called from following test cases -
+  TestLocaleViewCaptionAndIconOnDemandL,
+  TestLocaleViewCaptionAndIconL
+   
+  @param aTesCaption Pass true if caption test is required, otherwise false for view icon test.
+  @param aOnDemand Pass true if on demand loading is required, otherwise false.   
+*/
+void CT_LocaleStep::TestViewCaptionAndIconL(TBool aOnDemand)
+	{	
+	TInt ret = RFbsSession::Connect();
+	TEST(ret == KErrNone);
+	
+	// If it is on-demand loading delay would be very less.
+	TInt delay = aOnDemand ? KDelayForOnDemand : KDelay;
+	
+	// Check language is not currently set to French (any other language except English since English is the default language.
+	TEST(User::Language() != ELangFrench);
+	
+	// Create view array to hold views for TstApp.
+	CApaAppViewArray* appViews = new(ELeave) CApaAppViewArray(KViewCount);
+	CleanupStack::PushL(appViews);
+	
+	// Call GetAppViews() by passing tstapp's KUidTestApp as UID. 
+	// tstapp provides support for multiple languages. 
+	ret = iLs.GetAppViews(*appViews, KUidTestApp);
+	TEST(ret == KErrNone);
+	
+	// Check application's view count. It should have three views.One of them is invalid
+	TInt count = appViews->Count();	
+	TEST(count == KViewCount);	
+	
+	// Check application's view's captions or icons. They should be in English
+	CheckViewCaptionAndIconL(ELangEnglish, appViews);
+	CleanupStack::PopAndDestroy(appViews);		
+		
+	// Switch locale to French
+	TRAP(ret, ChangeLocaleL(ELangFrench));
+	TEST(ret == KErrNone);
+	TEST(User::Language() == ELangFrench);//check language is set to French
+
+	// Wait for a small period to let apparc receive language change notification. 
+	User::After(delay);	
+	
+	// Create view array to hold views for TstApp.
+	appViews = NULL;
+	appViews = new(ELeave) CApaAppViewArray(KViewCount);
+	CleanupStack::PushL(appViews);
+	
+	ret = iLs.GetAppViews(*appViews, KUidTestApp);
+	TEST(ret == KErrNone);	
+	
+	count = appViews->Count();
+	TEST(count == KViewCount);
+	
+	//Check application's view's captions or icons. They should be in French.
+	CheckViewCaptionAndIconL(ELangFrench, appViews);	
+	CleanupStack::PopAndDestroy(appViews);		
+	
+	//Restore locale to English before exiting the testcase
+	TRAP(ret, ChangeLocaleL(ELangEnglish));
+	TEST(ret == KErrNone);
+	TEST(User::Language() == ELangEnglish);
+	
+	User::After(delay);
+	
+	appViews = NULL;
+	appViews = new(ELeave) CApaAppViewArray(KViewCount);
+	CleanupStack::PushL(appViews);
+	ret = iLs.GetAppViews(*appViews, KUidTestApp);
+	
+	TEST(ret == KErrNone);	
+	count = appViews->Count();
+	TEST(count == KViewCount);
+	
+	//check every thing is restored to English.
+	CheckViewCaptionAndIconL(ELangEnglish, appViews);
+	CleanupStack::PopAndDestroy(appViews);
+	RFbsSession::Disconnect();	
+	}
+
+/** 
+  Tests view's caption and view's icon.
+  It is called from TestViewCaptionAndIconL function.
+  This function is hardcoded to test view captions and icons for two languages - 
+  ELangEnglish and ELangFrench, 
+  if any other language is passed from any test case, this function will cause the test case to fail.
+     
+  @param aLanguage Language for which to test caption/icon.
+  @param aAppViews application's view array.  
+*/	
+void CT_LocaleStep::CheckViewCaptionAndIconL(TLanguage aLanguage, CApaAppViewArray* aAppViews)
+	{
+	TInt testNumberOfIcons=KViewCount-1;
+	// the for loop will check for all view icons except the last one which is invalid
+	// Hence the upper limit is KViewCount-1
+	for (TInt ii=0; ii < testNumberOfIcons ; ii++)
+
+		{
+		const TApaAppViewInfo& viewInfo = (*aAppViews)[ii];
+		TEST(viewInfo.iViewCaption.Length() > 0);
+		TBuf<256> viewCaption;
+		TBuf<256> viewIconFileName;
+		TSize iconSize;
+		
+		switch(aLanguage)
+			{
+			case ELangEnglish:
+				viewCaption.Format(_L("V%d UK"), ii+1);
+				iconSize.iWidth  = 50;
+				iconSize.iHeight = 50;
+				break;
+							
+			case ELangFrench:
+				viewCaption.Format(_L("V%d FR"), ii+1);
+				iconSize.iWidth  = 40;
+				iconSize.iHeight = 55;
+				break;
+			
+			default:
+				// This case will cause test case to fail if any other language is passed apart from English and French.
+				break; 
+			}
+		
+		// View's captions should be same as defined in language's localisable strings file (tstappXX.rls)
+		TEST(viewInfo.iViewCaption == viewCaption);
+		
+		// View's icon size should be same as defined in icon file for the selected locale/language.
+		CApaMaskedBitmap* viewBitmap = CApaMaskedBitmap::NewLC();
+		TInt ret = iLs.GetAppViewIcon(KUidTestApp, viewInfo.iUid, iconSize, *viewBitmap);
+		TEST(ret == KErrNone);
+		CleanupStack::PopAndDestroy(viewBitmap);
+		
+		// View's icon file should be same as defined in language's localisable strings file (tstappXX.rls)
+		HBufC* fullFileName = NULL;
+		ret = iLs.GetAppViewIcon(KUidTestApp, viewInfo.iUid, fullFileName);
+		TEST(ret == KErrNone);
+		TEST(fullFileName != NULL);
+		INFO_PRINTF2(_L("View's icon file name is - %S"), fullFileName);
+		TEST(fullFileName->Length() > 0);
+		
+		delete fullFileName;
+		fullFileName = NULL;		
+		} //end of for
+/*The invalid View icon for language French has the file name "tstappview.mbm" This should 
+return KErrNotSupported. Refer to PDEF113054 for details */
+	if (aLanguage==ELangFrench)
+		{
+		TSize iconSize;
+		const TApaAppViewInfo& viewInfo = (*aAppViews)[2];
+		CApaMaskedBitmap* viewBitmap = CApaMaskedBitmap::NewLC();
+		TInt ret = iLs.GetAppViewIcon(KUidTestApp, viewInfo.iUid, iconSize, *viewBitmap);
+		TEST(ret == KErrNotSupported);
+		CleanupStack::PopAndDestroy(viewBitmap);
+		HBufC* fullFileName = NULL;
+		ret = iLs.GetAppViewIcon(KUidTestApp, viewInfo.iUid, fullFileName);
+		TEST(ret == KErrNone);
+		TEST(fullFileName != NULL);
+		INFO_PRINTF2(_L("Negative View icon file name is - %S"), fullFileName);
+		TEST(fullFileName->Length() > 0);
+		delete fullFileName;
+		fullFileName = NULL;		
+		}
+	}
+		
+CT_LocaleStep::~CT_LocaleStep()
+/**
+   Destructor
+ */
+	{
+	}
+
+CT_LocaleStep::CT_LocaleStep()
+/**
+   Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KT_LocaleStep);
+	}
+
+TVerdict CT_LocaleStep::doTestStepPreambleL()
+/**
+   @return - TVerdict code
+   Override of base class virtual
+ */
+	{
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CT_LocaleStep::doTestStepPostambleL()
+/**
+   @return - TVerdict code
+   Override of base class virtual
+ */
+	{
+	return TestStepResult();
+	}
+
+
+TVerdict CT_LocaleStep::doTestStepL()
+/**
+   @return - TVerdict code
+   Override of base class virtual
+ */
+{
+	INFO_PRINTF1(_L("Locale tests started"));
+	
+	FbsStartup();
+	TEST(KErrNone == iFs.Connect());
+	TEST(KErrNone == iLs.Connect());
+
+	// run the tests
+	//DONT_CHECK due to changes to file system	
+	HEAP_TEST_LS_SESSION(iLs, 0, DONT_CHECK, TestLocaleApplicationInfoOnDemandL() ,NO_CLEANUP);
+	HEAP_TEST_LS_SESSION(iLs, 0, DONT_CHECK, TestLocaleApplicationInfoL() ,NO_CLEANUP);
+	HEAP_TEST_LS_SESSION(iLs, 0, DONT_CHECK, TestLocaleApplicationInfo1L() ,NO_CLEANUP);		
+	HEAP_TEST_LS_SESSION(iLs, 0, DONT_CHECK, TestLocaleViewCaptionAndIconOnDemandL(), NO_CLEANUP);
+	HEAP_TEST_LS_SESSION(iLs, 0, DONT_CHECK, TestLocaleViewCaptionAndIconL() ,NO_CLEANUP);	
+	HEAP_TEST_LS_SESSION(iLs, 0, DONT_CHECK, TestLocaleDefaultIconL() ,NO_CLEANUP);
+	
+	iLs.Close();
+	iFs.Close();
+	
+	INFO_PRINTF1(_L("Test completed!"));
+	return TestStepResult();
+}