compressionlibs/ziplib/test/rtest/gzip/gzip.cpp
changeset 0 e4d67989cc36
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compressionlibs/ziplib/test/rtest/gzip/gzip.cpp	Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,267 @@
+// Copyright (c) 2003-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:
+//
+
+#include "eustd.h"
+#include <ezcompressor.h>
+#include <ezdecompressor.h>
+#include <ezlib.h>
+#include <ezgzip.h>
+
+#include <f32file.h>
+
+void ReadAndPrintHeaderL(RFs &rfs, const TDesC &fname);
+
+/**
+@SYMTestCaseID          SYSLIB-EZLIB-CT-0829
+@SYMTestCaseDesc	    Gzip functionality test
+@SYMTestPriority 	    High
+@SYMTestActions  	    Decompress and compress a zip file read from the command line. 
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+
+LOCAL_C void doExampleL()
+	{
+	RFs rfs;
+	rfs.Connect();
+	TBool compress = ETrue;
+	TInt bufferSize = 0x8000;
+	TBool readHeader = EFalse;
+	TBool readTrailer = EFalse;
+	TBool noWork = EFalse;
+
+    TInt cmdLineLen = User::CommandLineLength();
+
+	if (cmdLineLen <= 0)
+		{
+		_LIT(KUsage,"Usage:gzip [-dht] [-u bufferSize] filename\n");
+		console->Printf(KUsage);
+		User::Leave(1);
+		}
+    //(cmdLineLen > 0) case
+	HBufC *argv = HBufC::NewLC(cmdLineLen);
+	TPtr cmd(argv->Des());
+    User::CommandLine(cmd);
+
+	TLex arguments(*argv);
+	
+	TPtrC options(arguments.NextToken());
+	TBool expectBufferSize = EFalse;
+	_LIT(KBadBufferSize,"Bad buffersize specified\n");
+	_LIT(KUnknownOption,"Unknown Options %S\n");
+
+	
+	while (options[0]=='-' || expectBufferSize)
+		{
+		TInt i = 1;
+
+		if (expectBufferSize)
+			{
+			expectBufferSize = EFalse;
+			if (options.Length() == 0)
+				{
+				console->Printf(KBadBufferSize);
+				User::Leave(1);
+				}
+			else
+				{
+				TLex bufLex(options);
+				if (bufLex.Val(bufferSize) != KErrNone)
+					{
+					console->Printf(KBadBufferSize);
+					User::Leave(1);
+					}
+				}
+			}
+		else
+			{	
+			
+			while (i < options.Length())
+				{
+				if (options[i] == 'd')
+					compress = EFalse;
+				else if (options[i] == 'b')
+					{
+					if (i + 1 < options.Length())
+						{
+						TLex bufLex(options.Right(options.Length() - (i + 1)));
+						if (bufLex.Val(bufferSize) != KErrNone)
+							{
+							console->Printf(KBadBufferSize);
+							User::Leave(1);
+							}
+						}	
+					else
+						expectBufferSize = ETrue;
+					}
+				else if (options[i] == 'h')
+					readHeader = noWork = ETrue;
+				else if (options[i] == 't')
+					readTrailer = noWork = ETrue;
+				else 
+					{
+					console->Printf(KUnknownOption,&options);
+					i = options.Length();
+					}
+				i++;
+				}
+			
+			if (i == 1)
+				{
+				_LIT(KNoOption,"No option specified\n");
+				console->Printf(KNoOption);
+				User::Leave(1);
+				}
+			}
+		options.Set(arguments.NextToken());
+		}
+
+	console->Printf(_L("Buffer Size %d\n"),bufferSize);
+
+	if (readHeader)
+		{
+		ReadAndPrintHeaderL(rfs,options);
+		}
+
+	if (readTrailer)
+		{
+		TEZGZipTrailer trailer;
+		EZGZipFile::LocateAndReadTrailerL(rfs, options, trailer);
+		_LIT(KTrailer,"Crc = %d Size = %d\n");
+		console->Printf(KTrailer,trailer.iCrc32,trailer.iSize);
+		}
+
+	if (!noWork)
+		{
+		if (!compress)
+			{
+			
+			TPtrC inputFile(options);
+			
+			HBufC *uncompressedFile = HBufC::NewLC(inputFile.Length()+1);
+			_LIT(KUfl,"%S1");
+			uncompressedFile->Des().Format(KUfl,&inputFile);
+			
+			RFile output;
+			TInt err;
+			
+			_LIT(KInfo,"Decompressing file %S\n");
+			console->Printf(KInfo,&inputFile);
+			
+			err = output.Create(rfs, *uncompressedFile,EFileStream | EFileWrite | EFileShareExclusive);
+			if (err == KErrAlreadyExists)
+				User::LeaveIfError(output.Open(rfs, *uncompressedFile,EFileStream | EFileWrite | EFileShareExclusive));
+			else 
+				User::LeaveIfError(err);
+			CleanupClosePushL(output);
+			
+			CEZGZipToFile *def = CEZGZipToFile::NewLC(rfs,inputFile,output,bufferSize);
+			while (def->InflateL()){/*do nothing*/}
+			
+			_LIT(KHoorah,"Hoorah");
+			console->Printf(KHoorah);
+			
+			CleanupStack::PopAndDestroy(3);
+			}
+		else
+			{
+			TPtrC inputFile(options);
+			
+			HBufC *compressedFile = HBufC::NewLC(inputFile.Length()+3);
+			_LIT(KUfl,"%S.gz");
+			compressedFile->Des().Format(KUfl,&inputFile);
+			
+			RFile input;
+			
+			_LIT(KInfo,"Compressing file %S to %S\n");
+			console->Printf(KInfo,&inputFile,compressedFile);
+			
+			User::LeaveIfError(input.Open(rfs,inputFile,EFileStream | EFileRead | EFileShareAny));
+			CleanupClosePushL(input);
+
+			CEZFileToGZip *com = CEZFileToGZip::NewLC(rfs,*compressedFile,input,bufferSize);
+			while (com->DeflateL()){/*do nothing*/}
+			
+			_LIT(KHoorah,"Hoorah");
+			console->Printf(KHoorah);
+					
+			CleanupStack::PopAndDestroy(3);
+			}
+		}
+	CleanupStack::PopAndDestroy(1);
+	rfs.Close();
+	}
+
+
+void ReadAndPrintHeaderL(RFs &rfs, const TDesC &fname)
+	{
+	TEZGZipHeader header;
+	
+	if (!EZGZipFile::IsGzipFileL(rfs,fname))
+		{
+		_LIT(KNotGzipFile,"%S is not a gzip file\n");
+		console->Printf(KNotGzipFile,&fname);
+		User::Leave(1);
+		}
+	RFile gzipFile;
+	User::LeaveIfError(gzipFile.Open(rfs,fname,EFileStream | EFileRead | EFileShareAny));
+	EZGZipFile::ReadHeaderL(gzipFile,header);
+	
+	_LIT(KFileIds,"ID1 = %d ID2 = %d\n");
+	console->Printf(KFileIds,header.iId1,header.iId2);
+	_LIT(KCompressionMethod,"Compression Method = %d\n");
+	console->Printf(KCompressionMethod,header.iCompressionMethod);
+	_LIT(KFlags,"Flags = %d\n");
+	console->Printf(KFlags,header.iFlags);
+	_LIT(KTime,"Time Stamp = %d\n");
+	console->Printf(KTime,header.iTime);
+	_LIT(KExtraFlags,"Extra Flags %d\n");
+	console->Printf(KExtraFlags,header.iExtraFlags);
+	_LIT(KOS,"OS %d\n");
+	console->Printf(KOS,header.iOs);
+	if (header.iFlags & 4)
+		{
+		_LIT(KExtraLen,"Extra Length %d\n");
+		console->Printf(KExtraLen,header.iXlen);
+		HBufC *buf = HBufC::NewMaxLC(header.iExtra->Length());
+		buf->Des().Copy(*header.iExtra);
+		console->Printf(*buf);
+		CleanupStack::PopAndDestroy();
+		}
+	
+	if (header.iFlags & 8)
+		{
+		_LIT(KName,"Name: %S\n");
+		HBufC *buf = HBufC::NewMaxLC(header.iFname->Length());
+		buf->Des().Copy(*header.iFname);
+		console->Printf(KName,buf);
+		CleanupStack::PopAndDestroy();
+		}
+	
+	if (header.iFlags & 16)
+		{
+		_LIT(KComment,"Comment: %S\n");
+		HBufC *buf = HBufC::NewMaxLC(header.iComment->Length());
+		buf->Des().Copy(*header.iComment);
+		console->Printf(KComment,buf);
+		CleanupStack::PopAndDestroy();
+		}
+	
+	if (header.iFlags & 2)
+		{
+		_LIT(KCrc,"Crc16 = %d\n");
+		console->Printf(KCrc,header.iCrc);
+		}
+	}