diff -r 753e33780645 -r 453d490c84a5 testfwuis/symbianunittestui/qt/testrunner_s60.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testfwuis/symbianunittestui/qt/testrunner_s60.cpp Fri Sep 17 08:58:49 2010 +0300 @@ -0,0 +1,257 @@ +/* + * Copyright (c) 2010 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: Symbian C++ test runner Class. + * + */ +#include "testrunner_s60.h" +#include "symbianunittestrunner.h" +#include "widgettestrunner.h" +_LIT( KOutputFileName, "SymbianUnitTestResults" ); +_LIT( KDefaultOutputFormat, "html" ); + +TestRunnerPrivate* TestRunnerPrivate::NewLC(WidgetTestRunner* aPublicApi) + { + TestRunnerPrivate* self = new (ELeave) TestRunnerPrivate(aPublicApi); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +TestRunnerPrivate* TestRunnerPrivate::NewL(WidgetTestRunner* aPublicApi) + { + TestRunnerPrivate* self = TestRunnerPrivate::NewLC(aPublicApi); + CleanupStack::Pop(self); + return self; + } + +TestRunnerPrivate::TestRunnerPrivate(WidgetTestRunner* aPublicApi) : + CActive(EPriorityStandard), d_ptr(aPublicApi), iTimeout( + KSymbianUnitTestDefaultTimeout) + { + } + +void TestRunnerPrivate::ConstructL() + { + User::SetJustInTime(EFalse); // Do not stop on test case panics + + iTestDllNames = new (ELeave) CDesCArrayFlat(1); + iTestCaseNames = new (ELeave) CDesCArrayFlat(1); + iOutputFormat = KDefaultOutputFormat().AllocL(); + CActiveScheduler::Add(this); + } + +TestRunnerPrivate::~TestRunnerPrivate() + { + Cancel(); + delete iTestDllNames; + delete iTestCaseNames; + delete iOutputFormat; + } + +// ----------------------------------------------------------------------------- +// From MSymbianUnitTestUiCallBack +// ----------------------------------------------------------------------------- +// +void TestRunnerPrivate::InfoMsg(const TDesC& aMessage) + { + QString msg = QString::fromUtf16(aMessage.Ptr(), aMessage.Length()); + emit d_ptr->infoMsgReceived(msg); + } + +int TestRunnerPrivate::SetTestDllNames(const QStringList& aDllNames) + { + TRAPD(err, SetTestDllNamesL(aDllNames)); + return err; + } + +int TestRunnerPrivate::SetTestCaseNames(const QStringList& aCaseNames) + { + TRAPD(err, SetTestCaseNamesL(aCaseNames)); + return err; + } + +int TestRunnerPrivate::SetOutputFormat(const QString& aFmt) + { + TRAPD(err, SetOutputFormatL(aFmt)); + return err; + } + +int TestRunnerPrivate::ListTestCases(const QString& aDllName, QStringList& aCaseNames) + { + TRAPD(err, ListTestCasesL(aDllName, aCaseNames)); + return err; + } + +// ----------------------------------------------------------------------------- +// From MSymbianUnitTestUiCallBack +// ----------------------------------------------------------------------------- +// +void TestRunnerPrivate::InfoMsg(const TDesC& aFormat, const TDesC& aMessage) + { + // iConsole->Printf( aFormat, &aMessage ); + } + +void TestRunnerPrivate::TestsCount() + { + + } + +void TestRunnerPrivate::TestsExecuted() + { + emit d_ptr->testExecuted(iPassedTestsCount + iFailedTestsCount); + } + +void TestRunnerPrivate::SetTestDllNamesL(const QStringList& aDllNames) + { + if (!aDllNames.isEmpty()) + { + CDesCArray* testDllNames = new (ELeave) CDesCArrayFlat(1); + CleanupStack::PushL(testDllNames); + foreach (QString tmp, aDllNames) + { + TPtrC myDescriptor(static_cast (tmp.utf16()), + tmp.length()); + HBufC* buffer = myDescriptor.AllocL(); + testDllNames->AppendL(buffer->Des()); + } + delete iTestDllNames; + iTestDllNames = testDllNames; + CleanupStack::Pop(testDllNames); + } + } + +void TestRunnerPrivate::SetTestCaseNamesL(const QStringList& aNames) + { + if (!aNames.isEmpty()) + { + CDesCArray* testCaseNames = new (ELeave) CDesCArrayFlat(1); + CleanupStack::PushL(testCaseNames); + foreach (QString tmp, aNames) + { + TPtrC myDescriptor(static_cast (tmp.utf16()), + tmp.length()); + HBufC* buffer = myDescriptor.AllocL(); + testCaseNames->AppendL(buffer->Des()); + } + delete iTestCaseNames; + iTestCaseNames = testCaseNames; + CleanupStack::Pop(testCaseNames); + } + } + +void TestRunnerPrivate::SetAllocFailureSimulation(const TBool aSimulation) + { + iAllocFailureSimulation = aSimulation; + } + +void TestRunnerPrivate::SetTimeout(const TInt aTimeout) + { + iTimeout = aTimeout; + } + +void TestRunnerPrivate::SetOutputFormatL(const QString& aFormat) + { + TPtrC outputFormatPtr(aFormat.utf16()); + HBufC* outputFormat = outputFormatPtr.AllocL(); + delete iOutputFormat; + iOutputFormat = outputFormat; + } + +void TestRunnerPrivate::RunL() + { + iTestRunner = CSymbianUnitTestRunner::NewL(*this); + iPassedTestsCount = 0; + iFailedTestsCount = 0; + TRAPD(err, iTestRunner->ExecuteTestsL(*iTestDllNames, + iAllocFailureSimulation, + KOutputFileName, + *iOutputFormat, + *iTestCaseNames, + iTimeout)); + if (err != KErrNone) + { + emit d_ptr->errorOccurred(err); + } + delete iTestRunner; + iTestRunner = NULL; + } + +// ----------------------------------------------------------------------------- +// From CActive +// ----------------------------------------------------------------------------- +// +void TestRunnerPrivate::DoCancel() + { + } + +void TestRunnerPrivate::RunTests() + { + // Set ready to run immediately + TRequestStatus *status = &iStatus; + User::RequestComplete(status, KErrNone); + if (!IsActive()) + { + SetActive(); + } + } + +void TestRunnerPrivate::ListTestCasesL(const QString& aDllName, + QStringList& aTestCases) + { + iTestRunner = CSymbianUnitTestRunner::NewL(*this); + TPtrC dllName(static_cast (aDllName.utf16()), + aDllName.length()); + CDesCArray* testCaseNames = new (ELeave) CDesCArrayFlat(1); + CleanupStack::PushL(testCaseNames); + iTestRunner->TestCaseNamesL(dllName, *testCaseNames); + for (int i = 0; i < testCaseNames->Count(); ++i) + { + aTestCases << QString::fromUtf16((*testCaseNames)[i].Ptr(), + (*testCaseNames)[i].Length()); + } + CleanupStack::PopAndDestroy(testCaseNames); + delete iTestRunner; + iTestRunner = NULL; + } + +// ----------------------------------------------------------------------------- +// From MSymbianUnitTestUiCallBack +// ----------------------------------------------------------------------------- +// +void TestRunnerPrivate::TestPass(const TDesC& aTestCaseName) + { + QString caseName = QString::fromUtf16(aTestCaseName.Ptr(), + aTestCaseName.Length()); + emit + d_ptr->infoMsgReceived(caseName); + emit + d_ptr->testPassed(++iPassedTestsCount); + TestsExecuted(); + } + +// ----------------------------------------------------------------------------- +// From MSymbianUnitTestUiCallBack +// ----------------------------------------------------------------------------- +// +void TestRunnerPrivate::TestFailed(const TDesC& aTestCaseName, + const TDesC8& aErrMsg) + { + QString caseName = QString::fromUtf16(aTestCaseName.Ptr(), + aTestCaseName.Length()); + QString reason = QString::fromUtf8( + reinterpret_cast (aErrMsg.Ptr()), aErrMsg.Length()); + emit + d_ptr->testFailed(caseName, reason, ++iFailedTestsCount); + TestsExecuted(); + }