diff -r 0818dd463d41 -r 924385140d98 appfw/apparchitecture/tef/T_CaptionStep.cpp --- a/appfw/apparchitecture/tef/T_CaptionStep.cpp Thu Aug 19 10:05:08 2010 +0300 +++ b/appfw/apparchitecture/tef/T_CaptionStep.cpp Tue Aug 31 15:24:25 2010 +0300 @@ -1,4 +1,4 @@ -// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2008-2010 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" @@ -57,6 +57,7 @@ #include "appfwk_test.h" #include "ticoncaptionoverride.h" //KUidTestIconCapOverride defined here #include "TIconLoaderAndIconArrayForLeaks.h" +#include "T_SisFileInstaller.h" // @@ -89,11 +90,21 @@ // Cenrep configuration details for English language _LIT(KCenRepCaption, "CRTstCap UK"); _LIT(KCenRepShortCaption, "CRTC UK"); -_LIT(KCenRepIconFilename, "Z:\\resource\\apps\\ticoncapoverride.mbm"); +_LIT(KCenRepIconFilename, "C:\\resource\\apps\\ticoncapoverride.mbm"); + +_LIT(KTstAppStandAloneSisFile, "z:\\apparctest\\apparctestsisfiles\\TSTAPP_standalone.sis"); +_LIT(KTstAppStandAloneComponent, "TSTAPP_standalone"); + +_LIT(KTstAppTiconcaptionoverrideSisFile, "z:\\apparctest\\apparctestsisfiles\\ticoncaptionoverride.sis"); +_LIT(KTstAppTiconcaptionoverrideComponent, "ticoncaptionoverride"); + +_LIT(KForceRegAppSisFile, "z:\\apparctest\\apparctestsisfiles\\ForceRegApp1.sis"); +_LIT(KForceRegAppComponent, "ForceRegApp1"); const TUid KUidIconCaptionRepository = {0x1028583d}; // Central Repository UID. const TInt KTextSize = 100; +const TInt KDelay = 4000000; // // // CT_CaptionStep @@ -104,41 +115,61 @@ void CT_CaptionStep::ChangeLocaleL(TLanguage aLanguage) { #ifdef SYMBIAN_DISTINCT_LOCALE_MODEL - _LIT(KLitLocaleDllNameBase, "elocl_lan"); - _LIT(KLitLocaleDllNameExtension, ".loc"); + _LIT(KLitLanguageLocaleDllNameBase, "elocl_lan"); + //Region and collation code values are hard coded, as the check, after changing the locale is made for the language only. + _LIT(KLitRegionLocaleDllNameBase, "elocl_reg.826"); + _LIT(KLitCollationLocaleDllNameBase, "elocl_col.001"); + _LIT(ThreeDigExt,".%03d"); + TExtendedLocale localeDll; + const TUidType uidType(TUid::Uid(0x10000079),TUid::Uid(0x100039e6)); + TBuf<16> languageLocaleDllName(KLitLanguageLocaleDllNameBase); + languageLocaleDllName.AppendFormat(ThreeDigExt, aLanguage); + TBuf<16> regionLocaleDllName(KLitRegionLocaleDllNameBase); + TBuf<16> collationLocaleDllName(KLitCollationLocaleDllNameBase); + // Try to load the locale dll + TInt error=localeDll.LoadLocale(languageLocaleDllName, regionLocaleDllName, collationLocaleDllName); + + if (error==KErrNotFound) + { + // Locale dll is not found for the asked language. + ERR_PRINTF2(_L("Failed to find the locale dll for %d"), aLanguage); + } + + User::LeaveIfError(error); + localeDll.SaveSystemSettings(); #else _LIT(KLitLocaleDllNameBase, "ELOCL"); - _LIT(KLitLocaleDllNameExtension, ".LOC"); -#endif - RLibrary localeDll; - TBuf<16> localeDllName(KLitLocaleDllNameBase); + _LIT(TwoDigExt,".%02d"); + + RLibrary localeDll; CleanupClosePushL(localeDll); + const TUidType uidType(TUid::Uid(0x10000079),TUid::Uid(0x100039e6)); -#ifdef SYMBIAN_DISTINCT_LOCALE_MODEL - _LIT(ThreeDigExt,".%03d"); - localeDllName.AppendFormat(ThreeDigExt, aLanguage); -#else - _LIT(TwoDigExt,".%02d"); - localeDllName.AppendFormat(TwoDigExt, aLanguage); -#endif - + TBuf<16> localeDllName(KLitLocaleDllNameBase); + localeDllName.AppendFormat(TwoDigExt, language); + + // Try to load the locale dll TInt error=localeDll.Load(localeDllName, uidType); if (error==KErrNotFound) { - localeDllName=KLitLocaleDllNameBase; - localeDllName.Append(KLitLocaleDllNameExtension); - error=localeDll.Load(localeDllName, uidType); + // Locale dll is not found for the asked language. + ERR_PRINTF2(_L("Failed to find the locale dll for %d"), language); } + User::LeaveIfError(error); - -#ifdef SYMBIAN_DISTINCT_LOCALE_MODEL - TExtendedLocale myExtendedLocale; - User::LeaveIfError(myExtendedLocale.LoadLocaleAspect(localeDllName)); - User::LeaveIfError(myExtendedLocale.SaveSystemSettings()); -#else User::LeaveIfError(UserSvr::ChangeLocale(localeDllName)); + CleanupStack: opAndDestroy(); // localeDll #endif - CleanupStack::PopAndDestroy(&localeDll); + + // Check if the device locale has changed + if (aLanguage == User::Language()) + { + SetTestStepResult(EPass); + } + else + { + ERR_PRINTF3(_L("Failed to change the locale to %d whereas the current locale is"), aLanguage, User::Language()); + } } @@ -182,12 +213,11 @@ }; // Change the locale - ChangeLocaleL(languageToTest); - TEST(User::Language() == languageToTest); - - // Force the applist to be updated (so test app gets new language settings) - RPointerArray dummy; - User::LeaveIfError(iLs.ForceRegistration(dummy)); + if(languageToTest != User::Language()) + { + ChangeLocaleWaitForApplistUpdate(languageToTest); + TEST(User::Language() == languageToTest); + } // Do the same set of tests for each language TestCApaSystemControlListL(); @@ -199,7 +229,9 @@ } // restore original locale, just in case... - ChangeLocaleL(language); + if(User::Language() != language) + ChangeLocaleWaitForApplistUpdate(language); + TEST(User::Language() == language); } @@ -408,7 +440,7 @@ { INFO_PRINTF1(_L("Testing TApaAppInfo streams... ")); - TApaAppInfo appInfoShort(KUidTestApp, _L("z:\\sys\\bin\\tstapp.exe"), _L("TstCap UK"),_L("TC UK")); + TApaAppInfo appInfoShort(KUidTestApp, _L("c:\\sys\\bin\\tstapp.exe"), _L("TstCap UK"),_L("TC UK")); TEST(appInfoShort.iShortCaption.Compare(_L("TC UK"))==0); TFileName tempFile=_L("c:\\system\\test\\TC_temp.txt"); @@ -470,8 +502,7 @@ TEST(User::Language() == ELangEnglish); // Force the applist to be updated (so test app gets new language settings) - RPointerArray dummy; - User::LeaveIfError(iLs.ForceRegistration(dummy)); + ForceApplistUpdate(); // SetAppShortCaption should return KErrNotFound if it could not find the app INFO_PRINTF1(_L(".....setting short caption for an unknown app")); @@ -509,18 +540,16 @@ // Check short caption remains updated after a refresh of the applist INFO_PRINTF1(_L(".....checking short caption remains updated after a refresh of the applist")); - User::LeaveIfError(iLs.ForceRegistration(dummy)); + ForceApplistUpdate(); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption1); // Check short caption remains updated after a locale change INFO_PRINTF1(_L(".....checking short caption remains updated after a locale change")); - ChangeLocaleL(ELangJapanese); + ChangeLocaleWaitForApplistUpdate(ELangJapanese); TEST(User::Language() == ELangJapanese); // Japanese locale exists in epoc32 tree but not defined in test app - User::LeaveIfError(iLs.ForceRegistration(dummy)); - ChangeLocaleL(ELangEnglish); // back to English to see what happened in between + ChangeLocaleWaitForApplistUpdate(ELangEnglish); // back to English to see what happened in between TEST(User::Language() == ELangEnglish); - User::LeaveIfError(iLs.ForceRegistration(dummy)); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption1); @@ -530,17 +559,15 @@ TEST(err == KErrNone); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption1); // English, the current app language, doesn't change... - ChangeLocaleL(ELangFrench); + ChangeLocaleWaitForApplistUpdate(ELangFrench); TEST(User::Language() == ELangFrench); - User::LeaveIfError(iLs.ForceRegistration(dummy)); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption2); // Set short caption of an app for a language which the app does not include (ELangAmerican) INFO_PRINTF1(_L(".....setting short caption of an app for a language which the app does not include")); - ChangeLocaleL(ELangAmerican); + ChangeLocaleWaitForApplistUpdate(ELangAmerican); TEST(User::Language() == ELangAmerican); - User::LeaveIfError(iLs.ForceRegistration(dummy)); err = iLs.SetAppShortCaption(KShortCaption2, ELangAmerican, KUidTestApp); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption1); // American takes the default...so English...which has just been updated. @@ -551,37 +578,31 @@ TEST(err == KErrNone); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption1); // American takes the default...so English...which has just been updated. - ChangeLocaleL(ELangEnglish); + ChangeLocaleWaitForApplistUpdate(ELangEnglish); TEST(User::Language() == ELangEnglish); - User::LeaveIfError(iLs.ForceRegistration(dummy)); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption1); // English set individually ===> not updated by ELangNone - ChangeLocaleL(ELangFrench); + ChangeLocaleWaitForApplistUpdate(ELangFrench); TEST(User::Language() == ELangFrench); - User::LeaveIfError(iLs.ForceRegistration(dummy)); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption2); // French set individually ===> not updated by ELangNone - ChangeLocaleL(ELangGerman); + ChangeLocaleWaitForApplistUpdate(ELangGerman); TEST(User::Language() == ELangGerman); - User::LeaveIfError(iLs.ForceRegistration(dummy)); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption3); // German takes the one set by ELangNone - ChangeLocaleL(ELangItalian); + ChangeLocaleWaitForApplistUpdate(ELangItalian); TEST(User::Language() == ELangItalian); - User::LeaveIfError(iLs.ForceRegistration(dummy)); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption3); // Italian takes the one set by ELangNone - ChangeLocaleL(ELangSpanish); + ChangeLocaleWaitForApplistUpdate(ELangSpanish); TEST(User::Language() == ELangSpanish); - User::LeaveIfError(iLs.ForceRegistration(dummy)); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption3); // Spanish takes the one set by ELangNone // Set short caption of an app for a language which was set by the previous ELangNone INFO_PRINTF1(_L(".....setting short caption of an app which was set by the previous ELangNone")); - ChangeLocaleL(ELangItalian); + ChangeLocaleWaitForApplistUpdate(ELangItalian); TEST(User::Language() == ELangItalian); - User::LeaveIfError(iLs.ForceRegistration(dummy)); err = iLs.SetAppShortCaption(KShortCaption4, ELangItalian, KUidTestApp); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption4); @@ -592,35 +613,30 @@ TEST(err == KErrNone); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption4); // Italian set individually ===> not updated by ELangNone - ChangeLocaleL(ELangEnglish); + ChangeLocaleWaitForApplistUpdate(ELangEnglish); TEST(User::Language() == ELangEnglish); - User::LeaveIfError(iLs.ForceRegistration(dummy)); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption1); // English set individually ===> not updated by ELangNone - ChangeLocaleL(ELangFrench); + ChangeLocaleWaitForApplistUpdate(ELangFrench); TEST(User::Language() == ELangFrench); - User::LeaveIfError(iLs.ForceRegistration(dummy)); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption2); // French set individually ===> not updated by ELangNone - ChangeLocaleL(ELangGerman); + ChangeLocaleWaitForApplistUpdate(ELangGerman); TEST(User::Language() == ELangGerman); - User::LeaveIfError(iLs.ForceRegistration(dummy)); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption5); // German takes the one set by ELangNone - ChangeLocaleL(ELangSpanish); + ChangeLocaleWaitForApplistUpdate(ELangSpanish); TEST(User::Language() == ELangSpanish); - User::LeaveIfError(iLs.ForceRegistration(dummy)); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption5); // Spanish takes the one set by ELangNone - ChangeLocaleL(ELangAmerican); + ChangeLocaleWaitForApplistUpdate(ELangAmerican); TEST(User::Language() == ELangAmerican); - User::LeaveIfError(iLs.ForceRegistration(dummy)); iLs.GetAppInfo(appInfo, KUidTestApp); TEST(appInfo.iShortCaption == KShortCaption1); // American takes the default...so English...which has just been updated. // restore original settings.... INFO_PRINTF1(_L(".....restoring original settings")); - ChangeLocaleL(language); + ChangeLocaleWaitForApplistUpdate(language); TEST(User::Language() == language); // restore original short captions for all langs....(h4 doesn't perform reboots between tests) TEST(iLs.SetAppShortCaption(KTestTApaAppInfoShortCaptionEnglish, ELangEnglish, KUidTestApp) == KErrNone); @@ -662,9 +678,11 @@ { INFO_PRINTF1(_L("APPFWK-APPARC-0087:TestIconCaptionOverridesL started...")); - //Change the system language to English before starting the tests - TRAPD(ret,ChangeLocaleL(ELangEnglish)); - TEST(ret == KErrNone); + //Change the system language to English before starting the tests + TRAPD(ret,ChangeLocaleL(ELangEnglish)); + TEST(ret == KErrNone); + TEST(User::Language() == ELangEnglish); + ForceApplistUpdate(); TApaAppInfo appInfo; //Get test app's information @@ -778,10 +796,8 @@ //tests whether the process with WriteDeviceData capability can update the configuration settings. TEST(error == KErrNone); - // Force the applist to be updated (so test app gets new language settings) - RPointerArray dummy; - User::LeaveIfError(iLs.ForceRegistration(dummy)); - + ForceApplistUpdate(); + TApaAppInfo appInfo; //Get test app's information iLs.GetAppInfo(appInfo, KUidTestIconCapOverride); @@ -797,8 +813,8 @@ //sets the short caption back to the actual for other tests to work error = cenRep->Set(shortCapKey,KCenRepShortCaption); - // Force the applist to be updated (so test app gets new language settings) - User::LeaveIfError(iLs.ForceRegistration(dummy)); + // Force the applist to be updated (so test app gets new language settings) + ForceApplistUpdate(); CleanupStack::PopAndDestroy(cenRep); //cenRep object INFO_PRINTF1(_L("APPFWK-APPARC-0089:TestCenRepChangeNotificationL finished...")); @@ -836,12 +852,12 @@ //French _LIT(KCaptionFrench, "CRTstCap FR"); _LIT(KShortCaptionFrench, "CRTC FR"); - _LIT(KIconFilenameFrench, "Z:\\resource\\apps\\svg_icon.svg"); + _LIT(KIconFilenameFrench, "C:\\resource\\apps\\svg_icon.svg"); //German _LIT(KCaptionGerman, "TstCap GE"); _LIT(KShortCaptionGerman, "TC GE"); - _LIT(KIconFilenameGerman, "Z:\\resource\\apps\\ticoncapoverride.mbm"); + _LIT(KIconFilenameGerman, "C:\\resource\\apps\\ticoncapoverride.mbm"); TApaAppInfo appInfo; RFile file; @@ -855,9 +871,7 @@ TEST(User::Language() == ELangFrench);//check language is set to French. - // Force the applist to be updated (so test app gets new language settings) - RPointerArray dummy; - User::LeaveIfError(iLs.ForceRegistration(dummy)); + ForceApplistUpdate(); //Get test app's information iLs.GetAppInfo(appInfo, KUidTestIconCapOverride); @@ -896,7 +910,7 @@ TEST(User::Language() == ELangGerman);//check language is set to German. // Force the applist to be updated (so test app gets new language settings) - User::LeaveIfError(iLs.ForceRegistration(dummy)); + ForceApplistUpdate(); //Get test app's information iLs.GetAppInfo(appInfo, KUidTestIconCapOverride); @@ -940,7 +954,7 @@ TEST(User::Language() == ELangEnglish);//check language is set to English. // Force the applist to be updated (so test app gets new language settings) - User::LeaveIfError(iLs.ForceRegistration(dummy)); + ForceApplistUpdate(); //Get test app's information iLs.GetAppInfo(appInfo, KUidTestIconCapOverride); @@ -973,7 +987,7 @@ INFO_PRINTF2(_L("----Expected icon filename==>%S"), &printString); INFO_PRINTF2(_L("----Retrieved icon filename==>%S"), &fileName); TEST(fileName.Compare(KCenRepIconFilename)==0); - + file.Close(); INFO_PRINTF1(_L("APPFWK-APPARC-0090:TestIconCaptionOverridesWithChangeLangL finished...")); } @@ -1011,6 +1025,42 @@ TestApiPrecedenceOverCenRepConfigInfoL(); } +void CT_CaptionStep::ForceApplistUpdate() +{ + // Force the applist to be updated (so test app gets new language settings) + CSisFileInstaller sisFileInstaller; + INFO_PRINTF2(_L("Installing sis file from -> %S"), &KForceRegAppSisFile); + sisFileInstaller.InstallSisL(KForceRegAppSisFile); + sisFileInstaller.UninstallSisAndWaitForAppListUpdateL(KForceRegAppComponent); +} + +void CT_CaptionStep::ChangeLocaleWaitForApplistUpdate(TLanguage aLanguage) + { + TRequestStatus status; + iLs.SetNotify(EFalse, status); + ChangeLocaleL(aLanguage); + User::WaitForRequest(status); + } + +TVerdict CT_CaptionStep::doTestStepPreambleL() + { + CSisFileInstaller sisFileInstaller; + INFO_PRINTF2(_L("Installing sis file from -> %S"), &KTstAppStandAloneSisFile); + sisFileInstaller.InstallSisAndWaitForAppListUpdateL(KTstAppStandAloneSisFile); + INFO_PRINTF2(_L("Installing sis file from -> %S"), &KTstAppTiconcaptionoverrideSisFile); + sisFileInstaller.InstallSisAndWaitForAppListUpdateL(KTstAppTiconcaptionoverrideSisFile); + SetTestStepResult(EPass); + return TestStepResult(); + } + +TVerdict CT_CaptionStep::doTestStepPostambleL() + { + CSisFileInstaller sisFileInstaller; + sisFileInstaller.UninstallSisL(KTstAppStandAloneComponent); + sisFileInstaller.UninstallSisL(KTstAppTiconcaptionoverrideComponent); + return TestStepResult(); + } + TVerdict CT_CaptionStep::doTestStepL() { INFO_PRINTF1(_L("Test T_Caption step started....\n")); @@ -1019,6 +1069,11 @@ TEST(iFs.Connect() == KErrNone); TEST(iLs.Connect() == KErrNone); + // Change the locale + ChangeLocaleL(ELangEnglish); + TEST(User::Language() == ELangEnglish); + ForceApplistUpdate(); + // run language tests for the test caption TRAPD(r, DoLanguageTestL()); TEST(r==KErrNone);