--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/appfw/apparchitecture/tef/tssaac/SysStartApparcTestCases.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,731 @@
+// 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 "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:
+// REQ3889 is essentially a change to the boot sequence and not a change to the functionality of apparc,
+// i.e. once the system has finished startup the functional behaviour should not have changed, which will
+// be proved with execution of the existing App-Framework test suite.
+// The test cases implemented below are executed during the Critical Static phase of startup to prove the
+// restricted functionality during this phase is correct. All calls to the API will panic except the call
+// to RApaLsSession::StartApp which has been modified not to panic.
+// Note that some of the tests cases used in this test are later executed during the normal
+// phone operation phase (non-critical phase) by other tests (see T_StartAppStep.cpp, T_RapaLsSession.cpp, ...)
+// As nearly all these test cases panic at the first client-server call and so execution of these test cases
+// will never reach the end of the function.
+//
+// sysstartapparctestcases.cpp
+//
+
+/**
+ @file sysstartapparctestcases.cpp
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <apacmdln.h>
+#include <s32file.h>
+
+#include "appfwk_test_appui.h"
+#include "T_SysStartApparcStep.h"
+#include "SysStartApparcTestCases.h"
+#include "TRApaLsSessionStartAppTest.h"
+#include "TRApaLsSessionTestUids.h"
+#include "tstapp.h"
+#include "tssaac.h"
+
+_LIT(KNonExistingFile, "z:\\system\\data\\not_here_thanks.foo");
+_LIT(KLitExePath, "\\sys\\bin\\texe.exe");
+
+
+/**
+ Constructor
+ */
+CSysStartApparcTestCase::CSysStartApparcTestCase()
+ {
+ }
+
+/**
+ Destructor
+ */
+CSysStartApparcTestCase::~CSysStartApparcTestCase()
+ {
+ iApaLsSession.Close();
+ }
+
+/**
+Connect to the Apparc server and call RunTestCasesL() inside a
+trap harness. Panic if an error is returned
+*/
+void CSysStartApparcTestCase::doTestCasesL()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test Cases Running..."));
+
+ TInt error = iApaLsSession.Connect();
+ if(error!=KErrNone)
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Error connecting to RApaLsSession (err=%d)"), error);
+ }
+
+ TRAP(error,RunTestCasesL())
+ if(error!=KErrNone)
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Error running test cases (err=%d)"), error);
+ }
+
+ RDebug::Print(_L("CSysStartApparcTestCase: Test Cases Completed!"));
+ }
+
+/**
+Call each test case inside a trap harness and panic if an error is returned.
+The Panic will be raised in doTestCasesL() function.
+The Use __UHEAP macros to test for memory leaks.
+Reads in the test case number from file TestCaseConfig.txt
+Each test case is assigned a unique number in the batch file sysstart_apparc_run.bat
+*/
+void CSysStartApparcTestCase::RunTestCasesL()
+ {
+ __UHEAP_MARK;
+
+ TInt aTestCase=ReadConfigFileL();
+
+ switch(aTestCase)
+ {
+ case 1:
+ TestStartApp1L();
+ WriteResultFileL(); //Called if the test case does not panic
+ break;
+
+ case 2:
+ TestStartApp2L();
+ break;
+
+ case 3:
+ TestStartApp3L();
+ break;
+
+ case 4:
+ TestStartApp4L();
+ break;
+
+ case 5:
+ TestStartApp5L();
+ break;
+
+ case 6:
+ TestStartApp6L();
+ break;
+
+ case 7:
+ TestGetAllApps();
+ break;
+
+ case 8:
+ TestInsertDataTypeL();
+ break;
+
+ case 9:
+ TestAppForDataTypeL();
+ break;
+
+ case 10:
+ TestDeleteDataTypeL();
+ break;
+
+ case 11:
+ TestServiceDiscovery();
+ break;
+
+ case 12:
+ TestGetAppInfo();
+ break;
+
+ case 13:
+ TestAppCount();
+ break;
+
+ case 14:
+ TestCreateDoc();
+ break;
+
+ case 29:
+ case 0:
+ default:
+ RDebug::Print(_L("CSysStartApparcTestCase: Unknown Test Case Specified"));
+ break;
+ }
+
+ __UHEAP_MARKEND;
+ }
+
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-I-0001
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Test Launching of an application using command line information.
+ Test is run during SSA Critical Static phase,
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::StartApp() to start an application defined by the command
+ line information. Test the launching of application for following scenarios:
+ (1) When Application specified by command line exists.
+ (2) When Application specified by command line does not exist.
+ API Calls:\n
+ RApaLsSession::StartApp(const CApaCommandLine& aCommandLine)
+
+ @SYMTestExpectedResults (1) StartApp() returns KErrNone
+ (2) StartApp() returns KErrNotFound
+*/
+void CSysStartApparcTestCase::TestStartApp1L()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::StartApp using CApaCommandLine....."));
+
+ // Set filename location
+ TPtrC apparcTestFilename(KLitExePath);
+
+ // (1) start application texe.exe from the commandline
+ CApaCommandLine* cmdLn=CApaCommandLine::NewLC();
+ cmdLn->SetExecutableNameL(apparcTestFilename);
+ _LIT8(KLitDogfish,"dogfish");
+ cmdLn->SetTailEndL(KLitDogfish);
+ iStartApp1LRes1 = iApaLsSession.StartApp(*cmdLn); // explicit
+
+ if(iStartApp1LRes1 == KErrNone)
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: TestStartApp1L Launch of Command line app successful"));
+ }
+
+ // (2) start a non-existant app
+ _LIT(KLitWibble,"wibble");
+ cmdLn->SetExecutableNameL(KLitWibble);
+ iStartApp1LRes2 = iApaLsSession.StartApp(*cmdLn);
+ if(iStartApp1LRes2 == KErrNotFound)
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: TestStartApp1L Launch of non-existant app returns KErrNotFound"));
+ }
+
+ CleanupStack::PopAndDestroy(cmdLn); // cmdLn
+ }
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0002
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Get the MIME type of the data in the specified document and return the UID of an
+ application that can handle this type.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::AppForDocument() to return the UID of an application that can
+ read/display the specified file. The Apparc server is not ready in CS phase, so the
+ call has to fail.
+ API Calls:\n
+ RApaLsSession::AppForDocument(const TDesC& aFileName, TUid& aAppUid, TDataType& aDataType) const
+
+ @SYMTestExpectedResults AppForDocument() causes Main Panic KERN-EXEC 0
+*/
+void CSysStartApparcTestCase::TestStartApp2L()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::AppForDocument using filename and app uid...."));
+
+ TUid retUid = KNullUid;
+
+ TDataType data;
+
+ // Set filename location
+ TPtrC apparcTestFilename(KLitTRApaLsSessionStartAppTest);
+
+ // Main Panic KERN-EXEC 0
+ iApaLsSession.AppForDocument(apparcTestFilename, retUid, data);
+
+ }
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0003
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Finds and launches an application to match the specified document.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::StartDocument() with a document name
+ API Calls:\n
+ RApaLsSession::StartDocument(const TDesC& aFileName, TThreadId& aThreadId, TLaunchType aLaunchType)
+
+ @SYMTestExpectedResults StartDocument() causes Main Panic KERN-EXEC 0
+*/
+void CSysStartApparcTestCase::TestStartApp3L()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::StartDocument....start the app from the recognized doc given."));
+
+ // Set filename location
+ TPtrC apparcTestFilename(KLitTRApaLsSessionStartAppTest);
+
+ //Call to tested function - for info, startAppThreadID is assigned to the app thread id
+ TThreadId startAppThreadID;
+
+ //Main Panic KERN-EXEC 0
+ iApaLsSession.StartDocument(apparcTestFilename, startAppThreadID);
+ }
+
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0004
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Launches an application to suit the specified document by means of a specified MIME type
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::StartDocument() with filename and MIME type.
+ API Calls:\n
+ RApaLsSession::StartDocument(const TDesC& aFileName, const TDataType& aDataType, TThreadId& aThreadId, TLaunchType aLaunchType)
+
+ @SYMTestExpectedResults StartDocument() causes Main Panic KERN-EXEC 0
+*/
+void CSysStartApparcTestCase::TestStartApp4L()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::StartDocument....known data type"));
+
+ // Set filename location
+ TPtrC apparcTestFilename(KLitTRApaLsSessionStartAppTest);
+
+ // KErrNotFound as a return value
+ TThreadId startAppThreadID;
+
+ //Main Panic KERN-EXEC 0
+ iApaLsSession.StartDocument(apparcTestFilename, TDataType(KLitMimeType_TRApaLsSessionStartAppTest), startAppThreadID);
+ }
+
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0005
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Attempt to launch an application by means of an unknown MIME type
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::StartDocument() with filename and unknown MIME type.
+ API Calls:\n
+ RApaLsSession::StartDocument(const TDesC& aFileName, const TDataType& aDataType, TThreadId& aThreadId, TLaunchType aLaunchType)
+
+ @SYMTestExpectedResults StartDocument() causes Main Panic KERN-EXEC 0
+*/
+void CSysStartApparcTestCase::TestStartApp5L()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::StartDocument....unknown data type"));
+
+ // Set filename location
+ TPtrC apparcTestFilename(KLitTRApaLsSessionStartAppTest);
+
+ // KErrNotFound as a return value
+ TThreadId startAppThreadID;
+
+ //Main Panic KERN-EXEC 0
+ iApaLsSession.StartDocument(apparcTestFilename, TDataType(_L8("text/plain/no thanks")), startAppThreadID);
+ }
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0006
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Attempt to launch an application by specifying a non-existent file
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::StartDocument() with a non-existent file
+ API Calls:\n
+ RApaLsSession::StartDocument(const TDesC& aFileName, TThreadId& aThreadId, TLaunchType aLaunchType)
+
+ @SYMTestExpectedResults StartDocument() causes Main Panic KERN-EXEC 0
+*/
+void CSysStartApparcTestCase::TestStartApp6L()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::StartDocument....non existent file."));
+
+ // Set filename location
+ TPtrC apparcTestFilename(KNonExistingFile);
+
+ // KErrNotFound as a return value
+ TThreadId startAppThreadID;
+
+ //Main Panic KERN-EXEC 0
+ iApaLsSession.StartDocument(apparcTestFilename, startAppThreadID);
+ }
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0007
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Test the functionality of GetAllApps
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::GetAllApps()
+
+ @SYMTestExpectedResults GetAllApps() causes Main Panic KERN-EXEC 0
+
+*/
+void CSysStartApparcTestCase::TestGetAllApps()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::GetAllApps....check list of apps"));
+
+ // Main Panic KERN-EXEC 0
+ iApaLsSession.GetAllApps();
+
+ }
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0008
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Tests InsertDataMapping() which links a datatype to the UID of an associated application
+ for launching assigns adds a low priority.
+ Tests InsertDataMappingIfHigher() which remaps the datatype to the specified UID if the
+ specified priority is higher.
+ The "added" parameter indicates if the mapping was successful.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::InsertDataMapping() with datatype, application UID and low priority
+ API Calls:\n
+ RApaLsSession::InsertDataMapping(const TDataType& aDataType, TDataTypePriority aPriority, TUid aUid)
+
+ @SYMTestExpectedResults InsertDataMapping() causes Main Panic KERN-EXEC 0
+*/
+void CSysStartApparcTestCase::TestInsertDataTypeL()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::InsertDataMapping....Check data type mapping addition"));
+ const TDataTypePriority KPriLow = 1;
+
+ _LIT8(KLitPlainText,"text/plain");
+
+ TSecurityInfo info;
+ info.Set(RProcess());
+
+ //Main Panic KERN-EXEC 0
+ iApaLsSession.InsertDataMapping(TDataType(KLitPlainText), KPriLow, KUidTestApp);
+
+ }
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0009
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Tests AppForDataType() which returns the UID of an application which can handle the specified datatype
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::InsertDataMapping() with datatype and application UID (and priority)
+ API Calls:\n
+ RApaLsSession::InsertDataMapping(const TDataType& aDataType, TDataTypePriority aPriority, TUid aUid)
+
+ @SYMTestExpectedResults AppForDataType() causes Main Panic KERN-EXEC 0
+*/
+void CSysStartApparcTestCase::TestAppForDataTypeL()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::AppForDataType....Check an app binding"));
+
+ _LIT8(KLitPlainText,"text/plain");
+
+ TUid retUid = KNullUid;
+
+ //Main Panic KERN-EXEC 0
+ iApaLsSession.AppForDataType(TDataType(KLitPlainText), retUid);
+
+ }
+
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0010
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Tests DeleteDataMapping() which removes the linking of a datatype to the UID of an associated application
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::DeleteDataMapping() with datatype and service UID
+ API Calls:\n
+ RApaLsSession::DeleteDataMapping(const TDataType& aDataType, TUid aServiceUid)
+
+ @SYMTestExpectedResults DeleteDataMapping() causes Main Panic KERN-EXEC 0
+*/
+void CSysStartApparcTestCase::TestDeleteDataTypeL()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::DeleteDataMapping....Check data type mapping deletion"));
+
+ _LIT8(KLitPlainText,"text/plain");
+
+ TSecurityInfo info;
+ info.Set(RProcess());
+
+ //Main Panic KERN-EXEC 0
+ iApaLsSession.DeleteDataMapping(TDataType(KLitPlainText));
+ }
+
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0011
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Test the functionality of GetServerApps with the service uid as parameter.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::GetServerApps() with a service uid that
+ is not provided by any application
+ API Calls:\n
+ RApaLsSession::GetServerApps(TUid aServiceUid) const
+
+ @SYMTestExpectedResults GetServerApps() causes Main Panic KERN-EXEC 0
+
+*/
+void CSysStartApparcTestCase::TestServiceDiscovery()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::GetServerApps....check the service uid"));
+
+ TApaAppInfo appInfo;
+
+ // Uid is not provided by any application
+ const TUid KUidNonProvidedService = {0x01020300}; // service Uid
+
+ //Main Panic KERN-EXEC 0
+ iApaLsSession.GetServerApps(KUidNonProvidedService);
+
+ }
+
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0012
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Test the functionality of GetAppInfo with a Uid as a parameter
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::GetAppInfo() with a Uid that
+ represents a non-existing app
+
+ API Calls:\n
+ RApaLsSession::GetAppInfo(TApaAppInfo& aInfo,TUid aAppUid) const
+
+ @SYMTestExpectedResults GetAppInfo() causes Main Panic KERN-EXEC 0
+
+*/
+void CSysStartApparcTestCase::TestGetAppInfo()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::GetAppInfo....check the app uid"));
+
+ TApaAppInfo info;
+
+ // non-existing app causes Main Panic KERN-EXEC 0
+ iApaLsSession.GetAppInfo(info, KNullUid);
+
+ }
+
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0013
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Test the functionality of AppCount
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::AppCount()
+
+
+ @SYMTestExpectedResults AppCount() causes Main Panic KERN-EXEC 0
+
+*/
+void CSysStartApparcTestCase::TestAppCount()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::AppCount()....check list of apps"));
+
+ TInt dummyArg;
+
+ // Main Panic KERN-EXEC 0
+ iApaLsSession.AppCount(dummyArg);
+
+ }
+
+
+/**
+ @SYMTestCaseID APPFWK-APPARC-0014
+
+ @SYMPREQ PREQ967
+
+ @SYMREQ REQ3889
+
+ @SYMTestCaseDesc Test the functionality of CreateDocument with a Uid as a parameter
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions Call RApaLsSession::CreateDocument() with a Uid of an application
+ When Application specified exists.
+
+ API Calls:\n
+ RApaLsSession::CreateDocument(const TDesC& aFileName, TUid aAppUid, TThreadId& aThreadId, TLaunchType aLaunchType)
+
+ @SYMTestExpectedResults (1) GetAppInfo() causes Main Panic KERN-EXEC 0
+
+*/
+void CSysStartApparcTestCase::TestCreateDoc()
+ {
+ RDebug::Print(_L("CSysStartApparcTestCase: Test RApaLsSession::CreateDocument....check the app uid"));
+
+ // Set filename location
+ TPtrC apparcTestFilename(KLitTRApaLsSessionStartAppTest);
+
+ TThreadId startAppThreadID;
+
+ //Call to tested function with a existing uid (tstapp) causes Main Panic KERN-EXEC 0
+ iApaLsSession.CreateDocument(apparcTestFilename, KUidTestApp, startAppThreadID);
+ }
+
+/**
+Reads the input config file created by sysstart_apparc_setup.bat and returns the
+test case number (Defined in sysstart_apparc_run.bat)
+@return TInt - the test case number
+*/
+TInt CSysStartApparcTestCase::ReadConfigFileL()
+ {
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ RFileReadStream reader;
+ User::LeaveIfError(reader.Open(fs, KApparcConfigFile, EFileRead));
+ CleanupClosePushL(reader);
+
+ TChar delimChar('=');
+
+ TBuf8<255> aDes;
+ reader.ReadL(aDes, delimChar);
+
+ //Read in a two character representation of a number and convert to an integer
+ TChar result1(reader.ReadInt8L());
+ TChar result0(reader.ReadInt8L());
+ TInt aTestCase = result1.GetNumericValue()*10 + result0.GetNumericValue();
+
+ // clean-up
+ CleanupStack::PopAndDestroy(2, &fs);
+
+ return aTestCase;
+
+ }
+
+/**
+ Write the results to the result file, to be later extracted by
+ testexecute test case.
+ These contain the results of the individual tests. The order in
+ which these results are written in MUST match the order in which
+ they are read and tested in CSysStartApparcTestStep::GetApparcResultsL()
+ and the expected result tested in CSysStartApparcTestStep::Testxxx must
+ match that in the test specification\n
+
+ The format is:
+ StartApp1LRes1 count=value1
+ StartApp1LRes2 count=value2
+
+ '=' is used as the deliminator.
+*/
+void CSysStartApparcTestCase::WriteResultFileL()
+ {
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ RFileWriteStream writer;
+ User::LeaveIfError(writer.Replace(fs, KSsaacResultFile, EFileWrite));
+ CleanupClosePushL(writer);
+
+ // write data to file
+ writer << _L("StartApp1LRes1 count=");
+ writer.WriteInt16L(iStartApp1LRes1);
+ writer << _L("\n");
+ writer << _L("StartApp1LRes2 count=");
+ writer.WriteInt16L(iStartApp1LRes2);
+ writer << _L("\n");
+
+ writer.CommitL();
+ CleanupStack::PopAndDestroy(2, &fs);
+ }