contenthandling/webrecognisers/Test/t_recogtest/crectestengine.cpp
changeset 0 2e3d3ce01487
equal deleted inserted replaced
-1:000000000000 0:2e3d3ce01487
       
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #include "crectestengine.h"
       
    17 #include "crectestlogger.h"
       
    18 
       
    19 _LIT(KTxtRecogTestTitle, "Application-Protocols Recognisers Test Harness");
       
    20 _LIT8(KTxtSeparator, "********************************************");
       
    21 
       
    22 CRecTestEngine* CRecTestEngine::NewL()
       
    23 	{
       
    24 	CRecTestEngine* self = new(ELeave) CRecTestEngine();
       
    25 	CleanupStack::PushL(self);
       
    26 	self->ConstructL();
       
    27 	CleanupStack::Pop(self);
       
    28 	return self;
       
    29 	}
       
    30 	
       
    31 CRecTestEngine::~CRecTestEngine()
       
    32 	{
       
    33 	delete iLogger;
       
    34 	iEcomSession.Close();
       
    35 	iPluginArray.ResetAndDestroy();
       
    36 	iTestArray.ResetAndDestroy();
       
    37 	iFailedTests.ResetAndDestroy();
       
    38 	iTest.Close();
       
    39 	iAppArcSession.Close();
       
    40 	}
       
    41 	
       
    42 CRecTestEngine::CRecTestEngine()
       
    43 : iTest(KTxtRecogTestTitle())
       
    44 	{
       
    45 	iTest.Title();
       
    46 	}
       
    47 	
       
    48 void CRecTestEngine::ConstructL()
       
    49 	{
       
    50 	// Create logger and connection to apparc
       
    51 	iLogger = CRecTestLogger::NewL();
       
    52 	User::LeaveIfError(iAppArcSession.Connect());
       
    53 	
       
    54 	// Open an ECom session and retrieve a list of all the test plugins bases
       
    55 	// on the interface UID
       
    56 	iEcomSession = REComSession::OpenL();
       
    57 	iEcomSession.ListImplementationsL(KUidAppProtRecognisers, iPluginArray);
       
    58 	
       
    59 	TRecogTestConstructionParams params(&iAppArcSession, &iLogger->Logger());
       
    60 	
       
    61 	for(TInt ii=0; ii<iPluginArray.Count(); ++ii)
       
    62 		{
       
    63 		// Go through the plugin array and create test implementations
       
    64 		// and store in test object array
       
    65 		TUid pluginUid = iPluginArray[ii]->ImplementationUid();
       
    66 		CEComRecogTest* testPlugin = CEComRecogTest::NewL(pluginUid, params);
       
    67 		User::LeaveIfError(iTestArray.Append(testPlugin));	
       
    68 		}
       
    69 	}
       
    70 	
       
    71 void CRecTestEngine::StartTestsL()
       
    72 	{	
       
    73 
       
    74 	_LIT(KTxtSYMTestCaseID, "@SYMTestCaseID IWS-APPPROTOCOLS-RECOGNISERS-T_RECOGTEST-0001 ");
       
    75 	iLogger->Logger().Write(KTxtSYMTestCaseID());
       
    76 
       
    77 	// Loop through test plugins and execute each test case
       
    78 	for(TInt ii=0; ii<iTestArray.Count(); ++ii)
       
    79 		{
       
    80 		_LIT(KTxtTestPluginTitle, "*** Running Test Cases from... %S ***\n");
       
    81 		iTest.Printf(KTxtTestPluginTitle(), &iTestArray[ii]->TestPluginTitle());
       
    82 		iLogger->Logger().WriteFormat(KTxtTestPluginTitle(), &iTestArray[ii]->TestPluginTitle());
       
    83 		RunTestCasesFromPluginL(ii);	
       
    84 		}
       
    85 	
       
    86 	// Log test summary
       
    87 	iLogger->Logger().Write(KTxtSeparator());
       
    88 	_LIT8(KTxtTestSummary, "*** TEST SUMMARY: Total Tests: %d, Passed: %d, Failed: %d ***");
       
    89 	iLogger->Logger().WriteFormat(KTxtTestSummary(), iTestPassCount+iTestFailCount, iTestPassCount, iTestFailCount);
       
    90 	
       
    91 	// Log failed tests
       
    92 	const TInt failedTestCount = iFailedTests.Count();
       
    93 	if(failedTestCount>0)
       
    94 		{
       
    95 		_LIT(KTxtFailedTests, "Failed tests...");
       
    96 		_LIT(KTxtFailedTestLists, "   Test %d - %S, failed with error %d");
       
    97 		iLogger->Logger().Write(KTxtFailedTests());
       
    98 		for(TInt ii=0; ii<failedTestCount; ++ii)
       
    99 			{
       
   100 			TFailedRecTest failedTest = *iFailedTests[ii];
       
   101 			iLogger->Logger().WriteFormat(KTxtFailedTestLists(), failedTest.iTestNumber, &failedTest.iTestTitle, failedTest.iError);
       
   102 			}
       
   103 		}
       
   104 	}
       
   105 
       
   106 void CRecTestEngine::RunTestCasesFromPluginL(TInt aPluginIndex)
       
   107 	{
       
   108 	// Execute each test case in the specified plugin (aPluginIndex)
       
   109 	const TInt testCaseCount = iTestArray[aPluginIndex]->TestCaseCount();
       
   110 	for(TInt ii=0; ii<testCaseCount; ++ii)
       
   111 		{
       
   112 		++iCurrentTest;
       
   113 		iTest.Start(iTestArray[aPluginIndex]->TestCaseTitle(ii));
       
   114 		iLogger->Logger().Write(KTxtSeparator());
       
   115 		_LIT(KTxtTestCaseTitle, "Running Test %d... %S");
       
   116 		iCurrentTestTitle = &iTestArray[aPluginIndex]->TestCaseTitle(ii);
       
   117 		iLogger->Logger().WriteFormat(KTxtTestCaseTitle(), iCurrentTest, iCurrentTestTitle);
       
   118 		TRAPD(err, iTestArray[aPluginIndex]->RunTestCaseL(ii));
       
   119 		ProcessTestResultL(err);
       
   120 		iTest.End();
       
   121 		}
       
   122 	}
       
   123 	
       
   124 void CRecTestEngine::ProcessTestResultL(TInt aError)
       
   125 	{
       
   126 	if(aError==KErrNone)
       
   127 		{
       
   128 		_LIT(KTxtTestPassed, "TEST PASSED");
       
   129 		iLogger->Logger().Write(KTxtTestPassed());
       
   130 		++iTestPassCount;
       
   131 		}
       
   132 	else
       
   133 		{
       
   134 		// Add test to failed tests list
       
   135 		TFailedRecTest* failedTest = new(ELeave) TFailedRecTest(iCurrentTest, iCurrentTestTitle, aError);
       
   136 		CleanupStack::PushL(failedTest);
       
   137 		User::LeaveIfError(iFailedTests.Append(failedTest));
       
   138 		CleanupStack::Pop(failedTest);
       
   139 		
       
   140 		// Log and display failed test
       
   141 		_LIT(KTxtTestFailed, "TEST FAILED with Error %d");
       
   142 		iLogger->Logger().WriteFormat(KTxtTestFailed(), aError);
       
   143 		_LIT(KTxtRTestFailed, "RTEST: FAIL : Failed with error %d\n");
       
   144 		iTest.Printf(KTxtRTestFailed(), aError);
       
   145 		++iTestFailCount;
       
   146 		}
       
   147 	}