|
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 } |