installationservices/swi/test/tsisfile/tsisfile.cpp
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/installationservices/swi/test/tsisfile/tsisfile.cpp	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,206 @@
+/*
+* Copyright (c) 2004-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: 
+* Main class for the sisfile testing.
+*
+*/
+
+
+/**
+ @file tsisfile.cpp
+*/
+
+#include <e32cons.h>
+#include <e32std.h>
+#include <f32file.h>
+
+#include "sisparser.h"
+#include "siscontents.h"
+#include "sisdataprovider.h"
+#include "filesisdataprovider.h"
+#include "dessisdataprovider.h"
+
+
+#include "siscontroller.h"
+#include "sisinfo.h"
+
+using namespace Swi;
+using namespace Swi::Sis;
+//using namespace Swi::Test;
+
+/**
+ * Extracts the nPos command line argument.
+ */
+
+HBufC* GetArgumentL(TInt nPos)
+	{
+	HBufC *argv = HBufC::NewLC(User::CommandLineLength());
+	TPtr cmd(argv->Des());
+	User::CommandLine(cmd);
+
+	TLex arguments(cmd);
+
+	// finds nth parameter
+	while(nPos && !arguments.Eos())
+		{
+		TPtrC token = arguments.NextToken();
+		if(token.Length() > 0)
+			{
+			nPos--;
+			}
+		}
+
+	HBufC* result = NULL;
+	if(!arguments.Eos())
+		{
+		TPtrC testfile(arguments.NextToken());
+
+		if(testfile.Length() > 0)
+			{
+			result = testfile.AllocL();
+			}
+		};
+
+	// no parameter found, but must return something so..
+	if(!result)
+		{
+		result = HBufC::NewL(0);
+		}
+
+	CleanupStack::PopAndDestroy(argv);
+
+	return result;
+	}
+
+void PrintError(TInt aErr, CConsoleBase* aConsole)
+	{
+	if (aErr != KErrNone) 
+		{
+		TBuf<138> error;
+		_LIT(KBuf, "\n**** Failed with Error %d ****\n");
+		error.Format(KBuf, aErr);
+		aConsole->Printf(error);
+		aConsole->Printf(_L("\n"));		
+		}	
+	}
+
+void RunTestL() 
+	{
+	// Get the SISX file to install
+	CConsoleBase* console = Console::NewL(_L("SISX Parsing Test"), 
+										  TSize(KDefaultConsWidth, KDefaultConsHeight));
+	CleanupStack::PushL(console);
+
+	HBufC* sisxFile = NULL;
+
+	TRAPD(err, sisxFile = GetArgumentL(0));
+	CleanupStack::PushL(sisxFile);
+	
+	if ((err != KErrNone) || (*sisxFile == _L("")))
+		{
+		console->Printf(_L("Usage: tsisfile SISX_file_name"));
+		console->Printf(_L("\n"));
+		console->Printf(_L("Press Any Key to Continue..."));
+		console->Getch();
+		CleanupStack::PopAndDestroy(sisxFile);		
+		CleanupStack::PopAndDestroy(console);		
+		return;		
+		}
+
+	TFileName fileName(*sisxFile);
+	RFs fs;
+	CleanupClosePushL(fs);
+	err = fs.Connect();
+
+	if ((err != KErrNone) || (*sisxFile == _L("")))
+		{
+		PrintError(err, console);
+		console->Printf(_L("Press Any Key to Continue..."));
+		console->Getch();
+		User::Leave(err);
+		}	
+
+	CFileSisDataProvider* dataProvider=NULL;
+	
+	TRAP (err, dataProvider = CFileSisDataProvider::NewL(fs, fileName)); 
+	CleanupStack::PushL(dataProvider);
+	
+	if (err != KErrNone) 
+		{
+		PrintError(err, console);
+		console->Printf(_L("Press Any Key to Continue..."));
+		console->Getch();
+		User::Leave(err);
+		}
+		
+	CContents* contents = NULL;
+	TRAP(err, contents = Parser::ContentsL(*dataProvider));
+	CleanupStack::PushL(contents);
+
+	if (err != KErrNone) 
+		{
+		PrintError(err, console);
+		console->Printf(_L("Press Any Key to Continue..."));
+		console->Getch();
+		User::Leave(err);
+		}
+			
+	HBufC8* controllerData = NULL;
+	
+	TRAP(err, controllerData = contents->ReadControllerL());
+	CleanupStack::PushL(controllerData);
+
+	PrintError(err, console);
+	
+	if (err == KErrNone) 
+		{
+		CDesDataProvider* controllerProvider= CDesDataProvider::NewLC(*controllerData);
+		CController* controller = NULL;
+		TRAP(err, controller = CController::NewL(*controllerProvider));
+		CleanupStack::PushL(controller);
+		
+		PrintError(err, console);
+		if (err == KErrNone)
+			{
+			console->Printf(_L("SISFile name: %S"), 
+							&controller->Info().Names()[0]->Data());			
+			}
+			
+		CleanupStack::PopAndDestroy(controller);	
+		CleanupStack::PopAndDestroy(controllerProvider);	
+		}	
+ 
+	console->Printf(_L("\n"));
+	console->Printf(_L("Press Any Key to Continue..."));
+	console->Getch();
+	
+	CleanupStack::PopAndDestroy(controllerData);	
+	CleanupStack::PopAndDestroy(contents);	
+	CleanupStack::PopAndDestroy(dataProvider);	
+	CleanupStack::PopAndDestroy(&fs);	
+	CleanupStack::PopAndDestroy(sisxFile);	
+	CleanupStack::PopAndDestroy(console);	
+	}
+        
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAP_IGNORE(RunTestL());
+	//ASSERT(err == KErrNone);
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }