--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/appfw/apparchitecture/tef/T_CaptionStep.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,1040 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Test for GT0247 Bravo.
+// CR0583: Apparc should allow short caption to be modified dynamically
+// Test for UIKON GT0143 Typhoon Work Series 60 Changes.
+// REQ758.1: Add support for short captions
+// This test requires that tstapp.app has been built
+// tstapp.mmp has RESOURCE tstapp_caption.rss what caption is built into the .rsc file
+// tstapp_loc.rss decides what version of the caption file to include:
+// tstapp01.rls
+// tstapp02.rls
+// tstapp03.rls
+// tstapp04.rls
+// tstapp05.rls
+// tstappsc.rls
+//
+// t_captionstep.cpp
+//
+
+/**
+ @file t_captionstep.cpp
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <apgicnfl.h>
+#include <hal.h>
+#include <e32test.h>
+
+#include <apgctl.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <apgctllist.h>
+#endif //SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <apfctlf.h>
+#include <apgcli.h>
+#include "../apserv/apsserv.h"
+#include <apaflrec.h>
+#include <apparc.h>
+#include <apgdoor.h>
+#include <centralrepository.h>
+
+#include <s32file.h>
+#include "tstapp.h" // KUidTestApp defined here
+#include "T_CaptionStep.h"
+#include "appfwk_test_utils.h"
+#include "appfwk_test.h"
+#include "ticoncaptionoverride.h" //KUidTestIconCapOverride defined here
+#include "TIconLoaderAndIconArrayForLeaks.h"
+
+
+//
+//
+// global consts and declarations
+//
+//
+
+
+_LIT(KTestTApaAppInfoCaptionEnglish,"TstCap UK");
+_LIT(KTestTApaAppInfoShortCaptionEnglish,"TC UK");
+
+_LIT(KTestTApaAppInfoCaptionFrench,"TstCap FR");
+_LIT(KTestTApaAppInfoShortCaptionFrench,"TC FR");
+
+_LIT(KTestTApaAppInfoCaptionGerman,"TstCap GE");
+_LIT(KTestTApaAppInfoShortCaptionGerman,"TC GE");
+
+// If _loc.rss does not define Short Caption, it takes long caption
+_LIT(KTestTApaAppInfoCaptionSpanish,"TstCap SP");
+_LIT(KTestTApaAppInfoShortCaptionSpanish,"TstCap SP");
+
+// If _loc.rss does not define Caption, it takes app name
+_LIT(KTestTApaAppInfoCaptionItalian,"tstapp");
+_LIT(KTestTApaAppInfoShortCaptionItalian,"TC IT");
+
+_LIT(KTestTApaAppInfoCaptionDefault,"TstCap UK");
+_LIT(KTestTApaAppInfoShortCaptionDefault,"TC UK");
+
+// Cenrep configuration details for English language
+_LIT(KCenRepCaption, "CRTstCap UK");
+_LIT(KCenRepShortCaption, "CRTC UK");
+_LIT(KCenRepIconFilename, "Z:\\resource\\apps\\ticoncapoverride.mbm");
+
+const TUid KUidIconCaptionRepository = {0x1028583d}; // Central Repository UID.
+const TInt KTextSize = 100;
+
+//
+//
+// CT_CaptionStep
+//
+//
+
+
+void CT_CaptionStep::ChangeLocaleL(TLanguage aLanguage)
+ {
+#ifdef SYMBIAN_DISTINCT_LOCALE_MODEL
+ _LIT(KLitLocaleDllNameBase, "elocl_lan");
+ _LIT(KLitLocaleDllNameExtension, ".loc");
+#else
+ _LIT(KLitLocaleDllNameBase, "ELOCL");
+ _LIT(KLitLocaleDllNameExtension, ".LOC");
+#endif
+ RLibrary localeDll;
+ TBuf<16> localeDllName(KLitLocaleDllNameBase);
+ 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
+
+ TInt error=localeDll.Load(localeDllName, uidType);
+ if (error==KErrNotFound)
+ {
+ localeDllName=KLitLocaleDllNameBase;
+ localeDllName.Append(KLitLocaleDllNameExtension);
+ error=localeDll.Load(localeDllName, uidType);
+ }
+ 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));
+#endif
+ CleanupStack::PopAndDestroy(&localeDll);
+ }
+
+
+void CT_CaptionStep::DoLanguageTestL()
+ {
+ TLanguage language = User::Language(); // keep a copy to restore it later on.
+
+ TInt ch = 0;
+ for (ch=0; ch < 6; ch++)
+ {
+ TLanguage languageToTest = ELangTest; // init to supress compiler remark
+ switch (ch)
+ {
+ case 0:
+ languageToTest=ELangEnglish;
+ INFO_PRINTF1(_L("--------- Testing English"));
+ break;
+ case 1:
+ languageToTest=ELangFrench;
+ INFO_PRINTF1(_L("--------- Testing French"));
+ break;
+ case 2:
+ languageToTest=ELangGerman;
+ INFO_PRINTF1(_L("--------- Testing German"));
+ break;
+ case 3:
+ languageToTest=ELangSpanish;
+ INFO_PRINTF1(_L("--------- Testing Spanish"));
+ break;
+ case 4:
+ languageToTest=ELangItalian;
+ INFO_PRINTF1(_L("--------- Testing Italian"));
+ break;
+ case 5:
+ languageToTest=ELangAmerican;
+ INFO_PRINTF1(_L("--------- Testing American"));
+ break;
+ default:
+ User::LeaveIfError(KErrNotSupported);
+ break;
+ };
+
+ // Change the locale
+ ChangeLocaleL(languageToTest);
+ TEST(User::Language() == languageToTest);
+
+ // Force the applist to be updated (so test app gets new language settings)
+ RPointerArray<TDesC> dummy;
+ User::LeaveIfError(iLs.ForceRegistration(dummy));
+
+ // Do the same set of tests for each language
+ TestCApaSystemControlListL();
+ TestCApaDoorL();
+ TestTApaAppInfoStreamsL();
+ HEAP_TEST_LS_SESSION(iLs, 0, 0, TestTApaAppInfoL(), iLs.ClearAppInfoArray() );
+
+ INFO_PRINTF1(_L("Test for that language finished..."));
+ }
+
+ // restore original locale, just in case...
+ ChangeLocaleL(language);
+ TEST(User::Language() == language);
+ }
+
+/**
+ @SYMTestCaseID t_caption_TestCApaSystemControlListL
+
+ @SYMPREQ 0
+
+ @SYMTestCaseDesc Check (short)caption by means of a control on the list CApaSystemControlList
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions The test creates a CApaSystemControlList and checks the value of (short)caption
+ by creating a CApaSystemControl from index 0 of CApaSystemControlList
+
+ @SYMTestExpectedResults The (short)caption is set to a value not null (length is not zero)
+ */
+void CT_CaptionStep::TestCApaSystemControlListL()
+ {
+ INFO_PRINTF1(_L("Testing CApaSystemControlList... "));
+ CApaSystemControlList* list=NULL;
+ User::LeaveIfError(FbsStartup());
+ RFbsSession fbs;
+ User::LeaveIfError(fbs.Connect());
+ TRAPD(ret, list=CApaSystemControlList::NewL(iFs));
+ TEST(ret==KErrNone);
+ CApaSystemControl* control=list->Control(0);
+ TPtrC testShortCap=control->ShortCaption();
+ TEST(testShortCap.Length()>0);
+ TPtrC testCap=control->Caption();
+ TEST(testCap.Length()>0);
+ }
+
+
+/**
+ @SYMTestCaseID t_caption_TestTApaAppInfoL
+
+ @SYMPREQ 0
+
+ @SYMTestCaseDesc Check appInfo contains the right (short)caption for the current test language.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions The test searches for KUidTestApp by calling GetNextApp until the UIDs match.
+ Once the right app is found, it retrieves its details by calling GetAppInfo().
+ The (short)caption is check to ensure it matches the expected result.
+
+ @SYMTestExpectedResults The (short)caption matches the one specified for the application, with the
+ american one being the default one.
+ */
+void CT_CaptionStep::TestTApaAppInfoL()
+ {
+ INFO_PRINTF1(_L("Testing GetAppInfo()... "));
+
+ // go through the list of apps until it finds KUidTestApp
+ TApaAppInfo appInfo;
+ TInt ret = iLs.GetAllApps();
+ TEST(ret==KErrNone);
+ FOREVER
+ {
+ TApaAppInfo info;
+ ret=iLs.GetNextApp(info);
+ TEST(ret==KErrNone);
+ if (info.iUid==KUidTestApp)
+ {
+ iLs.GetAppInfo(appInfo, info.iUid);
+ break;
+ }
+ }
+
+ switch (User::Language())
+ {
+ case ELangEnglish:
+ TEST(appInfo.iCaption==KTestTApaAppInfoCaptionEnglish);
+ TEST(appInfo.iShortCaption==KTestTApaAppInfoShortCaptionEnglish);
+ break;
+ case ELangFrench:
+ TEST(appInfo.iCaption==KTestTApaAppInfoCaptionFrench);
+ TEST(appInfo.iShortCaption==KTestTApaAppInfoShortCaptionFrench);
+ break;
+ case ELangGerman:
+ TEST(appInfo.iCaption==KTestTApaAppInfoCaptionGerman);
+ TEST(appInfo.iShortCaption==KTestTApaAppInfoShortCaptionGerman);
+ break;
+ case ELangSpanish:
+ TEST(appInfo.iCaption==KTestTApaAppInfoCaptionSpanish);
+ TEST(appInfo.iShortCaption==KTestTApaAppInfoShortCaptionSpanish);
+ break;
+ case ELangItalian:
+ TEST(appInfo.iCaption==KTestTApaAppInfoCaptionItalian);
+ TEST(appInfo.iShortCaption==KTestTApaAppInfoShortCaptionItalian);
+ break;
+ case ELangAmerican:
+ TEST(appInfo.iCaption==KTestTApaAppInfoCaptionDefault);
+ TEST(appInfo.iShortCaption==KTestTApaAppInfoShortCaptionDefault);
+ break;
+ default:
+ User::Leave(KErrNotSupported);
+ break;
+ };
+ }
+
+
+/**
+ @SYMTestCaseID t_caption_TestCApaDoorL
+
+ @SYMPREQ 0
+
+ @SYMTestCaseDesc Check the caption returned by a CApaDoor (a wrapper for an embedded document).
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions The test starts by creating an active scheduler.
+ A CApaProcess is created, and a new CApaDocument is added to it using the specified
+ application factory. This document is then used to create a CApaDoor object which
+ is used to retrieve the test app caption.
+
+ @SYMTestExpectedResults The (short)caption matches the one specified for the application, with the
+ american one being the default one.
+ */
+void CT_CaptionStep::TestCApaDoorL()
+ {
+ INFO_PRINTF1(_L("Testing CApaDoor... "));
+
+ // create an active scheduler
+ CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
+ CActiveScheduler::Install(scheduler);
+ CleanupStack::PushL(scheduler);
+ INFO_PRINTF1(_L("Created and installed active scheduler... "));
+
+ CApaProcess* process=NULL;
+ TRAPD(ret,process = CApaProcess::NewL(iFs));
+ TEST(ret==KErrNone);
+ INFO_PRINTF1(_L("CApaProcess is created... "));
+
+ CleanupStack::PushL(process);
+
+ CApaDocument* doc=NULL;
+ TApaApplicationFactory appFact(KUidTestApp);
+ TRAP(ret,doc=process->AddNewDocumentL(appFact));
+ INFO_PRINTF1(_L("Added a new document to the process by providing app factory which contains test app... "));
+ TEST(ret==KErrNone);
+
+ CApaDoor* door = NULL;
+ TRAP(ret,door=CApaDoor::NewL(iFs,*doc,TSize(400,400)));
+ INFO_PRINTF1(_L("Created a CApaDoor with document generated... "));
+ TEST(ret==KErrNone);
+
+ switch (User::Language())
+ {
+ case ELangEnglish:
+ TEST(*door->Caption()==KTestTApaAppInfoCaptionEnglish);
+ break;
+ case ELangFrench:
+ TEST(*door->Caption()==KTestTApaAppInfoCaptionFrench);
+ break;
+ case ELangGerman:
+ TEST(*door->Caption()==KTestTApaAppInfoCaptionGerman);
+ break;
+ case ELangSpanish:
+ TEST(*door->Caption()==KTestTApaAppInfoCaptionSpanish);
+ break;
+ case ELangItalian:
+ TEST(*door->Caption()==KTestTApaAppInfoCaptionItalian);
+ break;
+ case ELangAmerican:
+ TEST(*door->Caption()==KTestTApaAppInfoCaptionDefault);
+ break;
+ default:
+ User::Leave(KErrNotSupported);
+ break;
+ };
+ INFO_PRINTF1(_L("Tested the caption... "));
+ process->DestroyDocument(doc);
+ INFO_PRINTF1(_L("Deleted the process... "));
+ CleanupStack::PopAndDestroy(2); //process,scheduler
+ }
+
+
+/**
+ @SYMTestCaseID t_caption_TestTApaAppInfoStreamsL
+
+ @SYMPREQ 0
+
+ @SYMTestCaseDesc Check TApaAppInfo streaming works as expected
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Create and TApaAppInfo object with the KUidTestApp test app.
+ Also, create a temporal file, associates the file with a write stream,
+ and prepares the stream for writing.
+ When the object is externalized to the streem, we open a file containing a
+ read stream and prepares the stream for reading.
+
+ @SYMTestExpectedResults The test case is completed without any errors or panics
+ */
+void CT_CaptionStep::TestTApaAppInfoStreamsL()
+ {
+ INFO_PRINTF1(_L("Testing TApaAppInfo streams... "));
+
+ TApaAppInfo appInfoShort(KUidTestApp, _L("z:\\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");
+ TInt ret = iFs.MkDirAll(tempFile);
+ if (ret != KErrNone && ret != KErrAlreadyExists)
+ User::LeaveIfError(ret);
+
+ TApaAppInfo appInfo;
+
+ RFileWriteStream writer;
+ writer.PushL();
+ User::LeaveIfError(writer.Replace(iFs,tempFile,EFileWrite));
+ TRAP(ret, appInfo.ExternalizeL(writer));
+ TEST(ret==KErrNone);
+ writer.CommitL();
+ CleanupStack::PopAndDestroy(&writer);
+
+ RFileReadStream reader;
+ reader.PushL();
+ User::LeaveIfError(reader.Open(iFs,tempFile,EFileRead));
+ TRAP(ret, appInfo.InternalizeL(reader));
+ TEST(ret==KErrNone);
+
+ CleanupStack::PopAndDestroy(&reader);
+
+ User::LeaveIfError(iFs.Delete(tempFile));
+ }
+
+
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0041 APPFWK-APPARC-0042 APPFWK-APPARC-0043 APPFWK-APPARC-0044 APPFWK-APPARC-0045 APPFWK-APPARC-0046
+
+ @SYMPREQ PCHY-6FTLPK
+
+ @SYMTestCaseDesc Test the RApaLsSession::SetAppShortCaption function, used to set the app's short caption.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call SetAppShortCaption() to set the caption and read it back using the GetApaAppInfo().
+
+ @SYMTestExpectedResults The returned short caption must match the one set by the SetAppShortCaption function.
+ */
+void CT_CaptionStep::DoShortCaptionTestL()
+ {
+ INFO_PRINTF1(_L("Testing SetAppShortCaptionL() for short caption changes... "));
+
+ _LIT(KShortCaption1, "SC1");
+ _LIT(KShortCaption2, "SC2");
+ _LIT(KShortCaption3, "SC3");
+ _LIT(KShortCaption4, "SC4");
+ _LIT(KShortCaption5, "SC5");
+
+ // keep a copy of the current language, and set it to a known one
+ TLanguage language = User::Language();
+ ChangeLocaleL(ELangEnglish);
+ TEST(User::Language() == ELangEnglish);
+
+ // Force the applist to be updated (so test app gets new language settings)
+ RPointerArray<TDesC> dummy;
+ User::LeaveIfError(iLs.ForceRegistration(dummy));
+
+ // SetAppShortCaption should return KErrNotFound if it could not find the app
+ INFO_PRINTF1(_L(".....setting short caption for an unknown app"));
+ TInt err = iLs.SetAppShortCaption(KShortCaption1, ELangNone, TUid::Uid(0xFFF34556));
+ TEST(err == KErrNotFound);
+
+ // Set the NULL short caption i.e. "", should return KErrArgument,
+ INFO_PRINTF1(_L(".....setting an empty short caption"));
+ err = iLs.SetAppShortCaption(KNullDesC, ELangNone, KUidTestApp);
+ TEST(err == KErrArgument);
+
+ // SetAppShortCaption should return KErrArgument if short caption > KApaMaxAppCaption
+ INFO_PRINTF1(_L(".....setting short caption of more then KApaMaxAppCaption length"));
+ HBufC* longCaption = HBufC::NewL(KApaMaxAppCaption+1);
+ longCaption->Des().SetLength(KApaMaxAppCaption+1);
+ err = iLs.SetAppShortCaption(*longCaption, ELangNone, KUidTestApp);
+ TEST(err == KErrArgument);
+ delete longCaption;
+
+ // SetAppShortCaption should return KErrNone if short caption == KApaMaxAppCaption
+ INFO_PRINTF1(_L(".....setting short caption of same size as KApaMaxAppCaption"));
+ longCaption = HBufC::NewL(KApaMaxAppCaption);
+ longCaption->Des().SetLength(KApaMaxAppCaption);
+ err = iLs.SetAppShortCaption(*longCaption, ELangCatalan, KUidTestApp); // just testing the arg length, not actual values
+ TEST(err == KErrNone);
+ delete longCaption;
+
+ // Set short caption of an app for the current locale language (ELangEnglish so far)
+ INFO_PRINTF1(_L(".....setting short caption of an app for the current locale language"));
+ err = iLs.SetAppShortCaption(KShortCaption1, ELangEnglish, KUidTestApp);
+ TEST(err == KErrNone);
+ TApaAppInfo appInfo;
+ iLs.GetAppInfo(appInfo, KUidTestApp);
+ TEST(appInfo.iShortCaption == KShortCaption1);
+
+ // 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));
+ 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);
+ 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
+ TEST(User::Language() == ELangEnglish);
+ User::LeaveIfError(iLs.ForceRegistration(dummy));
+ iLs.GetAppInfo(appInfo, KUidTestApp);
+ TEST(appInfo.iShortCaption == KShortCaption1);
+
+ // Set short caption of an app for a language which is not the current one (ELangFrench, for example)
+ INFO_PRINTF1(_L(".....setting short caption of an app for a language which is not the current one"));
+ err = iLs.SetAppShortCaption(KShortCaption2, ELangFrench, KUidTestApp);
+ TEST(err == KErrNone);
+ iLs.GetAppInfo(appInfo, KUidTestApp);
+ TEST(appInfo.iShortCaption == KShortCaption1); // English, the current app language, doesn't change...
+ ChangeLocaleL(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);
+ 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.
+
+ // Set short caption of an app for all languages with ELangNone
+ INFO_PRINTF1(_L(".....setting short caption for all languages with ELangNone"));
+ err = iLs.SetAppShortCaption(KShortCaption3, ELangNone, KUidTestApp);
+ TEST(err == KErrNone);
+ iLs.GetAppInfo(appInfo, KUidTestApp);
+ TEST(appInfo.iShortCaption == KShortCaption1); // American takes the default...so English...which has just been updated.
+ ChangeLocaleL(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);
+ 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);
+ 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);
+ 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);
+ 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);
+ TEST(User::Language() == ELangItalian);
+ User::LeaveIfError(iLs.ForceRegistration(dummy));
+ err = iLs.SetAppShortCaption(KShortCaption4, ELangItalian, KUidTestApp);
+ iLs.GetAppInfo(appInfo, KUidTestApp);
+ TEST(appInfo.iShortCaption == KShortCaption4);
+
+ // Repeat set short caption of an app for all languages with ELangNone
+ INFO_PRINTF1(_L(".....repeat setting short caption for all languages with ELangNone"));
+ err = iLs.SetAppShortCaption(KShortCaption5, ELangNone, KUidTestApp);
+ TEST(err == KErrNone);
+ iLs.GetAppInfo(appInfo, KUidTestApp);
+ TEST(appInfo.iShortCaption == KShortCaption4); // Italian set individually ===> not updated by ELangNone
+ ChangeLocaleL(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);
+ 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);
+ 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);
+ 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);
+ 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);
+ 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);
+ TEST(iLs.SetAppShortCaption(KTestTApaAppInfoShortCaptionFrench, ELangFrench, KUidTestApp) == KErrNone);
+ TEST(iLs.SetAppShortCaption(KTestTApaAppInfoShortCaptionGerman, ELangGerman, KUidTestApp) == KErrNone);
+ TEST(iLs.SetAppShortCaption(KTestTApaAppInfoShortCaptionItalian, ELangItalian, KUidTestApp) == KErrNone);
+ TEST(iLs.SetAppShortCaption(KTestTApaAppInfoShortCaptionSpanish, ELangSpanish, KUidTestApp) == KErrNone);
+ }
+
+
+CT_CaptionStep::~CT_CaptionStep()
+ {
+ iFs.Close();
+ iLs.Close();
+ }
+
+CT_CaptionStep::CT_CaptionStep()
+ {
+ SetTestStepName(KT_CaptionStep);
+ }
+
+/**
+@SYMTestCaseID APPFWK-APPARC-0087
+@SYMPREQ CR1187
+@SYMREQ REQ9167
+@SYMTestCaseDesc Tests whether the captions, icon configuration details have been retrieved properly from
+ the central repository settings and has the precedence over its resource file information.
+@SYMTestType CIT
+@SYMTestPriority Critical
+@SYMTestActions A test application with its captions, icon details defined in a test central repository file
+ as well as resource file (suitable field values have been given for both cenrep and resource
+ configurations to identify it clearly).
+ Gets the information about the test application by passing its UID.
+ Check the given configuration details matches with central repository entries.
+@SYMTestExpectedResults The given configuration details should match with central repository entries.
+*/
+
+void CT_CaptionStep::TestIconCaptionOverridesL()
+ {
+ 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);
+
+ TApaAppInfo appInfo;
+ //Get test app's information
+ iLs.GetAppInfo(appInfo, KUidTestIconCapOverride);
+
+ RFile file;
+ TBuf<KTextSize> fileName;
+ //Get test app's icon information
+ iLs.GetAppIcon(KUidTestIconCapOverride,file);
+ file.FullName(fileName);
+
+ //compare the captions, icon with values in CenRep file.
+ INFO_PRINTF1(_L("Compares Caption with value in CenRep..."));
+ TBuf<KTextSize> cencap(KCenRepCaption);
+
+ INFO_PRINTF2(_L("----Expected caption==>%S"), &cencap);
+ INFO_PRINTF2(_L("----Retrieved caption==>%S"), &appInfo.iCaption);
+ TEST(appInfo.iCaption == KCenRepCaption);
+ INFO_PRINTF1(_L("Compares ShortCaption with the value in CenRep..."));
+ cencap.Zero();
+ cencap.Copy(KCenRepShortCaption);
+
+ INFO_PRINTF2(_L("----Expected short caption==>%S"), &cencap);
+ INFO_PRINTF2(_L("----Retrieved short caption==>%S"), &appInfo.iShortCaption);
+ TEST(appInfo.iShortCaption == KCenRepShortCaption);
+
+ INFO_PRINTF1(_L("Compares Icon file with the value in CenRep..."));
+ cencap.Zero();
+ cencap.Copy(KCenRepIconFilename);
+ INFO_PRINTF2(_L("----Expected icon filename==>%S"), &cencap);
+ INFO_PRINTF2(_L("----Retrieved icon filename==>%S"), &fileName);
+ TEST(fileName.Compare(KCenRepIconFilename)==0);
+
+ file.Close();
+ INFO_PRINTF1(_L("APPFWK-APPARC-0087:TestIconCaptionOverridesL finished..."));
+ }
+
+/**
+@SYMTestCaseID APPFWK-APPARC-0088
+@SYMPREQ CR1187
+@SYMREQ REQ9167
+@SYMTestCaseDesc Tests whether the shortcaption is set through the API has got the precedence over central
+ repository and resource file customisation.
+@SYMTestType CIT
+@SYMTestPriority Critical
+@SYMTestActions A test application with its short caption defined in central repository as well as in resource file.
+ Update the test application's short caption through API.
+ Gets the information about the test application by passing its UID.
+ Check whether the provided short caption matches with the one which has already been set through the API.
+@SYMTestExpectedResults It should retrieve the short caption set through the API and match with the given short caption value.
+*/
+
+void CT_CaptionStep::TestApiPrecedenceOverCenRepConfigInfoL()
+ {
+ INFO_PRINTF1(_L("APPFWK-APPARC-0088:TestApiPrecedenceOverCenRepConfigInfoL started..."));
+ _LIT(KTApiShortCaption,"APITC UK");
+
+ TInt err = iLs.SetAppShortCaption(KTApiShortCaption, ELangEnglish, KUidTestIconCapOverride);
+ TEST(err == KErrNone);
+
+ TApaAppInfo appInfo;
+ //Get test app's information
+ iLs.GetAppInfo(appInfo, KUidTestIconCapOverride);
+
+ TBuf<KTextSize> shortCaption(KTApiShortCaption);
+
+ //compares the short caption with the value which has been set through API.
+ INFO_PRINTF1(_L("Compares short caption with the value that has been set through API..."));
+ INFO_PRINTF2(_L("----Expected short caption==>%S"), &shortCaption);
+ INFO_PRINTF2(_L("----Retrieved short caption==>%S"), &appInfo.iShortCaption);
+ TEST(appInfo.iShortCaption == KTApiShortCaption);
+
+ //Sets the short caption back to the actual one
+ INFO_PRINTF1(_L("Sets the short caption back to the actual one through API..."));
+ err = iLs.SetAppShortCaption(KCenRepShortCaption, ELangEnglish, KUidTestIconCapOverride);
+ TEST(err == KErrNone);
+
+ INFO_PRINTF1(_L("APPFWK-APPARC-0088:TestApiPrecedenceOverCenRepConfigInfoL finished..."));
+ }
+
+/**
+@SYMTestCaseID APPFWK-APPARC-0089
+@SYMPREQ CR1187
+@SYMREQ REQ9167
+@SYMTestCaseDesc Tests whether the changes made in central repository is notified by the central repository
+ observer (CApaIconCaptionCenrepObserver), which watches for changes in the Central Repository
+ and updates the overrides when they occur.
+@SYMTestType CIT
+@SYMTestPriority Critical
+@SYMTestActions A test application with its caption, icon configuration details defined in central repository file.
+ Access the central repository.
+ Update the test application short caption's value in the settings.
+ Get the information about the test application by passing its UID.
+ Check the short caption value retrieved from the central repository matches with the given information.
+@SYMTestExpectedResults The given new short caption value should match with the central repository entry.
+*/
+void CT_CaptionStep::TestCenRepChangeNotificationL()
+ {
+ INFO_PRINTF1(_L("APPFWK-APPARC-0089:TestCenRepChangeNotificationL started..."));
+
+ //access central repository
+ CRepository* cenRep = CRepository::NewL(KUidIconCaptionRepository);
+ CleanupStack::PushL(cenRep);
+
+ _LIT(KCenRepSC,"CRNTC UK");
+ TUint32 shortCapKey = 0x00000001; // for English
+
+ //update the short caption value in central repository.
+ TInt error = cenRep->Set(shortCapKey,KCenRepSC);
+
+ //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<TDesC> dummy;
+ User::LeaveIfError(iLs.ForceRegistration(dummy));
+
+ TApaAppInfo appInfo;
+ //Get test app's information
+ iLs.GetAppInfo(appInfo, KUidTestIconCapOverride);
+
+ //compare the short caption with the updated value in central repository
+ INFO_PRINTF1(_L("Compares short caption with the updated value in CenRep..."));
+ TBuf<KTextSize> shortCaption(KCenRepSC);
+
+ INFO_PRINTF2(_L("----Expected short caption==>%S"), &shortCaption);
+ INFO_PRINTF2(_L("----Retrieved shortcaption==>%S"), &appInfo.iShortCaption);
+ TEST(appInfo.iShortCaption == KCenRepSC);
+
+ //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));
+
+ CleanupStack::PopAndDestroy(cenRep); //cenRep object
+ INFO_PRINTF1(_L("APPFWK-APPARC-0089:TestCenRepChangeNotificationL finished..."));
+ }
+
+/**
+@SYMTestCaseID APPFWK-APPARC-0090
+@SYMPREQ CR1187
+@SYMREQ REQ9167
+@SYMTestCaseDesc Tests whether the caption, icon configuration details have been retrieved properly from the
+ Central Repository with respect to change in system language.
+ Tests if the particular language entry is not there in the central repository file, it will
+ then try to get the information from the resource file.
+@SYMTestType CIT
+@SYMTestPriority Critical
+@SYMTestActions A multilingual test application with its caption, icon configuration details defined in central repository file.
+ Change the system language to French.
+ Gets the information about the test application by passing its UID.
+ Checks the retrieved captions, icon from Central Repository are in French.
+ Change the system language to German (the settings are not there for German in Central Repository).
+ Again gets the information about the test application by passing its UID.
+ Checks the retrieved captions, icon from the Resource file are in German.
+ Restores the system language to English.
+ Again gets the information about the test application by passing its UID.
+ Checks the retrieved captions, icon from Central Repository are in English.
+@SYMTestExpectedResults All the retrieved Central Repository configuration details should match with the given details by changing
+ system language.
+*/
+
+void CT_CaptionStep::TestIconCaptionOverridesWithChangeLangL()
+ {
+ INFO_PRINTF1(_L("APPFWK-APPARC-0090:TestIconCaptionOverridesWithChangeLangL started..."));
+
+ TInt ret = 0;
+ //French
+ _LIT(KCaptionFrench, "CRTstCap FR");
+ _LIT(KShortCaptionFrench, "CRTC FR");
+ _LIT(KIconFilenameFrench, "Z:\\resource\\apps\\svg_icon.svg");
+
+ //German
+ _LIT(KCaptionGerman, "TstCap GE");
+ _LIT(KShortCaptionGerman, "TC GE");
+ _LIT(KIconFilenameGerman, "Z:\\resource\\apps\\ticoncapoverride.mbm");
+
+ TApaAppInfo appInfo;
+ RFile file;
+ TBuf<KTextSize> fileName;
+
+ // Change the locale to French
+ INFO_PRINTF1(_L("Change the locale to French..."));
+ TRAP(ret,ChangeLocaleL(ELangFrench));
+ TEST(ret == KErrNone);
+ INFO_PRINTF2(_L("----System Language==>%d"), User::Language());
+
+ TEST(User::Language() == ELangFrench);//check language is set to French.
+
+ // Force the applist to be updated (so test app gets new language settings)
+ RPointerArray<TDesC> dummy;
+ User::LeaveIfError(iLs.ForceRegistration(dummy));
+
+ //Get test app's information
+ iLs.GetAppInfo(appInfo, KUidTestIconCapOverride);
+
+ //Get test app's icon information
+ iLs.GetAppIcon(KUidTestIconCapOverride,file);
+ file.FullName(fileName);
+
+ TBuf<KTextSize> printString(KCaptionFrench);
+
+ //compare the captions, icon in French with the value in central repository
+ INFO_PRINTF1(_L("Compares Caption with value in CenRep..."));
+ INFO_PRINTF2(_L("----Exepcted Caption in French==>%S"), &printString);
+ INFO_PRINTF2(_L("----Retrieved Caption==>%S"), &appInfo.iCaption);
+ TEST(appInfo.iCaption == KCaptionFrench);
+
+ INFO_PRINTF1(_L("Compares Short Caption with value in CenRep..."));
+ printString.Zero();
+ printString.Copy(KShortCaptionFrench);
+ INFO_PRINTF2(_L("----Expected short caption in French==>%S"), &printString);
+ INFO_PRINTF2(_L("----Retrieved short caption==>%S"), &appInfo.iShortCaption);
+ TEST(appInfo.iShortCaption == KShortCaptionFrench);
+
+ INFO_PRINTF1(_L("Compares Icon filename with value in CenRep..."));
+ printString.Zero();
+ printString.Copy(KIconFilenameFrench);
+ INFO_PRINTF2(_L("----Expected icon filename in French==>%S"), &printString);
+ INFO_PRINTF2(_L("----Retrieved icon filename==>%S"), &fileName);
+ TEST(fileName.Compare(KIconFilenameFrench)==0);
+
+ //Change the locale to German.
+ INFO_PRINTF1(_L("Change the locale to German..."));
+ TRAP(ret,ChangeLocaleL(ELangGerman));
+ TEST(ret == KErrNone);
+ INFO_PRINTF2(_L("----System Language==>%d"), User::Language());
+ 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));
+
+ //Get test app's information
+ iLs.GetAppInfo(appInfo, KUidTestIconCapOverride);
+
+ file.Close();
+ //Get test app's icon information
+ iLs.GetAppIcon(KUidTestIconCapOverride,file);
+
+ fileName.Zero();
+ file.FullName(fileName);
+
+ // The entry for language German is not there in Central repository so it compares
+ // the captions, icon in this language with the values in resource file.
+ INFO_PRINTF1(_L("Compares Caption with value in Resource file..."));
+ printString.Zero();
+ printString.Copy(KCaptionGerman);
+ INFO_PRINTF2(_L("----Expected caption in German==>%S"), &printString);
+ INFO_PRINTF2(_L("----Retrieved caption==>%S"), &appInfo.iCaption);
+ TEST(appInfo.iCaption == KCaptionGerman);
+
+ INFO_PRINTF1(_L("Compares short caption with value in Resource file..."));
+ printString.Zero();
+ printString.Copy(KShortCaptionGerman);
+ INFO_PRINTF2(_L("----Expected short caption in German==>%S"), &printString);
+ INFO_PRINTF2(_L("----Retrieved short caption==>%S"), &appInfo.iShortCaption);
+ TEST(appInfo.iShortCaption == KShortCaptionGerman);
+
+ INFO_PRINTF1(_L("Compares icon filename with value in Resource file..."));
+ printString.Zero();
+ printString.Copy(KIconFilenameGerman);
+ INFO_PRINTF2(_L("----Expected icon filename in German==>%S"), &printString);
+ INFO_PRINTF2(_L("----Retrieved icon filename==>%S"), &fileName);
+ TEST(fileName.Compare(KIconFilenameGerman)==0);
+
+ // Change the locale to English for changing the settings back to the original
+ INFO_PRINTF1(_L("Change the locale back to English..."));
+ TRAP(ret,ChangeLocaleL(ELangEnglish));
+ TEST(ret == KErrNone);
+ INFO_PRINTF2(_L("----System Language==>%d"), User::Language());
+
+ 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));
+
+ //Get test app's information
+ iLs.GetAppInfo(appInfo, KUidTestIconCapOverride);
+
+ file.Close();
+ //Get test app's icon information
+ iLs.GetAppIcon(KUidTestIconCapOverride,file);
+
+ fileName.Zero();
+ file.FullName(fileName);
+
+ //compare the captions, icon in English with the value in central repository
+ INFO_PRINTF1(_L("Compares Caption with value in CenRep..."));
+ printString.Zero();
+ printString.Copy(KCenRepCaption);
+ INFO_PRINTF2(_L("----Expected caption in English==>%S"), &printString);
+ INFO_PRINTF2(_L("----Retrieved caption==>%S"), &appInfo.iCaption);
+ TEST(appInfo.iCaption == KCenRepCaption);
+
+ INFO_PRINTF1(_L("Compares short caption with value in CenRep..."));
+ printString.Zero();
+ printString.Copy(KCenRepShortCaption);
+ INFO_PRINTF2(_L("----Expected short caption==>%S"), &printString);
+ INFO_PRINTF2(_L("----Retrieved short caption==>%S"), &appInfo.iShortCaption);
+
+ TEST(appInfo.iShortCaption == KCenRepShortCaption);
+ INFO_PRINTF1(_L("Compares icon filename with value in CenRep..."));
+ printString.Zero();
+ printString.Copy(KCenRepIconFilename);
+ INFO_PRINTF2(_L("----Expected icon filename==>%S"), &printString);
+ INFO_PRINTF2(_L("----Retrieved icon filename==>%S"), &fileName);
+ TEST(fileName.Compare(KCenRepIconFilename)==0);
+
+ INFO_PRINTF1(_L("APPFWK-APPARC-0090:TestIconCaptionOverridesWithChangeLangL finished..."));
+ }
+
+/**
+@SYMTestCaseID APPFWK-APPARC-0091
+@SYMPREQ CR1187
+@SYMREQ REQ9167
+@SYMDEF DEF125262
+@SYMTestCaseDesc Checks there is no memory leaks when CApaIconCaptionOverridesForApp & CApaIconCaptionCenrepObserver
+ objects are created and destroyed.
+@SYMTestType CIT
+@SYMTestPriority Critical
+@SYMTestActions Marks the Heap memory
+ Invokes the static method 'TestIconCaptionOverridesL()' defined in 'ticonloaderandiconarrayforleaks.dll',
+ that creates objects of CApaIconCaptionOverridesForApp, CApaIconCaptionCenrepObserver and deletes those.
+ And then tests, there is no memory leak from the creation to destruction of those objects.
+@SYMTestExpectedResults There should be no memory leaks.
+*/
+
+void CT_CaptionStep::TestIconCaptionOverridesMemoryLeaksL()
+ {
+ INFO_PRINTF1(_L("APPFWK-APPARC-0091:TestIconCaptionOverridesMemoryLeaksL started..."));
+ __UHEAP_MARK;
+ TIconLoaderAndIconArrayForLeaks::TestIconCaptionOverridesL();
+ __UHEAP_MARKEND;
+ INFO_PRINTF1(_L("APPFWK-APPARC-0091:TestIconCaptionOverridesMemoryLeaksL finished..."));
+ }
+
+void CT_CaptionStep::DoIconCaptionOverridesTestL()
+ {
+ TestIconCaptionOverridesL();
+ TestIconCaptionOverridesWithChangeLangL();
+ TestCenRepChangeNotificationL();
+ TestIconCaptionOverridesMemoryLeaksL();
+ TestApiPrecedenceOverCenRepConfigInfoL();
+ }
+
+TVerdict CT_CaptionStep::doTestStepL()
+ {
+ INFO_PRINTF1(_L("Test T_Caption step started....\n"));
+
+ // Connect to Servers
+ TEST(iFs.Connect() == KErrNone);
+ TEST(iLs.Connect() == KErrNone);
+
+ // run language tests for the test caption
+ TRAPD(r, DoLanguageTestL());
+ TEST(r==KErrNone);
+ INFO_PRINTF2(_L("DoLanguageTestL() finished with value '%d'\n"), r);
+
+ // run icon caption overrides tests
+ TRAP(r, DoIconCaptionOverridesTestL());
+ TEST(r==KErrNone);
+ INFO_PRINTF2(_L("DoIconCaptionOverridesTestL() finished with value '%d'\n"), r);
+
+ // run shortcaption setting tests
+ TRAP(r, DoShortCaptionTestL());
+ TEST(r==KErrNone);
+ INFO_PRINTF2(_L("DoShortCaptionTestL() finished with value '%d'\n"), r);
+
+ INFO_PRINTF1(_L("....test T_Caption step finished!"));
+ return TestStepResult();
+ }
+