diff -r 675a964f4eb5 -r 35751d3474b7 cryptoservices/certificateandkeymgmt/tasn1/testbase.cpp --- a/cryptoservices/certificateandkeymgmt/tasn1/testbase.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptoservices/certificateandkeymgmt/tasn1/testbase.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,269 +1,270 @@ -/* -* Copyright (c) 2001-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: -* Defines methods common to all test classes -* -*/ - - -#include -#include "testbase.h" -#include "t_input.h" - -_LIT(KParametersStart, ""); -_LIT(KValuesStart, ""); -_LIT(KRandomStart, ""); -const TInt KMaxValuesSize = 1024; - - -CTestBase::CTestBase(CASN1NormalTest &aASN1Action) -: iASN1Action(aASN1Action) - { - } - -CTestBase::~CTestBase() - { - iParameters->Close(); - delete iParameters; - iValues->ResetAndDestroy(); - delete iValues; - }; - -CTestAction::TScriptError CTestBase::ConstructL(const TTestActionSpec& aTestActionSpec) - { - CTestAction::TScriptError syntaxError; - iParameters = new (ELeave)RArray; - iValues = new (ELeave)RPointerArray; - FillParameterArray(); - - HBufC* aBody = HBufC::NewLC(aTestActionSpec.iActionBody.Length()); - - aBody->Des().Copy(aTestActionSpec.iActionBody); - TPtrC parameters(Input::ParseElement(*aBody, KParametersStart)); - - syntaxError = CheckValueParametersL(parameters); - if(syntaxError==CTestAction::ENone) - syntaxError = CheckRandomParametersL(parameters); - - CleanupStack::PopAndDestroy(); - return(syntaxError); - } - - -CTestAction::TScriptError CTestBase::CheckValueParametersL(const TDesC& aParameters) - { - TInt dummyPos = 0, valuePos = 0, lastDummy = 0; - TBuf singleValue; - CTestParameter *testParameter=0; - TBuf values; - - // finds values to run test with - do - { - lastDummy = dummyPos; - values = Input::ParseElement(aParameters, KValuesStart, dummyPos); - - // finds the next group of value - if(lastDummy != dummyPos) - { - // parses each value in group with its expeced type - for(TInt parameter = 0; parameter < iParameters->Count(); parameter++) - { - testParameter = NULL; - // checks if its last parameter - if(parameter < iParameters->Count() - 1) - { - // finds it position - valuePos = values.Find((_L(","))); - if(valuePos > 0) - { - // fills singleValue with value - if(valuePos > KMaxValueSize) - { - iSyntaxErrorDescription.Copy(_L("value too long")); - return(CTestAction::ESyntax); - } - singleValue.Copy(values.Left(valuePos)); - values = values.Mid(valuePos + 1); - } - else - { - // couldnt find it there is a problem - iSyntaxErrorDescription.Copy(_L("Invalid number of parameters")); - return(CTestAction::ESyntax); - }; - } - else - { - // its the last value fill singleValue with it - if(values.Length() > KMaxValueSize) - { - iSyntaxErrorDescription.Copy(_L("value too long")); - return(CTestAction::ESyntax); - } - singleValue.Copy(values); - }; - - // trims any white space - singleValue.Trim(); - // checks what type its supposed to be - switch((*iParameters)[parameter]) - { - case CTestParameter::EInt: - { - // its an int, check to see if its a range - if(singleValue.Find(_L("..")) == KErrNotFound) - testParameter = CIntTestParameter::NewL(singleValue); - else - testParameter = CIntRangeTestParameter::NewL(singleValue); - break; - } - case CTestParameter::EString: - { - // its a string - testParameter = CStringTestParameter::NewL(singleValue); - break; - } - case CTestParameter::EIntRange: - case CTestParameter::ERandom: - break; // Nothing to do - }; - // if testparamer is found add it to the list - if(testParameter) - { - if(testParameter->iValid) - iValues->Append(testParameter); - else - { - delete testParameter; - iSyntaxErrorDescription.Copy(_L("Invalid value ")); - iSyntaxErrorDescription.Append(singleValue); - return(CTestAction::ESyntax); - } - } - }; - } - } - while(lastDummy != dummyPos); - - return(CTestAction::ENone); - }; - -CTestAction::TScriptError CTestBase::CheckRandomParametersL(const TDesC& aParameters) - { - TInt dummyPos = 0, lastDummy = 0; - TBuf singleValue; - CTestParameter *testParameter=0; - TBuf values; - - // finds any random tests - do - { - lastDummy = dummyPos; - values = Input::ParseElement(aParameters, KRandomStart, dummyPos); - - if(lastDummy != dummyPos) - { - if(values.Length() > KMaxValueSize) - { - iSyntaxErrorDescription.Copy(_L("value too long")); - return(CTestAction::ESyntax); - } - singleValue.Copy(values); - // found one create a random parameter with its interators - testParameter = CRandomTestParameter::NewL(singleValue); - // adds it to list - if(testParameter) - { - if(testParameter->iValid) - iValues->Append(testParameter); - else - { - delete testParameter; - iSyntaxErrorDescription.Copy(_L("Invalid value ")); - iSyntaxErrorDescription.Append(singleValue); - return(CTestAction::ESyntax); - } - } - } - } - while(lastDummy != dummyPos); - - return(CTestAction::ENone); - }; - -void CTestBase::OutputEncodingL(CConsoleBase& aConsole, TDesC8& aData) - { - aConsole.Printf(_L("Encoding: Length = ")); - TBuf<20> bits; - bits.AppendNum(aData.Length()); - bits.Append(_L(", data = ")); - aConsole.Printf(bits); - - TInt size = aData.Length(); - for (TInt i = 0; i < size; ++i) - { - TBuf<10> tbuf; - tbuf.AppendNumFixedWidth(aData[i], EHex, 2); - aConsole.Printf(tbuf); - } - - aConsole.Printf(_L("\n")); - } - -TBool CTestBase::CountTests(TInt &totalTests) - { - CTestParameter* test; - TInt totalRandomTests = 0; - TInt totalParameters = 0; - TInt totalRangeTests = 0; - - totalTests=0; - - // counts number of tests to do for type - for(TInt pos = 0; pos < iValues->Count(); pos++) - { - test = (*iValues)[pos]; - switch(test->GetType()) - { - case CTestParameter::EInt : - case CTestParameter::EString : - { - totalTests++; - totalParameters++; - break; - } - case CTestParameter::EIntRange : - { - CIntRangeTestParameter *rangeInt = REINTERPRET_CAST(CIntRangeTestParameter*, test); - totalRangeTests += rangeInt->Range(); - totalParameters++; - break; - } - case CTestParameter::ERandom : - { - CRandomTestParameter *randomInt = REINTERPRET_CAST(CRandomTestParameter*, test); - - totalRandomTests+= randomInt->Interations(); - break; - } - }; - }; - - // only count each test once, remember each test can only have one parameter field of - // range or random - totalTests = totalRandomTests + totalRangeTests + (totalParameters / iParameters->Count()); - // checks if tests correct number of parameters for type - return((totalParameters % iParameters->Count()) == 0); - }; +/* +* Copyright (c) 2001-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: +* Defines methods common to all test classes +* +*/ + + +#include +#include "testbase.h" +#include "t_input.h" + +_LIT(KParametersStart, ""); +_LIT(KValuesStart, ""); +_LIT(KRandomStart, ""); +const TInt KMaxValuesSize = 1024; + + +CTestBase::CTestBase(CASN1NormalTest &aASN1Action) +: iASN1Action(aASN1Action) + { + } + +CTestBase::~CTestBase() + { + iParameters->Close(); + delete iParameters; + iValues->ResetAndDestroy(); + delete iValues; + }; + +CTestAction::TScriptError CTestBase::ConstructL(const TTestActionSpec& aTestActionSpec) + { + CTestAction::TScriptError syntaxError; + iParameters = new (ELeave)RArray; + iValues = new (ELeave)RPointerArray; + FillParameterArray(); + + HBufC* aBody = HBufC::NewLC(aTestActionSpec.iActionBody.Length()); + + aBody->Des().Copy(aTestActionSpec.iActionBody); + TPtrC parameters(Input::ParseElement(*aBody, KParametersStart)); + + syntaxError = CheckValueParametersL(parameters); + if(syntaxError==CTestAction::ENone) + syntaxError = CheckRandomParametersL(parameters); + + CleanupStack::PopAndDestroy(); + return(syntaxError); + } + + +CTestAction::TScriptError CTestBase::CheckValueParametersL(const TDesC& aParameters) + { + TInt dummyPos = 0, valuePos = 0, lastDummy = 0; + TBuf singleValue; + CTestParameter *testParameter=0; + TBuf values; + + // finds values to run test with + do + { + lastDummy = dummyPos; + values = Input::ParseElement(aParameters, KValuesStart, dummyPos); + + // finds the next group of value + if(lastDummy != dummyPos) + { + // parses each value in group with its expeced type + for(TInt parameter = 0; parameter < iParameters->Count(); parameter++) + { + testParameter = NULL; + // checks if its last parameter + if(parameter < iParameters->Count() - 1) + { + // finds it position + valuePos = values.Find((_L(","))); + if(valuePos > 0) + { + // fills singleValue with value + if(valuePos > KMaxValueSize) + { + iSyntaxErrorDescription.Copy(_L("value too long")); + return(CTestAction::ESyntax); + } + singleValue.Copy(values.Left(valuePos)); + values = values.Mid(valuePos + 1); + } + else + { + // couldnt find it there is a problem + iSyntaxErrorDescription.Copy(_L("Invalid number of parameters")); + return(CTestAction::ESyntax); + }; + } + else + { + // its the last value fill singleValue with it + if(values.Length() > KMaxValueSize) + { + iSyntaxErrorDescription.Copy(_L("value too long")); + return(CTestAction::ESyntax); + } + singleValue.Copy(values); + }; + + // trims any white space + singleValue.Trim(); + // checks what type its supposed to be + switch((*iParameters)[parameter]) + { + case CTestParameter::EInt: + { + // its an int, check to see if its a range + if(singleValue.Find(_L("..")) == KErrNotFound) + testParameter = CIntTestParameter::NewL(singleValue); + else + testParameter = CIntRangeTestParameter::NewL(singleValue); + break; + } + case CTestParameter::EString: + { + // its a string + testParameter = CStringTestParameter::NewL(singleValue); + break; + } + case CTestParameter::EIntRange: + case CTestParameter::ERandom: + break; // Nothing to do + }; + // if testparamer is found add it to the list + if(testParameter) + { + if(testParameter->iValid) + iValues->Append(testParameter); + else + { + delete testParameter; + iSyntaxErrorDescription.Copy(_L("Invalid value ")); + iSyntaxErrorDescription.Append(singleValue); + return(CTestAction::ESyntax); + } + } + }; + } + } + while(lastDummy != dummyPos); + + return(CTestAction::ENone); + }; + +CTestAction::TScriptError CTestBase::CheckRandomParametersL(const TDesC& aParameters) + { + TInt dummyPos = 0, lastDummy = 0; + TBuf singleValue; + CTestParameter *testParameter=0; + TBuf values; + + // finds any random tests + do + { + lastDummy = dummyPos; + values = Input::ParseElement(aParameters, KRandomStart, dummyPos); + + if(lastDummy != dummyPos) + { + if(values.Length() > KMaxValueSize) + { + iSyntaxErrorDescription.Copy(_L("value too long")); + return(CTestAction::ESyntax); + } + singleValue.Copy(values); + // found one create a random parameter with its interators + testParameter = CRandomTestParameter::NewL(singleValue); + // adds it to list + if(testParameter) + { + if(testParameter->iValid) + iValues->Append(testParameter); + else + { + delete testParameter; + iSyntaxErrorDescription.Copy(_L("Invalid value ")); + iSyntaxErrorDescription.Append(singleValue); + return(CTestAction::ESyntax); + } + } + } + } + while(lastDummy != dummyPos); + + return(CTestAction::ENone); + }; + +void CTestBase::OutputEncodingL(CConsoleBase& aConsole, TDesC8& aData) + { + aConsole.Printf(_L("Encoding: Length = ")); + TBuf<20> bits; + bits.AppendNum(aData.Length()); + bits.Append(_L(", data = ")); + aConsole.Printf(bits); + + TInt size = aData.Length(); + for (TInt i = 0; i < size; ++i) + { + TBuf<10> tbuf; + tbuf.AppendNumFixedWidth(aData[i], EHex, 2); + aConsole.Printf(tbuf); + } + + aConsole.Printf(_L("\n")); + } + +TBool CTestBase::CountTests(TInt &totalTests) + { + CTestParameter* test; + TInt totalRandomTests = 0; + TInt totalParameters = 0; + TInt totalRangeTests = 0; + + totalTests=0; + + // counts number of tests to do for type + for(TInt pos = 0; pos < iValues->Count(); pos++) + { + test = (*iValues)[pos]; + switch(test->GetType()) + { + case CTestParameter::EInt : + case CTestParameter::EString : + { + totalTests++; + totalParameters++; + break; + } + case CTestParameter::EIntRange : + { + CIntRangeTestParameter *rangeInt = REINTERPRET_CAST(CIntRangeTestParameter*, test); + totalRangeTests += rangeInt->Range(); + totalParameters++; + break; + } + case CTestParameter::ERandom : + { + CRandomTestParameter *randomInt = REINTERPRET_CAST(CRandomTestParameter*, test); + + totalRandomTests+= randomInt->Interations(); + break; + } + }; + }; + + // only count each test once, remember each test can only have one parameter field of + // range or random + totalTests = totalRandomTests + totalRangeTests + (totalParameters / iParameters->Count()); + // checks if tests correct number of parameters for type + return((totalParameters % iParameters->Count()) == 0); + }; +