diff -r 3406c99bc375 -r 07b41fa8d1dd stif/DemoModule/src/Demomodulecases.cpp --- a/stif/DemoModule/src/Demomodulecases.cpp Thu Jul 15 20:25:38 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,495 +0,0 @@ -/* -* Copyright (c) 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: This module contains the implementation of -* CTestModuleDemo class member functions that does the actual -* tests. -* -*/ - -// INCLUDE FILES -#include -#include "DemoModule.h" - -// EXTERNAL DATA STRUCTURES -// None - -// EXTERNAL FUNCTION PROTOTYPES -// None - -// CONSTANTS -// None - -// MACROS -// None - -// LOCAL CONSTANTS AND MACROS -// None - -// MODULE DATA STRUCTURES -// None - -// LOCAL FUNCTION PROTOTYPES -// None - -// FORWARD DECLARATIONS -// None - -// ==================== LOCAL FUNCTIONS ======================================= - -// ============================ MEMBER FUNCTIONS =============================== - -/* -------------------------------------------------------------------------------- - - Class: CDemoModule - - Method: Case - - Description: Returns a test case by number. - - This function contains an array of all available test cases - i.e pair of case name and test function. If case specified by parameter - aCaseNumber is found from array, then that item is returned. - - The reason for this rather complicated function is to specify all the - test cases only in one place. It is not necessary to understand how - function pointers to class member functions works when adding new test - cases. See function body for instructions how to add new test case. - - Parameters: const TInt aCaseNumber :in: Test case number - - Return Values: const TCaseInfo Struct containing case name & function - - Errors/Exceptions: None - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -const TCaseInfo CDemoModule::Case ( - const TInt aCaseNumber ) const - { - - /* - * To add new test cases, implement new test case function and add new - * line to KCases array specify the name of the case and the function - * doing the test case - * In practice, do following - * - * 1) Make copy of existing test case function and change its name - * and functionality. Note that the function must be added to - * OOMHard.cpp file and to OOMHard.h - * header file. - * - * 2) Add entry to following KCases array either by using: - * - * 2.1: FUNCENTRY or ENTRY macro - * ENTRY macro takes two parameters: test case name and test case - * function name. - * - * FUNCENTRY macro takes only test case function name as a parameter and - * uses that as a test case name and test case function name. - * - * Or - * - * 2.2: OOM_FUNCENTRY or OOM_ENTRY macro. Note that these macros are used - * only with OOM (Out-Of-Memory) testing! - * - * OOM_ENTRY macro takes five parameters: test case name, test case - * function name, TBool which specifies is method supposed to be run using - * OOM conditions, TInt value for first heap memory allocation failure and - * TInt value for last heap memory allocation failure. - * - * OOM_FUNCENTRY macro takes test case function name as a parameter and uses - * that as a test case name, TBool which specifies is method supposed to be - * run using OOM conditions, TInt value for first heap memory allocation - * failure and TInt value for last heap memory allocation failure. - */ - - static TCaseInfoInternal const KCases[] = - { - // To add new test cases, add new items to this array - - // NOTE: When compiled to GCCE, there must be Classname:: - // declaration in front of the method name, e.g. - // CDemoModule::PrintTest. Otherwise the compiler - // gives errors. - - ENTRY( "Loop test", CDemoModule::LoopTest ), - ENTRY( "Simple math test", CDemoModule::SimpleMathTest ), - ENTRY( "Math test", CDemoModule::MathTest ), - ENTRY( "Print test", CDemoModule::PrintTest ), - // Example how to use OOM functionality - OOM_ENTRY( "Heap memory allocation with OOM (aborts)", CDemoModule::HeapMemoryAllocation, ETrue, 1, 2 ), - ENTRY( "Heap memory allocation (passes)", CDemoModule::HeapMemoryAllocation ) - }; - - // Verify that case number is valid - if( (TUint) aCaseNumber >= sizeof( KCases ) / - sizeof( TCaseInfoInternal ) ) - { - - // Invalid case, construct empty object - TCaseInfo null( (const TText*) L"" ); - null.iMethod = NULL; - null.iIsOOMTest = EFalse; - null.iFirstMemoryAllocation = 0; - null.iLastMemoryAllocation = 0; - return null; - - } - - // Construct TCaseInfo object and return it - TCaseInfo tmp ( KCases[ aCaseNumber ].iCaseName ); - tmp.iMethod = KCases[ aCaseNumber ].iMethod; - tmp.iIsOOMTest = KCases[ aCaseNumber ].iIsOOMTest; - tmp.iFirstMemoryAllocation = KCases[ aCaseNumber ].iFirstMemoryAllocation; - tmp.iLastMemoryAllocation = KCases[ aCaseNumber ].iLastMemoryAllocation; - return tmp; - - } - -/* -------------------------------------------------------------------------------- - - Class: CDemoModule - - Method: SimpleMathTest - - Description: Simple Math testing. - - Parameters: TTestResult& aErrorDescription: out: - Test result and on error case a short description of error - - Return Values: TInt: Always KErrNone to indicate that test was valid - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -TInt CDemoModule::SimpleMathTest( TTestResult& aResult ) - { - /* Test with mathematic calculations and printing */ - _LIT( KDefinion , "RunTestCase"); - _LIT( KData , "Simple Math calculations"); - TestModuleIf().Printf( 0, KDefinion, KData ); - - // Random number. - TReal num = Math::Random(); - // Intermediate result - TReal sqrt = 0; - // Result - TReal result = 0; - - // Take square root of the number - TInt ret = Math::Sqrt( sqrt, num ); - if( ret != KErrNone ) - { - // Return error if Sqrt failed - _LIT( KResult ,"Math::Sqrt failed"); - aResult.iResultDes.Copy( KResult ); - aResult.iResult = KErrGeneral; - - // Case was executed but failed - return KErrNone; - } - - // Take power of two from the previous result - ret = Math::Pow( result, sqrt, 2 ); - if( ret != KErrNone ) - { - // Return error if Pow failed - _LIT( KResult ,"Math::Pow failed"); - aResult.iResultDes.Copy( KResult ); - aResult.iResult = KErrGeneral; - - // Case was executed but failed - return KErrNone; - } - - // Compare final result to the original value, - // rounded values should usually be same. - TInt32 a1; - TInt32 a2; - TInt r = Math::Int(a1, result); - - if (r != KErrNone ) - { - _LIT( KResult ,"1st conversion failed"); - aResult.iResultDes.Copy( KResult ); - aResult.iResult = r; - return KErrNone; - } - - r = Math::Int(a2, num); - if (r != KErrNone ) - { - _LIT( KResult ,"2nd conversion failed"); - aResult.iResultDes.Copy( KResult ); - aResult.iResult = r; - return KErrNone; - } - - if( a1 != a2 ) - { - _LIT( KResult ,"Calculation doesn't match"); - // Return error if comparison failed - aResult.iResultDes.Copy( KResult ); - aResult.iResult = KErrGeneral; - // Case was executed but failed - return KErrNone; - } - - - // Test case passed - - // Sets test case result and description(Maximum size is KStifMaxResultDes) - _LIT( KDescription , "Test case passed"); - aResult.SetResult( KErrNone, KDescription ); - //aResult.iResult = KErrNone; - //aResult.iResultDes = KDescription; - - // Case was executed - return KErrNone; - - } - -/* -------------------------------------------------------------------------------- - - Class: CDemoModule - - Method: MathTest - - Description: Print loop test. Actually does not test anything, just - demonstrate how to print. Test is always pased. - - Parameters: TTestResult& aErrorDescription: out: - Test result and on error case a short description of error - - Return Values: TInt: Always KErrNone to indicate that test was valid - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -TInt CDemoModule::LoopTest( TTestResult& aResult ) - { - - /* Simple print and wait loop */ - _LIT( KDefinion ,"State"); - _LIT( KData ,"Looping"); - TestModuleIf().Printf( 0, KDefinion, KData ); - for( TInt i=0; i<10; i++) - { - _LIT( KRunning ,"Running"); - _LIT( KLoop ,"%d"); - TestModuleIf().Printf( 0, KRunning, KLoop, i); - User::After( 1000000 ); - } - _LIT( KData2 ,"Finished"); - TestModuleIf().Printf( 0, KDefinion, KData2 ); - - // Test case passed - - // Sets test case result and description(Maximum size is KStifMaxResultDes) - _LIT( KDescription , "Test case passed"); - aResult.SetResult( KErrNone, KDescription ); - //aResult.iResult = KErrNone; - //aResult.iResultDes = KDescription; - - // Case was executed - return KErrNone; - } - -/* -------------------------------------------------------------------------------- - - Class: CDemoModule - - Method: MathTest - - Description: Math testing. - - Parameters: TTestResult& aErrorDescription: out: - Test result and on error case a short description of error - - Return Values: TInt: Always KErrNone to indicate that test was valid - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -TInt CDemoModule::MathTest( TTestResult& aResult ) - { - /* Test with mathematic calculations and printing */ - _LIT( KDefinion ,"RunTestCase"); - _LIT( KData ,"Math calculations"); - TestModuleIf().Printf( 0, KDefinion, KData ); - // Result - TRealX res; - // Random numbers - TInt rand[6]; - TRealX coef[5]; - TInt i; - TInt j; - for( i=0; i<10; i++ ) - { - for(j=0; j<6; j++) - rand[j] = Math::Random(); - for(j=0; j<5; j++) - coef[j] = rand[j]; - Math::PolyX(res, rand[5], 5, coef ); - - _LIT( KResult ,"Result %d"); - TestModuleIf().Printf( 0, KDefinion, KResult, ( TInt )res); - } - - // Test case passed - - // Sets test case result and description(Maximum size is KStifMaxResultDes) - _LIT( KDescription , "Test case passed"); - aResult.SetResult( KErrNone, KDescription ); - //aResult.iResult = KErrNone; - //aResult.iResultDes = KDescription; - - // Case was executed - return KErrNone; - - } - -/* -------------------------------------------------------------------------------- - - Class: CDemoModule - - Method: PrintTest - - Description: Printing testing. - - Parameters: TTestResult& aErrorDescription: out: - Test result and on error case a short description of error - - Return Values: TInt: Always KErrNone to indicate that test was valid - - Errors/Exceptions: None - - Status: Approved - -------------------------------------------------------------------------------- -*/ -TInt CDemoModule::PrintTest( TTestResult& aResult ) - { - /* Tests printing with high intencity and different priority */ - _LIT( KDefinion ,"CTestModuleDemo::RunTestCase"); - _LIT( KData ,"Heavy print looping"); - TestModuleIf().Printf( 0, KDefinion, KData ); - TInt j; - for( TInt i=0; i<10; i++) - { - - for(j=0; j<2; j++) - { - _LIT( KTmp ,"RunTestCase"); - TBuf<15> tmp; - tmp.Copy( KTmp ); - tmp.AppendNum( j ); - _LIT( KNewData ,"p"); - TestModuleIf().Printf(3, tmp, KNewData ); - } - - for(j=0; j<500; j++) - { - _LIT( KNewDefinion ,"RunTestCase"); - _LIT( KNewData ,"%c"); - TestModuleIf().Printf(1+(Math::Random() % 12), - KNewDefinion, - KNewData, 'a'+(j%('z'-'a')) ); - } - - _LIT( KNewDefinion ,"RunTestCase"); - _LIT( KNewData ,"Running %d"); - TestModuleIf().Printf( 2, KNewDefinion,KNewData, i); - User::After( 1000000 ); - } - - // Test case passed - - // Sets test case result and description(Maximum size is KStifMaxResultDes) - _LIT( KDescription , "Test case passed"); - aResult.SetResult( KErrNone, KDescription ); - //aResult.iResult = KErrNone; - //aResult.iResultDes = KDescription; - - // Case was executed - return KErrNone; - - } - -/* -------------------------------------------------------------------------------- - - Class: CDemoModule - - Method: HeapMemoryAllocation - - Description: Allocates heap descriptor. - - Parameters: TTestResult& aError - - Return Values: TInt - - Errors/Exceptions: Leaves with KErrNoMemory if heap allocation fails - - Status: Proposal - -------------------------------------------------------------------------------- -*/ -TInt CDemoModule::HeapMemoryAllocation( TTestResult& aResult ) - { - _LIT( KLogInfo , "CDemoModule::HeapMemoryAllocation" ); - iLog->Log( KLogInfo ); - - // Allocate heap descriptor - HBufC * buffer = HBufC::New( 10 ); - if( buffer == NULL ) - { - // Allocation failed - _LIT( KNewLogInfo , "buffer was NULL"); - iLog->Log( KNewLogInfo ); - User::Leave( KErrNoMemory ); - } - else - { - // Descriptor creation was ok - _LIT( KNewLogInfo ,"buffer was allocated properly" ); - iLog->Log( KNewLogInfo ); - } - - delete buffer; - - _LIT( KDescription , "Test case passed"); - aResult.SetResult( KErrNone, KDescription ); - return KErrNone; - } - -// ================= OTHER EXPORTED FUNCTIONS ================================= - -// End of File