|
1 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // Checks for notifications when application list changes.\n |
|
15 // |
|
16 // t_notifstep.cpp |
|
17 // |
|
18 |
|
19 /** |
|
20 @file t_notifstep.cpp |
|
21 @test |
|
22 @internalComponent - Internal Symbian test code |
|
23 */ |
|
24 |
|
25 #include <f32file.h> |
|
26 #include <fbs.h> |
|
27 #include <apaid.h> |
|
28 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS |
|
29 #include <apaidpartner.h> |
|
30 #include <apgicnflpartner.h> |
|
31 #endif //SYMBIAN_ENABLE_SPLIT_HEADERS |
|
32 #include <apgaplst.h> |
|
33 #include <apaflrec.h> |
|
34 #include <apgcli.h> |
|
35 #include <apacmdln.h> |
|
36 #include <apfrec.h> |
|
37 #include <datastor.h> |
|
38 #include <apgicnfl.h> |
|
39 #include <apasvst.h> |
|
40 #include <apgnotif.h> |
|
41 #include <e32test.h> |
|
42 |
|
43 #include "appfwk_test_utils.h" |
|
44 #include "T_NotifStep.h" |
|
45 |
|
46 _LIT(KImportAppsDir,"c:\\private\\10003a3f\\import\\apps\\"); |
|
47 _LIT(KResourceAppsDir,"c:\\resource\\apps\\"); |
|
48 |
|
49 _LIT(KForceRegAppSourcePath_Reg,"Z:\\ApparcTest\\testforceregistrationapp1_reg.rsc"); |
|
50 _LIT(KForceRegAppSourcePath_Loc,"Z:\\ApparcTest\\testforceregistrationapp1_loc.rsc"); |
|
51 |
|
52 _LIT(KForceRegAppTargetPath_Reg,"c:\\private\\10003a3f\\import\\apps\\testforceregistrationapp1_reg.rsc"); |
|
53 _LIT(KForceRegAppTargetPath_Loc,"c:\\resource\\apps\\testforceregistrationapp1_loc.rsc"); |
|
54 |
|
55 _LIT(KForceRegAppCaption,"TestForceRegistration"); |
|
56 _LIT(KForceRegAppDefaultCaption,"testforceregistrationapp1"); |
|
57 |
|
58 /** |
|
59 |
|
60 Overridden from virtual method MApaAppListServObserver::HandleAppListEvent(). |
|
61 This method is used to receive notification for change in application list.\n |
|
62 |
|
63 */ |
|
64 void CTestObserver::HandleAppListEvent(TInt /*aEvent*/) |
|
65 { |
|
66 |
|
67 iNotified++; |
|
68 if (iNotifier) |
|
69 iNotifier->Cancel(); |
|
70 CActiveScheduler::Stop(); |
|
71 } |
|
72 |
|
73 /** |
|
74 Auxiliary Fn for Test Case ID T-NotifStep-TestAppNotificationL |
|
75 |
|
76 Copy a registration resource file in the path "c:\private\10003a3f\import\apps" . |
|
77 */ |
|
78 void CT_NotifStep::CreateAppL(const TDesC& aAppName) |
|
79 { |
|
80 TFileName appFullName; |
|
81 TFileName appTargetName; |
|
82 CFileMan* fileManager = CFileMan::NewL(iFs); |
|
83 CleanupStack::PushL(fileManager); |
|
84 appFullName.Format(_L("z:\\ApparcTest\\%S_reg.RSC"),&aAppName); |
|
85 appTargetName.Format(_L("C:\\Private\\10003a3f\\Import\\apps\\%S_reg.Rsc"), &aAppName); |
|
86 INFO_PRINTF2(_L("copying the file: %S"), &appTargetName); |
|
87 TInt ret = fileManager->Copy (appFullName, appTargetName, CFileMan::ERecurse); |
|
88 TEST(ret==KErrNone); |
|
89 CleanupStack::PopAndDestroy(fileManager); |
|
90 } |
|
91 |
|
92 /** |
|
93 Auxiliary Fn for Test Case ID T-NotifStep-TestAppNotificationL |
|
94 Delete a registration resource file from the path "c:\private\10003a3f\import\apps" . |
|
95 */ |
|
96 void CT_NotifStep::DeleteAppL(const TDesC& aAppName) |
|
97 { |
|
98 TFileName appFullName; |
|
99 CFileMan* fileManager = CFileMan::NewL(iFs); |
|
100 CleanupStack::PushL(fileManager); |
|
101 appFullName.Format(_L("C:\\Private\\10003a3f\\Import\\apps\\%S_reg.Rsc"),&aAppName); |
|
102 |
|
103 INFO_PRINTF2(_L("Deleting the file: %S"), &appFullName); |
|
104 TRequestStatus status; |
|
105 TTime tempTime(0); // added tempTime to avoid asynch CFileMan::Attribs request completing with KErrArgument |
|
106 TEST(fileManager->Attribs(appFullName,0,KEntryAttReadOnly, tempTime, CFileMan::ERecurse, status)==KErrNone); |
|
107 User::WaitForRequest(status); |
|
108 TEST(status.Int() == KErrNone); |
|
109 TInt ret = fileManager->Delete(appFullName, CFileMan::ERecurse); |
|
110 TEST(ret==KErrNone); |
|
111 CleanupStack::PopAndDestroy(fileManager); |
|
112 } |
|
113 |
|
114 /** |
|
115 @SYMTestCaseID T-NotifStep-TestAppNotificationL |
|
116 |
|
117 @SYMPREQ REQ1087, PCHY-5L3RDW |
|
118 |
|
119 @SYMTestCaseDesc Test whether notification is received from CApaAppListNotifier |
|
120 whenever application list changes. |
|
121 |
|
122 @SYMTestPriority High |
|
123 |
|
124 @SYMTestStatus Implemented |
|
125 |
|
126 @SYMTestActions The method creates an object of user-defined observer CTestObserver |
|
127 and creates a CApaAppListNotifier active object which is associated to the |
|
128 observer. It then starts the active scheduler and adds a new application or deletes |
|
129 an application from the application list. To ensure that notifications are received on |
|
130 change in application list HandleAppListEvent() method which is derived |
|
131 from interface class MApaAppListServObserver is observed.\n |
|
132 API Calls:\n |
|
133 CApaAppListNotifier::NewL(MApaAppListServObserver* aObserver, TPriority aPriority)\n |
|
134 |
|
135 @SYMTestExpectedResults On deletion of the app the notification for change in |
|
136 the application list is received. |
|
137 |
|
138 */ |
|
139 void CT_NotifStep::TestAppNotificationL() |
|
140 { |
|
141 // Force the applist to be updated |
|
142 //To ensure that server has time to count all applications in the system |
|
143 RPointerArray<TDesC> dummy; |
|
144 User::LeaveIfError(iSession.ForceRegistration(dummy)); |
|
145 |
|
146 TInt theAppCount = 0; |
|
147 TInt theErr1 = iSession.AppCount(theAppCount); |
|
148 TEST(theErr1==KErrNone); |
|
149 |
|
150 INFO_PRINTF2(_L("The number of applications : %d"), theAppCount); |
|
151 |
|
152 CTestObserver* obs=new(ELeave) CTestObserver(); |
|
153 CleanupStack::PushL(obs); |
|
154 CApaAppListNotifier* notif=CApaAppListNotifier::NewL(obs,CActive::EPriorityHigh); |
|
155 CleanupStack::PushL(notif); |
|
156 obs->iNotifier=notif; |
|
157 INFO_PRINTF1(_L("Creating and deleting apps for notification")); |
|
158 CreateAppL(_L("AAA")); |
|
159 |
|
160 CActiveScheduler::Start(); |
|
161 |
|
162 TInt theAppCount1 = 0; |
|
163 theErr1 = iSession.AppCount(theAppCount1); |
|
164 TEST((theAppCount1 - 1) == theAppCount); |
|
165 INFO_PRINTF2(_L("The number of applications : %d"), theAppCount1); |
|
166 CleanupStack::PopAndDestroy(notif); |
|
167 |
|
168 notif = CApaAppListNotifier::NewL(obs,CActive::EPriorityHigh); |
|
169 CleanupStack::PushL(notif); |
|
170 obs->iNotifier = notif; |
|
171 INFO_PRINTF1(_L("Deleting the application")); |
|
172 DeleteAppL(_L("AAA")); |
|
173 |
|
174 CActiveScheduler::Start(); |
|
175 |
|
176 CleanupStack::PopAndDestroy(notif); |
|
177 User::LeaveIfError(iSession.ForceRegistration(dummy)); |
|
178 theErr1 = iSession.AppCount(theAppCount1); |
|
179 TEST(theErr1==KErrNone); |
|
180 TEST(theAppCount1 == theAppCount); |
|
181 |
|
182 INFO_PRINTF2(_L("The number of applications : %d"), theAppCount1); |
|
183 TEST(obs->iNotified>0); |
|
184 |
|
185 INFO_PRINTF2(_L("Received %d notifications"),obs->iNotified); |
|
186 CleanupStack::PopAndDestroy(obs); |
|
187 } |
|
188 |
|
189 void CT_NotifStep::ModifyIconFileTimeStampL() |
|
190 { |
|
191 _LIT(KMbmIconFile, "c:\\resource\\apps\\tupgradeiconapp.mbm"); |
|
192 _LIT(KTestIconFile, "c:\\TestUpgradeIcon\\tupgradeiconapp.mbm"); |
|
193 _LIT(KTestIconFileTempPath, "c:\\TestUpgradeIcon\\"); |
|
194 |
|
195 // Create KMbmIconFileTempPath |
|
196 TInt ret = iUtils.CreateDirectoryL(KTestIconFileTempPath); |
|
197 TEST(ret == KErrNone || ret == KErrAlreadyExists); |
|
198 INFO_PRINTF1(_L("Copy icon file from C: drive to temp path")); |
|
199 ret = iUtils.CopyFileL(KMbmIconFile, KTestIconFileTempPath); |
|
200 |
|
201 INFO_PRINTF1(_L("Modify timestamp of the icon file")); |
|
202 TTime modifiedTime(0); |
|
203 modifiedTime.HomeTime(); |
|
204 ret = iFs.SetModified(KTestIconFile, modifiedTime); |
|
205 TEST(ret==KErrNone); |
|
206 ret = iUtils.SetReadOnly(KTestIconFile, 0); |
|
207 TEST(ret==KErrNone); |
|
208 INFO_PRINTF2(_L("Replace the modified icon file in C: drive (%S)"), &KMbmIconFile); |
|
209 ret = iUtils.CopyFileL(KTestIconFile, KMbmIconFile); |
|
210 // wait 5 seconds to finish re-scan |
|
211 User::After(5*1000000); |
|
212 TEST(ret==KErrNone); |
|
213 } |
|
214 |
|
215 /** |
|
216 @SYMTestCaseID T-NotifStep-TTestIconFileNotificationL |
|
217 |
|
218 @SYMPREQ PDEF102804 |
|
219 |
|
220 @SYMTestCaseDesc Test whether notification is received from CApaAppListNotifier whenever the application icon file is changed |
|
221 |
|
222 @SYMTestPriority High |
|
223 |
|
224 @SYMTestStatus Implemented |
|
225 |
|
226 @SYMTestActions Modify the application icon file in a temporary location. Move icon file to a location specified in the resource file. |
|
227 |
|
228 @SYMTestExpectedResults A notification is recieved when the updated icon file is replaced to a location specified in the resource file. |
|
229 */ |
|
230 void CT_NotifStep::TestIconFileNotificationL() |
|
231 { |
|
232 // Force the applist to be updated |
|
233 //To ensure that server has time to count all applications in the system |
|
234 RPointerArray<TDesC> dummy; |
|
235 User::LeaveIfError(iSession.ForceRegistration(dummy)); |
|
236 |
|
237 // Create observer |
|
238 CTestObserver* obs = new(ELeave) CTestObserver(); |
|
239 CleanupStack::PushL(obs); |
|
240 CApaAppListNotifier* notif = CApaAppListNotifier::NewL(obs, CActive::EPriorityHigh); |
|
241 CleanupStack::PushL(notif); |
|
242 obs->iNotifier=notif; |
|
243 |
|
244 // Change the timestamp of the icon file |
|
245 INFO_PRINTF1(_L("Modifying the icon file...attempt to check it's notified")); |
|
246 ModifyIconFileTimeStampL(); |
|
247 |
|
248 CActiveScheduler::Start(); |
|
249 |
|
250 CleanupStack::PopAndDestroy(notif); |
|
251 // Test if notification is recieved. |
|
252 TEST(obs->iNotified > 0); |
|
253 if (obs->iNotified > 0) |
|
254 { |
|
255 INFO_PRINTF2(_L("Received %d notifications"),obs->iNotified); |
|
256 } |
|
257 |
|
258 CleanupStack::PopAndDestroy(obs); //obs |
|
259 } |
|
260 |
|
261 /* |
|
262 * TestForceRegistrationL copies a registration file and requests for force registration. |
|
263 * It checks whether default caption is assigned, as the localisable file |
|
264 * does not exist. Then it copies the localisable file and exits. |
|
265 */ |
|
266 void TestForceRegistrationL(CT_NotifStep *aNotifStep) |
|
267 { |
|
268 RApaLsSession ls; |
|
269 User::LeaveIfError(ls.Connect()); |
|
270 CleanupClosePushL(ls); |
|
271 |
|
272 //Copy the registration file to c:\private\10003a3f\import\apps |
|
273 User::LeaveIfError((aNotifStep->iUtils).CopyFileL(KForceRegAppSourcePath_Reg, KForceRegAppTargetPath_Reg)); |
|
274 aNotifStep->INFO_PRINTF1(_L("Successfully copied testforceregistrationapp1_reg.rsc from Z:\\ApparcTest\\testforceregistrationapp1_reg.rsc")); |
|
275 |
|
276 RPointerArray<TDesC> dummy; |
|
277 User::LeaveIfError(ls.ForceRegistration(dummy)); |
|
278 |
|
279 TApaAppInfo info; |
|
280 TUid appUid={0x102826E0}; |
|
281 aNotifStep->TEST(ls.GetAppInfo(info,appUid)==KErrNone); |
|
282 aNotifStep->INFO_PRINTF2(_L("Caption of the application before copying localisable file: %S"), &info.iCaption); |
|
283 //Test whether default captions are assigned as localisable file not exists. |
|
284 aNotifStep->TEST(info.iCaption.Compare(KForceRegAppDefaultCaption)==0); |
|
285 |
|
286 //Waits for some time as test thread gets chance to execute. As apparc does not notifiy |
|
287 //applist change due to force registration to all the clients, the test thread still waits |
|
288 //for applist change notification. |
|
289 User::After(5000000); |
|
290 |
|
291 //Copy localisable file to c:\resource\apps |
|
292 User::LeaveIfError((aNotifStep->iUtils).CopyFileL(KForceRegAppSourcePath_Loc, KForceRegAppTargetPath_Loc)); |
|
293 aNotifStep->INFO_PRINTF1(_L("Successfully copied testforceregistrationapp1_loc.rsc from Z:\\ApparcTest\\testforceregistrationapp1_loc.rsc")); |
|
294 |
|
295 CleanupStack::PopAndDestroy(); |
|
296 } |
|
297 |
|
298 TInt ForceRegistrationThread(TAny* aPtr) |
|
299 { |
|
300 __UHEAP_MARK; |
|
301 CTrapCleanup* trapCleanup = NULL; |
|
302 trapCleanup = CTrapCleanup::New(); |
|
303 |
|
304 CT_NotifStep *notifStep=(CT_NotifStep *) aPtr; |
|
305 |
|
306 TRAPD(errorCode, TestForceRegistrationL(notifStep)); |
|
307 |
|
308 delete trapCleanup; |
|
309 __UHEAP_MARKEND; |
|
310 return(errorCode); |
|
311 } |
|
312 |
|
313 //Deletes the file if it exists. |
|
314 TInt CT_NotifStep::DeleteFileL(RSmlTestUtils &aFs, const TDesC &aFileName) |
|
315 { |
|
316 TInt fileExists = EFalse; |
|
317 TInt err; |
|
318 aFs.IsFilePresent(aFileName, fileExists); |
|
319 if (fileExists) |
|
320 { |
|
321 aFs.ChangeFilePermissionL(aFileName); |
|
322 err=aFs.DeleteFileL(aFileName); |
|
323 if(err==KErrNone) |
|
324 INFO_PRINTF2(_L("Removed file %S"), &aFileName); |
|
325 else |
|
326 INFO_PRINTF2(_L("Failed to remove file %S"), &aFileName); |
|
327 } |
|
328 else |
|
329 { |
|
330 err=KErrNotFound; |
|
331 } |
|
332 |
|
333 return(err); |
|
334 } |
|
335 |
|
336 /** |
|
337 @SYMTestCaseID APPFWK-APPARC-0106 |
|
338 |
|
339 |
|
340 @SYMDEF DEF141223 |
|
341 |
|
342 @SYMTestCaseDesc Tests apparc does not notifiy applist change, which occurred |
|
343 due to force registration, to all the other clients who have not requested |
|
344 force registration, before the installation is completed. |
|
345 |
|
346 @SYMTestPriority High |
|
347 |
|
348 @SYMTestStatus Implemented |
|
349 |
|
350 @SYMTestActions 1. The test registers with apparc for applist change notification. |
|
351 2. Starts another thread, which copies a registration file and requests |
|
352 force registration. Later copies the localisable file of the same |
|
353 application. |
|
354 3. Waits till the applist change event occurs or till 15 seconds |
|
355 4. Tests the caption of the application is same as the caption specified in |
|
356 localisable file. |
|
357 |
|
358 |
|
359 @SYMTestExpectedResults The retrieved application caption should be same as the caption specified in |
|
360 localisable file. |
|
361 */ |
|
362 void CT_NotifStep::TestForceRegistrationNotificationL() |
|
363 { |
|
364 //Share the handle with other threads in the process |
|
365 User::LeaveIfError(iUtils.ShareAuto()); |
|
366 User::LeaveIfError(Logger().ShareAuto()); |
|
367 |
|
368 INFO_PRINTF1(_L("Creating c:\\private\\10003a3f\\import\\apps\\ directory.......")); |
|
369 TInt err = iUtils.CreateDirectoryL(KImportAppsDir); |
|
370 TESTEL((err == KErrNone || err == KErrAlreadyExists), err); |
|
371 INFO_PRINTF1(_L("c:\\private\\10003a3f\\import\\apps\\ is created successfully or already exists")); |
|
372 |
|
373 INFO_PRINTF1(_L("Creating c:\\resource\\apps\\ directory.......")); |
|
374 err = iUtils.CreateDirectoryL(KResourceAppsDir); |
|
375 TESTEL((err == KErrNone || err == KErrAlreadyExists), err); |
|
376 INFO_PRINTF1(_L("c:\\resource\\apps\\ is created successfully or already exists")); |
|
377 |
|
378 INFO_PRINTF1(_L("Make sure that registraiton and localisable files does not exist before the test starts...")); |
|
379 DeleteFileL(iUtils, KForceRegAppTargetPath_Reg); |
|
380 DeleteFileL(iUtils, KForceRegAppTargetPath_Loc); |
|
381 |
|
382 INFO_PRINTF1(_L("Connecting to apparc server...")); |
|
383 RApaLsSession ls; |
|
384 User::LeaveIfError(ls.Connect()); |
|
385 CleanupClosePushL(ls); |
|
386 |
|
387 TRequestStatus status; |
|
388 INFO_PRINTF1(_L("Registering with apparc server for applist change notification.")); |
|
389 ls.SetNotify(EFalse, status); |
|
390 |
|
391 INFO_PRINTF1(_L("Creating ForceRegistrationThread............")); |
|
392 _LIT(KForceRegThreadName,"ForceRegThread"); |
|
393 TBuf<0x100> threadName(KForceRegThreadName); |
|
394 RThread thread; |
|
395 |
|
396 User::LeaveIfError(thread.Create(threadName, ForceRegistrationThread, 0x1000, NULL, (TAny*) this)); |
|
397 CleanupClosePushL(thread); |
|
398 TRequestStatus threadStatus; |
|
399 thread.Logon(threadStatus); |
|
400 |
|
401 //Starts a thread which actually requests for force registration. |
|
402 thread.Resume(); |
|
403 |
|
404 RTimer timer; |
|
405 CleanupClosePushL(timer); |
|
406 User::LeaveIfError(timer.CreateLocal()); |
|
407 TRequestStatus timerStatus; |
|
408 timer.After(timerStatus,15 * 1000000); |
|
409 |
|
410 //Wait till the applist change event is receivied or till 15 Seconds |
|
411 User::WaitForRequest(status, timerStatus); |
|
412 |
|
413 //Test whether the applist change event is received |
|
414 TEST(status != KRequestPending); |
|
415 |
|
416 TApaAppInfo info; |
|
417 TUid appUid={0x102826E0}; |
|
418 TEST(ls.GetAppInfo(info,appUid)==KErrNone); |
|
419 |
|
420 //Checks the caption of the application is "TestForceRegistration". The caption will not be |
|
421 //"TestForceRegistration" if apparc server notifies all the clients about the applist change |
|
422 //due to force registration, before installation is completed. |
|
423 INFO_PRINTF2(_L("Caption of the application after the applist change notification is received: %S"), &info.iCaption); |
|
424 TEST(info.iCaption.Compare(KForceRegAppCaption)==0); |
|
425 |
|
426 |
|
427 //Wait till the the ForceRegistrationThread exits |
|
428 User::WaitForRequest(threadStatus); |
|
429 |
|
430 TInt theadExitCode=thread.ExitReason(); |
|
431 INFO_PRINTF2(_L("ForceRegistrationThread thread is exited with %d"), theadExitCode); |
|
432 //Checks ForceRegistrationThread completed successfully. |
|
433 TEST(theadExitCode==KErrNone); |
|
434 |
|
435 //Delete the registration and localisation files |
|
436 TEST(DeleteFileL(iUtils, KForceRegAppTargetPath_Reg)==KErrNone); |
|
437 TEST(DeleteFileL(iUtils, KForceRegAppTargetPath_Loc)==KErrNone); |
|
438 |
|
439 CleanupStack::PopAndDestroy(3,&ls); |
|
440 } |
|
441 |
|
442 CT_NotifStep::~CT_NotifStep() |
|
443 /** |
|
444 Destructor |
|
445 */ |
|
446 { |
|
447 delete iScheduler; |
|
448 } |
|
449 |
|
450 CT_NotifStep::CT_NotifStep() |
|
451 /** |
|
452 Constructor |
|
453 */ |
|
454 { |
|
455 // Call base class method to set up the human readable name for logging |
|
456 SetTestStepName(KT_NotifStep); |
|
457 } |
|
458 |
|
459 TVerdict CT_NotifStep::doTestStepL() |
|
460 /** |
|
461 @return - TVerdict code |
|
462 Override of base class virtual |
|
463 */ |
|
464 { |
|
465 INFO_PRINTF1(_L("Testing Apparc...T_Notif")); |
|
466 |
|
467 TInt ret = FbsStartup(); |
|
468 TEST(ret==KErrNone); |
|
469 ret=RFbsSession::Connect(); |
|
470 TEST(ret==KErrNone); |
|
471 // start an active scheduler |
|
472 iScheduler=new(ELeave) CActiveScheduler(); |
|
473 CActiveScheduler::Install(iScheduler); |
|
474 |
|
475 TEST(KErrNone == iFs.Connect()); |
|
476 TEST(KErrNone == iSession.Connect()); |
|
477 TEST(KErrNone == iUtils.Connect()); |
|
478 |
|
479 // run the testcode (inside an alloc heaven harness) |
|
480 __UHEAP_MARK; |
|
481 iUtils.Connect(); |
|
482 #if defined (__WINSCW__) |
|
483 INFO_PRINTF1(_L("T-NotifStep-TTestIconFileNotificationL Test Started...")); |
|
484 TRAP(ret,TestIconFileNotificationL()); |
|
485 TEST(ret==KErrNone); |
|
486 INFO_PRINTF2(_L("TestIconFileNotificationL() finished with return code '%d'\n"), ret); |
|
487 #endif |
|
488 INFO_PRINTF1(_L("T-NotifStep-TestAppNotificationL Test Started...")); |
|
489 TRAP(ret,TestAppNotificationL()); |
|
490 TEST(ret==KErrNone); |
|
491 INFO_PRINTF2(_L("TestAppNotificationL() finished with return code '%d'\n"), ret); |
|
492 |
|
493 INFO_PRINTF1(_L("TestForceRegistrationNotificationL Test Started...")); |
|
494 TRAP(ret, TestForceRegistrationNotificationL()); |
|
495 TEST(ret==KErrNone); |
|
496 INFO_PRINTF2(_L("TestForceRegistrationNotificationL() finished with return code '%d'\n"), ret); |
|
497 iUtils.Close(); |
|
498 __UHEAP_MARKEND; |
|
499 |
|
500 iUtils.Close(); |
|
501 iSession.Close(); |
|
502 iFs.Close(); |
|
503 RFbsSession::Disconnect(); |
|
504 INFO_PRINTF1(_L("T_Notif Completed.")); |
|
505 return TestStepResult(); |
|
506 } |