diff -r 000000000000 -r 2c201484c85f crypto/weakcrypto/test/tbigint/tconstructionvector.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crypto/weakcrypto/test/tbigint/tconstructionvector.cpp Wed Jul 08 11:25:26 2009 +0100 @@ -0,0 +1,125 @@ +/* +* Copyright (c) 2002-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: +* +*/ + + +#include "tconstructionvector.h" +#include "t_input.h" +#include + +class RIntegerTest : public RInteger + { + public: + RIntegerTest(void) {} + RIntegerTest(const RInteger& aInteger) {iSize = *((TUint*)&aInteger); iPtr = *(((TUint*)(&aInteger)+1)); } + TUint* Ptr(void) {return RInteger::Ptr();} + }; + +CTestAction* CConstructionVector::NewL(RFs& aFs, CConsoleBase& aConsole, + Output& aOut, const TTestActionSpec& aTestActionSpec) + { + CTestAction* self = CConstructionVector::NewLC(aFs, aConsole, + aOut, aTestActionSpec); + CleanupStack::Pop(); + return self; + } + +CTestAction* CConstructionVector::NewLC(RFs& aFs, CConsoleBase& aConsole, + Output& aOut, const TTestActionSpec& aTestActionSpec) + { + CConstructionVector* self = new(ELeave) CConstructionVector(aFs, aConsole, aOut); + CleanupStack::PushL(self); + self->ConstructL(aTestActionSpec); + return self; + } + +CConstructionVector::~CConstructionVector() + { + delete iBody; + delete iString; + delete iMemoryLayout; + } + +CConstructionVector::CConstructionVector(RFs& aFs, CConsoleBase& aConsole, Output& aOut) + : CTestAction(aConsole, aOut), iFs(aFs) + { + } + +void CConstructionVector::ConstructL(const TTestActionSpec& aTestActionSpec) + { + CTestAction::ConstructL(aTestActionSpec); + iBody = HBufC8::NewL(aTestActionSpec.iActionBody.Length()); + iBody->Des().Copy(aTestActionSpec.iActionBody); + + iString = Input::ParseElementHexL(*iBody, _L8("")); + iMemoryLayout = Input::ParseElementHexL(*iBody, _L8("")); + } + +void CConstructionVector::DoPerformPrerequisite(TRequestStatus& aStatus) + { + TRequestStatus* status = &aStatus; + User::RequestComplete(status, KErrNone); + iActionState = CTestAction::EAction; + } + +void CConstructionVector::DoPerformPostrequisite(TRequestStatus& aStatus) + { + TRequestStatus* status = &aStatus; + iFinished = ETrue; + User::RequestComplete(status, KErrNone); + } + +void CConstructionVector::DoReportAction(void) + { + } + +void CConstructionVector::DoCheckResult(TInt) + { + } + +void CConstructionVector::PerformAction(TRequestStatus& aStatus) + { + __UHEAP_MARK; + TRequestStatus* status = &aStatus; + iResult = ETrue; + + //This is just a derived class to get around the fact that iReg is + //protected in RInteger. See top of file for definition + RIntegerTest a; + //a = (RIntegerTest)(RInteger::NewL(*iString)); + a = static_cast(RIntegerTest::NewL(*iString)); + CleanupStack::PushL(a); + + //This test ensures that the internal memory layout of a number is correct + TUint compare = Mem::Compare((TUint8*)(a.Ptr()), a.ByteCount(), + iMemoryLayout->Ptr(), iMemoryLayout->Size()); + if( compare != 0 ) + { + iResult = EFalse; + } + + HBufC8* out = a.BufferLC(); + if( *out != *iString ) + { + iResult = EFalse; + } + CleanupStack::PopAndDestroy(out); + CleanupStack::PopAndDestroy(&a); + + User::RequestComplete(status, KErrNone); + iActionState = CTestAction::EPostrequisite; + __UHEAP_MARKEND; + }