installationservices/swi/test/testexes/testappinuse/test36_console_app.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/testexes/testappinuse/test36_console_app.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,206 @@
+/*
+* 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 the License "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: 
+* This console executable runs for a limited time (default 5 seconds but
+* can be specified on the command line) and optionally holds open
+* a file from the same SIS file.
+* Used for testing DEF123261
+*
+*/
+
+
+#include <e32base.h>
+#include <e32cons.h>
+#include <bacline.h>
+#include <f32file.h>
+ 
+
+_LIT(KTxtEPOC32EX,"test36_console_app: mainL failed");
+_LIT(KTxtExampleCode,"test36_console_app");
+_LIT(KFormatRunning ,"Running for %d microseconds. ");
+_LIT(KSetShutDownTimeOption, "-s");
+_LIT(KHoldFileOpenSwitch, "-h");
+_LIT(KDefaultHeldFileName, "\\documents\\insttest\\file.txt");
+_LIT(KCommandSwitch, "-");
+_LIT(KHoldingFileStartString, "Holding file  ");
+_LIT(KHoldingFileEndString, " open.");
+
+
+
+#ifdef _CONSOLE_APP_LONG_RUNNING_DEFAULT_
+// Default run time exceeds default runwait timeout value.
+const TInt KDefaultTimeout = 185000000;
+#else
+const TInt KDefaultTimeout = 5000000;
+#endif
+
+// private
+LOCAL_C void mainL();
+
+TInt E32Main() // main function called by E32
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,mainL()); // Run main method
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+	}
+
+LOCAL_C void mainL()
+	{
+	TBool holdFileOpen(EFalse);
+
+	TInt timerDuration(KDefaultTimeout);
+ 
+ 	TBuf<256> nextArg(KNullDesC); 
+	TBuf<256> fileToHold(KNullDesC);
+		
+    CCommandLineArguments* cmdLine = CCommandLineArguments::NewL();
+	TInt argTotal=cmdLine->Count();
+	for (TInt loop=1 ; loop < argTotal ; ++loop)
+		{
+		TPtrC arg(cmdLine->Arg(loop));
+		
+		// Process the file holding option
+		if (arg==KHoldFileOpenSwitch)
+		{	
+			// The -h option has been issued at the command line so we need to 
+			// hold a file open. 		
+			holdFileOpen = ETrue;
+			
+			// If there is another argument it may be the filename of 
+			// the file to be held.
+			if (loop++ < (argTotal-1)) 
+			{	
+				// Read	the argument in so that it can be checked.				
+				fileToHold = cmdLine->Arg(loop);
+			
+	 
+				if (fileToHold.Left(1) == KCommandSwitch)
+				{
+					// The argument is another switch and not a filename
+					// Decrement the loop counter so that the argument can 
+					// be processed subsequently.
+					loop--;		
+					fileToHold = KNullDesC;
+				}
+			
+			}
+		 	
+		}
+		 
+		// Process the timer option
+		else if ((arg==KSetShutDownTimeOption))
+			{
+				// If there is another argument it may be the timer value
+				if (loop++ < (argTotal-1)) 
+				{	
+					// Read	the argument in so that it can be checked.					
+			 		nextArg = cmdLine->Arg(loop);						   	 
+				
+	 
+					if (nextArg.Left(1) == KCommandSwitch) 
+					{
+						// The argument is another switch and not a filename
+						// Decrement the loop counter so that the argument can 
+						// be processed subsequently .
+						loop--;		
+					}
+					else 
+					{
+						// The argument must be the timer value. Extract the value.
+						TLex timeoutLex(cmdLine->Arg(loop));
+						timeoutLex.Val(timerDuration);
+					}
+				}
+			 
+			}
+		}
+	delete cmdLine;
+
+	// There's only something useful to do if the timeDuration is
+	// a positive value.
+	if(timerDuration > 0)
+		{
+		CConsoleBase* console; // write all your messages to this
+
+		console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+		
+		console->Printf(KFormatRunning, timerDuration);
+
+		RTimer timer;
+		TRequestStatus timerStatus;
+		timer.CreateLocal();
+		timer.After(timerStatus, timerDuration);
+		
+		RFs fileSession;
+		fileSession.Connect();
+
+		// Timer started, now open the file if "-h" switch specified.
+		if (holdFileOpen)
+			{
+			RFile heldFile;
+			TDriveUnit sysDrive (RFs::GetSystemDrive());
+			TFileName fileName (sysDrive.Name());
+		 
+			console->Printf(KHoldingFileStartString);
+
+
+			if (fileToHold != KNullDesC)
+			{
+				// Use the filename from the command line if provided.
+				fileName.Append(fileToHold);
+				console->Printf(fileToHold);
+				RDebug::Print(_L("Holding file %S open for %d microseconds"), &fileName, timerDuration);	
+			}
+			else 
+			{
+				// Otherwise use the default file name.
+				fileName.Append(KDefaultHeldFileName);	
+				console->Printf(KDefaultHeldFileName);
+				RDebug::Print(_L("Holding default file %S open for %d microseconds"), &fileName, timerDuration);
+			}
+	 
+	 		console->Printf(KHoldingFileEndString);
+
+			// Hold the file
+			heldFile.Open(fileSession, fileName, EFileRead);
+ 
+			User::WaitForRequest(timerStatus);
+			heldFile.Close();
+			}
+		else 
+			{
+			User::WaitForRequest(timerStatus);	
+			}
+
+		timer.Close();
+
+		_LIT(KFlaggingFileName, "\\testrun_flag_file.out");
+		TDriveUnit sysDrive (RFs::GetSystemDrive());
+		RFile flaggingFile;
+		TBuf<128> flaggingFileName (sysDrive.Name());
+		flaggingFileName.Append(KFlaggingFileName);				
+		flaggingFile.Replace(fileSession, flaggingFileName, EFileWrite);
+		flaggingFile.Close();
+			
+		fileSession.Close();
+		delete console; // delete console
+		
+		}
+    }
+
+// End of file