phonebookengines/contactsmodel/tsrc/Integration/TestImpExvCard/src/TestCompareCntFiles.cpp
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/Integration/TestImpExvCard/src/TestCompareCntFiles.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,421 @@
+// Copyright (c) 2006-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 "TestCompareCntFiles.h"
+
+// Class CTestCompareCntFiles - Opens import/export vcf and carries out the verification of the properties
+CTestCompareCntFiles::CTestCompareCntFiles()
+	{
+	SetTestStepName(KTestCompareCntFiles);
+	}
+
+CTestCompareCntFiles::~CTestCompareCntFiles()
+	{
+	delete iExportObj;
+	}
+
+
+TVerdict CTestCompareCntFiles::doTestStepPreambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("Start verifcation of import/export vcf files"));
+
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CTestCompareCntFiles::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ */
+	{
+	// connect to file system
+	User::LeaveIfError(iFsSession.Connect());
+
+	TESTL(TestStepResult() == EPass);
+	INFO_PRINTF1(_L("CTestCompareCntFiles::doTestStepL() start"));
+
+	TESTL(GetStringFromConfig(ConfigSection(), KExportFile, iExportFilePath));
+	
+	GetStringFromConfig(ConfigSection(), KExpectedExportFile, iExpectedExportFilePath);
+	GetStringFromConfig(ConfigSection(), KFieldToVerify, iFieldToVerify);
+	GetStringFromConfig(ConfigSection(), KNoField, iNoField);
+	
+	// Create Utility class object, to use TokenizeStringL
+	CTestStep* self = static_cast<CTestStep*>(this);
+	iExportObj = new(ELeave) CContactsPBAPExportUtilityClass(self);
+	
+	TokenizeAndCompareL();
+	TokenizeAndCheckNoFieldL();
+	
+	// Comparing two files
+	TBool compareFile = EFalse;
+	GetBoolFromConfig(ConfigSection(), KCompareFile, compareFile);
+	
+	if(compareFile)
+		{
+		TBool fileCompare = EFalse;
+		// Call CompareWholeFileL to use the normal comparison of two files, ignoring the REV property
+		fileCompare = CompareWholeFileL(iExpectedExportFilePath, iExportFilePath);
+		if(!fileCompare)
+			{
+			SetTestStepResult(EFail);
+			}
+		}
+	
+	iFsSession.Close();
+    
+	INFO_PRINTF1(_L("CTestCompareCntFiles::doTestStepL() finish"));
+	
+	return TestStepResult();
+	
+	}
+
+/** Compares 2 vcf fie
+@param	aExpectedFile The expected vcf file
+@param	aFile This is the vcf file produced, and will be compared against aExpectedFile
+@param	aProperty This is the property we are interested in 
+*/
+void CTestCompareCntFiles::CompareFileL(const TDesC& aExpectedFile, const TDesC& aFile, TDes8& aProperty)
+	{
+	RFile fileExpected;
+	RFile fileOutput;
+	CleanupClosePushL(fileExpected);
+	CleanupClosePushL(fileOutput);
+	
+	TInt err = KErrNone;
+	err = fileExpected.Open(iFsSession, aExpectedFile, EFileRead);
+
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Unable to open file: %S"), &aExpectedFile);
+		SetTestStepResult(EFail);
+		SetTestStepError(err);
+		}
+	err = fileOutput.Open(iFsSession, aFile, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Unable to open file: %S"), &aFile);
+		SetTestStepResult(EFail);
+		SetTestStepError(err);
+		}
+
+	RFileReadStream streamExpected(fileExpected);
+	RFileReadStream streamOutput(fileOutput);
+	CleanupClosePushL(streamExpected);
+	CleanupClosePushL(streamOutput);
+
+	TBuf8<0x80> bufExpected,bufOutput;
+	TBool isProperty = EFalse;
+	TBool isPropertyExpected = EFalse;
+	TBool foundBothProperty = EFalse;
+	TBool flag = EFalse;
+	
+	TInt err1 = KErrNone;
+	
+	do  // This do loop iterates through both files, until the end of file is found
+		{
+		do // This do loop iterates thorugh both files until both properties are found and compares them
+			{
+			foundBothProperty = EFalse;
+			if (!isProperty)
+				{
+				TRAP(err, streamExpected.ReadL(bufExpected, KLinefeedChar));
+				}
+
+			if (!isPropertyExpected)
+				{
+				TRAP(err1, streamOutput.ReadL(bufOutput, KLinefeedChar));
+				}
+
+			if (err != KErrEof || err1 != KErrEof)
+				{
+				isProperty = IsPropertyPresent(bufExpected, aProperty); // checks if aProperty
+				if(isProperty && err1 == KErrEof)
+					{
+					break;	
+					}
+				isPropertyExpected = IsPropertyPresent(bufOutput, aProperty); // checks if aProperty
+				}
+			else
+				{
+				break;
+				}
+			if ((isProperty) && (isPropertyExpected))
+				{
+				foundBothProperty = ETrue;
+				flag = ETrue;
+				}
+			} while (!foundBothProperty); // exit 2nd do loop when both properties found
+
+		// Exists 2nd do loop, so both properties are found
+		if (err != KErrEof && err1 != KErrEof)
+			{
+			if(aProperty != KRevision)
+				{
+				CompareLinesL(bufExpected, bufOutput); // compares both properties	
+				}
+			else 
+				{
+				break;
+				}
+			}
+
+		// After comparing, gets the next property parameters in vcs file, if we have not reached end of file
+		TRAP(err, streamExpected.ReadL(bufExpected, KLinefeedChar));
+		TRAP(err1, streamOutput.ReadL(bufOutput, KLinefeedChar));
+		} while (err != KErrEof || err1 != KErrEof); // exits 2nd do loop when its reached the end of either file
+
+	TBuf<KMaxLengthField> buf;
+	buf.Copy(aProperty);
+	TPtrC ptr(buf);
+	
+	if(flag)
+		{
+		INFO_PRINTF2(_L("Property: %S Exported properly"), &ptr);	
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Property: %S not exported"), &ptr);
+		SetTestStepResult(EFail);
+		}
+	CleanupStack::PopAndDestroy(4, &fileExpected);
+	
+	}
+	
+/** Checks if the line of data contains the property (aProperty) parameter
+@param	aLine The line of data to check
+@return	True or False indicating if property found in the line of data
+*/
+TBool CTestCompareCntFiles::IsPropertyPresent(const TDesC8& aLine, TDes8& aProperty)
+	{
+	TInt propertyLength = aProperty.Length();
+	TBuf8<KMaxLengthField> propertyFromLine(aLine.Left(propertyLength));
+
+	if (!propertyFromLine.Compare(aProperty))
+		{
+		return ETrue;
+		}
+	else
+		{
+		return EFalse;
+		}
+	}
+
+
+/** Compares two lines of data
+@param	aBufExpected The line of data to compare with aBufOutput
+@param	aBufOutput The second line of data to compare to aBufExpected
+*/
+void CTestCompareCntFiles::CompareLinesL(const TDesC8& aBufExpected, const TDesC8& aBufOutput)
+	{
+	TESTL(!aBufExpected.Compare(aBufOutput));	
+	}
+
+/** Checks for any field that should have not been exported
+@param	aFile The vcs file to open
+*/
+TBool CTestCompareCntFiles::CheckForNoFieldL(const TDesC& aFile, const TDesC& aProperty)
+	{
+	RFile fileOutput;
+	CleanupClosePushL(fileOutput);
+
+	TInt err = fileOutput.Open(iFsSession, aFile, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Unable to open file: %S"), &aFile);
+		SetTestStepResult(EFail);
+		SetTestStepError(err);
+		}
+
+	RFileReadStream streamOutput(fileOutput);
+	CleanupClosePushL(streamOutput);
+
+	TBuf8<0x80> bufOutput;
+	
+	TBool result;
+	TBuf8<KMaxLengthField> noField;
+	noField.Copy(aProperty);
+
+	do
+		{
+		TRAP(err, streamOutput.ReadL(bufOutput, TChar(KLinefeedChar)));
+		
+		result = IsPropertyPresent(bufOutput, noField);
+		
+		if(result)
+			{
+			break;	
+			}
+		} while (err != KErrEof);
+
+	CleanupStack::PopAndDestroy(2, &fileOutput);
+	
+	if(result)
+		{
+		return EFalse;	
+		}
+	else
+		{
+		return ETrue;
+		}
+	}
+
+// Tokenize the property list taken from ini file and compare each of them with the expected one
+void CTestCompareCntFiles::TokenizeAndCompareL()
+	{
+	RArray<TPtrC>	fieldList;
+	CleanupClosePushL(fieldList);
+	iExportObj->TokenizeStringL(iFieldToVerify, fieldList);
+	
+	TInt count = fieldList.Count();
+	TBuf8<KMaxLengthField> property;
+	
+	for(TInt i = 0;i < count;i++)
+		{	
+		property.Copy(fieldList[i]);
+		CompareFileL(iExpectedExportFilePath, iExportFilePath, property);
+		}
+	CleanupStack::PopAndDestroy();
+	fieldList.Close();
+	}
+
+// Tokenize the property list taken from ini file and check for non-existence of these properties in the exported file.
+void CTestCompareCntFiles::TokenizeAndCheckNoFieldL()
+	{
+	TBool result = EFalse;
+	RArray<TPtrC>	fieldList;
+	CleanupClosePushL(fieldList);
+	iExportObj->TokenizeStringL(iNoField, fieldList);
+	TInt count = fieldList.Count();
+	
+	for(TInt i = 0;i < count;i++)
+		{	
+		result = CheckForNoFieldL(iExportFilePath, fieldList[i]);
+		
+		if(result)
+			{
+			INFO_PRINTF1(_L("Success: Property not present in vCard"));
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Error: Property present in vCard"));
+			SetTestStepResult(EFail);
+			break;
+			}
+		}
+	CleanupStack::PopAndDestroy();
+	fieldList.Close();	
+	}
+
+/** Compares two files, excluding the REV property, as it doesn't remain the same always
+@param	aExpectedFile The expected vcf file
+@param	aFile This is the vcf file produced, and will be compared against aExpectedFile
+*/
+TBool CTestCompareCntFiles::CompareWholeFileL(const TDesC& aExpectedFile, const TDesC& aFile)
+	{
+	User::LeaveIfError(iFsSession.Connect());
+	CleanupClosePushL(iFsSession);
+	
+	RFile fileExpected;
+	RFile fileOutput;
+	CleanupClosePushL(fileExpected);
+	CleanupClosePushL(fileOutput);
+	
+	TInt err;
+	err = fileExpected.Open(iFsSession, aExpectedFile, EFileRead);
+
+	if (err != KErrNone)
+		{
+		User::Leave(err);
+		}
+
+	err = fileOutput.Open(iFsSession, aFile, EFileWrite);
+	if (err != KErrNone)
+		{
+		User::Leave(err);
+		}
+
+	RFileReadStream stream1(fileExpected);
+	RFileReadStream stream2(fileOutput);
+	CleanupClosePushL(stream1);
+	CleanupClosePushL(stream2);
+	TBuf8<0x80> bufO,bufC;
+	TBool flag = ETrue;
+	TInt line = 1;
+	do
+		{
+		TRAP(err, stream1.ReadL(bufO, KLinefeedChar));
+		if (err == KErrNone || err == KErrEof)
+			TRAP(err, stream2.ReadL(bufC, KLinefeedChar));
+		if (err != KErrNone && err != KErrEof)
+			User::Leave(err);
+		if (CompareLine(bufO, bufC) == EFalse)
+			{
+			flag = EFalse;
+			break;
+			}
+		++line;
+		}
+	while (err != KErrEof);
+
+	CleanupStack::PopAndDestroy(4, &fileExpected);
+	CleanupStack::PopAndDestroy(&iFsSession);
+    iFsSession.Close();
+	
+	if(flag)
+		{
+		return ETrue;		
+		}
+	else
+		{
+		return EFalse;
+		}		
+	}
+
+/* Compare the corresponding lines of two files
+@param	aLine1 Complete line of a file to compare
+@param	aLine2 Corresponding line to compare in the second file
+*/
+TBool CTestCompareCntFiles::CompareLine(const TDesC8& aLine1, const TDesC8& aLine2)
+	{
+	_LIT8(KREV,"REV:");
+	TBool ret = !aLine1.Compare(aLine2);
+	if (!ret)
+		{
+		TBufC8<4> propertyRev(aLine1.Left(4));
+		if(!propertyRev.Compare(KREV()))
+			{
+			return ETrue;	
+			}
+		}
+	return ret;
+	}
+
+
+TVerdict CTestCompareCntFiles::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	INFO_PRINTF1(_L("Completed verifcation of import/export vcf files"));
+	return TestStepResult();
+	}
+