--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cryptomgmtlibs/securityutils/test/trecog/trecogstep.cpp Wed Jul 08 11:25:26 2009 +0100
@@ -0,0 +1,330 @@
+/*
+* 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 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:
+*
+*/
+
+
+
+
+/**
+ @file
+ @internalComponent - Internal Symbian test code
+*/
+
+
+#include "trecogstep.h"
+
+// Literals & Constants
+_LIT(KCompleted, "Completed.");
+_LIT(KMethodName, "byName");
+_LIT(KMethodHandle, "byHandle");
+_LIT(KMethodBuffer, "byBuffer");
+_LIT8(KEmptyBuffer8,"");
+
+
+class RDeletefile
+ {
+public:
+ RDeletefile(RFs &aFs, TDesC &aFileName)
+ : iFs(aFs),
+ iFileName(aFileName)
+ {
+ }
+ void Close()
+ {
+ (void) iFs.Delete(iFileName);
+ }
+
+private:
+ RFs &iFs;
+ TDesC &iFileName;
+ };
+
+void CRecogStep::TestRecognizeDataL()
+ {
+ TDataRecognitionResult recogResult;
+
+ TPtrC tmp;
+ GetStringFromConfig(ConfigSection(), _L("fileName"), tmp);
+ iFileName = tmp;
+
+
+ TPtrC expectedDataType16;
+ GetStringFromConfig(ConfigSection(), _L("expectedDataType"), expectedDataType16);
+ HBufC8 *expectedDataBuf8 = ConvertDes16toHBufC8LC(expectedDataType16);
+
+ TInt expectedConfidence;
+ GetIntFromConfig(ConfigSection(), _L("expectedConfidence"), expectedConfidence);
+
+ TInt maxDataBufSize;
+ if (GetIntFromConfig(ConfigSection(), _L("maxDataBufSize"), maxDataBufSize))
+ {
+ iLs.SetMaxDataBufSize(maxDataBufSize);
+ }
+
+ TPtrC method;
+ GetStringFromConfig(ConfigSection(), _L("method"), method);
+
+ TBool checkSpecific = EFalse;
+ TBool matchedSpecificMimeType = EFalse;
+ TPtrC specificMimeType;
+ if (method == KMethodHandle)
+ {
+ checkSpecific = GetStringFromConfig(ConfigSection(), _L("checkSpecificMimeType"), specificMimeType);
+ }
+
+ TInt usePrivateFile = 0;
+ GetIntFromConfig(ConfigSection(), _L("usePrivateFile"), usePrivateFile);
+
+ RDeletefile deletefile(iTheFs, iFileName);
+ if(!usePrivateFile)
+ {
+ // Tweak file modification time to defeat the apparch recognizer result cache....
+ TTime time;
+ User::LeaveIfError(iTheFs.Modified(iFileName, time));
+ time += TTimeIntervalSeconds(1);
+ User::LeaveIfError(iTheFs.SetModified(iFileName, time));
+ }
+ else
+ {
+ // Copy file to private dir, this will make it inaccesible to the recognizer code (except via handle).
+ ConvertFileToPrivateL();
+ CleanupClosePushL(deletefile);
+ }
+
+
+ if (method == KMethodName)
+ {
+ INFO_PRINTF2(_L("Test Recognizing %S by File Name"), &iFileName);
+ User::LeaveIfError(iLs.RecognizeData(iFileName, KEmptyBuffer8, recogResult));
+ }
+ else if((method == KMethodHandle) || (method == KMethodBuffer))
+ {
+ RFile fileToRead;
+ User::LeaveIfError(fileToRead.Open(iTheFs, iFileName, EFileShareReadersOrWriters | EFileRead | EFileStream));
+ CleanupClosePushL(fileToRead);
+ if(method == KMethodHandle)
+ {
+ if (checkSpecific)
+ {
+ HBufC8* specificMimeType8 = ConvertDes16toHBufC8LC(specificMimeType);
+ TDataType mime(*specificMimeType8);
+ INFO_PRINTF2(_L("Test matching specific mime-type %S by Handle"), &iFileName);
+ User::LeaveIfError(iLs.RecognizeSpecificData(fileToRead, mime, matchedSpecificMimeType));
+ CleanupStack::PopAndDestroy(specificMimeType8);
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Test Recognizing %S by Handle"), &iFileName);
+ User::LeaveIfError(iLs.RecognizeData(fileToRead, recogResult));
+ }
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Test Recognizing %S by Buffer"), &iFileName);
+ TInt size;
+ User::LeaveIfError(fileToRead.Size(size));
+
+ TInt maxBufferSize;
+ if(GetIntFromConfig(ConfigSection(), _L("maxBufferSize"), maxBufferSize))
+ {
+ if(size > maxBufferSize)
+ {
+ size = maxBufferSize;
+ }
+ }
+
+ HBufC8* memForFile = HBufC8::NewLC(size);
+ TPtr8 fileContent(memForFile->Des());
+ User::LeaveIfError(fileToRead.Read(fileContent, size));
+ User::LeaveIfError(iLs.RecognizeData(iFileName, fileContent, recogResult));
+ CleanupStack::PopAndDestroy(); //memForFile,
+ }
+ CleanupStack::PopAndDestroy(&fileToRead);
+ }
+ else
+ {
+ ERR_PRINTF1(_L("method not set correctly"));
+ User::Leave(KErrArgument);
+ }
+
+
+ if (checkSpecific)
+ {
+ if (matchedSpecificMimeType)
+ {
+ INFO_PRINTF2(_L("Specific type '%S' matched\n"), &specificMimeType);
+ SetTestStepResult(EPass);
+ }
+ else
+ {
+ INFO_PRINTF2(_L("Specific type '%S' not matched\n"), &specificMimeType);
+ SetTestStepResult(EFail);
+ }
+ }
+ else
+ {
+ TPtrC result16 = recogResult.iDataType.Des();
+ if (// Expected failure
+ ((expectedConfidence == CApaDataRecognizerType::ENotRecognized) &&
+ (recogResult.iDataType != expectedDataBuf8->Des())) ||
+ // Expected success
+ ((recogResult.iConfidence == expectedConfidence) &&
+ (recogResult.iDataType == expectedDataBuf8->Des())))
+ {
+ INFO_PRINTF3(_L("PASSED - type '%S' confidence=%d\n"),
+ &result16,
+ recogResult.iConfidence);
+ SetTestStepResult(EPass);
+ }
+ else
+ {
+ ERR_PRINTF5(_L("FAILED - expected '%S', got type '%S' - expected confidence=%d got confidence %d\n"),
+ &expectedDataType16,
+ &result16,
+ expectedConfidence,
+ recogResult.iConfidence);
+ SetTestStepResult(EFail);
+ }
+ }
+
+ if(usePrivateFile)
+ {
+ CleanupStack::PopAndDestroy(&deletefile);
+ }
+
+ CleanupStack::PopAndDestroy(expectedDataBuf8);
+ INFO_PRINTF1(KCompleted);
+ }
+
+HBufC8* CRecogStep::ConvertDes16toHBufC8LC(TDesC& source)
+ {
+ HBufC8 *buf = HBufC8::NewL(source.Length());
+ CleanupStack::PushL(buf);
+ TPtr8 ptr=buf->Des();
+
+ CCnvCharacterSetConverter *converter = CCnvCharacterSetConverter::NewLC();
+ converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierAscii, iTheFs);
+ converter->ConvertFromUnicode(ptr, source);
+ CleanupStack::PopAndDestroy(converter);
+ return buf;
+ }
+
+
+
+void CRecogStep::RunTestCasesL()
+ {
+ __UHEAP_MARK;
+ TRAPD(r,TestRecognizeDataL());
+ TEST(r==KErrNone);
+ __UHEAP_MARKEND;
+ }
+
+
+/**
+ Destructor
+ */
+CRecogStep::~CRecogStep()
+ {
+ iTheFs.Close();
+ iLs.Close();
+ }
+
+/**
+ Constructor
+ */
+CRecogStep::CRecogStep()
+ {
+
+ TInt ret=iTheFs.Connect();
+ TEST(ret==KErrNone);
+ iTheFs.ShareProtected();
+
+ ret = iLs.Connect();
+ TEST(ret==KErrNone);
+
+
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KRecogStep);
+ }
+
+/**
+ @return - TVerdict code
+ Override of base class virtual
+ */
+TVerdict CRecogStep::doTestStepPreambleL()
+ {
+ SetTestStepResult(EPass);
+ return TestStepResult();
+ }
+
+/**
+ @return - TVerdict code
+ Override of base class virtual
+ */
+TVerdict CRecogStep::doTestStepPostambleL()
+ {
+ return TestStepResult();
+ }
+
+
+TVerdict CRecogStep::doTestStepL()
+ {
+ TRAPD(ret,RunTestCasesL())
+ TEST(ret==KErrNone);
+ return TestStepResult();
+ }
+
+void CRecogStep::ConvertFileToPrivateL()
+ {
+ // Read source file
+ RFile fromFile;
+ User::LeaveIfError(fromFile.Open(iTheFs, iFileName, EFileShareReadersOrWriters | EFileRead | EFileStream));
+ CleanupClosePushL(fromFile);
+ TInt size;
+ User::LeaveIfError(fromFile.Size(size));
+ HBufC8* memForFileContents = HBufC8::NewLC(size);
+ TPtr8 fileContents(memForFileContents->Des());
+ User::LeaveIfError(fromFile.Read(fileContents, size));
+
+ // Create destination path
+ TDriveUnit sysDrive = RFs::GetSystemDrive();
+ (void)iTheFs.CreatePrivatePath(static_cast<TInt> (sysDrive));
+ TFileName newFileName;
+ User::LeaveIfError(iTheFs.PrivatePath(newFileName));
+ newFileName.Insert(0, sysDrive.Name());
+ TParsePtr parseFrom(iFileName);
+ newFileName.Append(parseFrom.NameAndExt());
+
+ // Make sure destination does not already exist.
+ (void) iTheFs.Delete(newFileName);
+
+ // Copy file to private location
+ RFile toFile;
+ User::LeaveIfError(toFile.Create(iTheFs, newFileName, EFileShareExclusive | EFileWrite | EFileStream));
+ CleanupClosePushL(toFile);
+
+ User::LeaveIfError(toFile.Write(fileContents));
+
+ // Update iFileName
+ iFileName = newFileName;
+
+ // Cleanup
+ CleanupStack::PopAndDestroy(&toFile);
+ CleanupStack::PopAndDestroy(memForFileContents);
+ CleanupStack::PopAndDestroy(&fromFile);
+ }
+
+// End of file