Revision: 201035
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 17 Sep 2010 08:28:43 +0300
changeset 37 e9675fb210bd
parent 34 01f0bb65bcf1
child 39 4bcc59142325
Revision: 201035 Kit: 201037
mmsharing/Conf/bld.inf
mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/main.cpp
mmsharing/livecommsui/lcui/tsrc/ut_lcui/ut_lcui.pro
mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/src/main.cpp
mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/ut_lcuieng.pro
mmsharing/mmshapp/tsrc/ut_mmshapp/src/main.cpp
mmsharing/mmshapp/tsrc/ut_mmshapp/ut_mmshapp.pro
mmsharing/mmshengine/src/musengcamerahandler.cpp
package_definition.xml
package_map.xml
rom/bld.inf
tsrc/qtestutils/inc/testresultxmlparser.h
tsrc/qtestutils/inc/testrunner.h
tsrc/qtestutils/src/testresultxmlparser.cpp
tsrc/qtestutils/src/testrunner.cpp
tsrc/unittestrunner/unittest_qt_config.txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsharing/Conf/bld.inf	Fri Sep 17 08:28:43 2010 +0300
@@ -0,0 +1,31 @@
+/*
+* 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:  Exports for mmsharing
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+../mmshshared/loc/mus.loc APP_LAYER_LOC_EXPORT_PATH(mus.loc)
+../mmshshared/loc/musoperator.loc APP_LAYER_LOC_EXPORT_PATH(musoperator.loc)
+multimediasharing.confml APP_LAYER_CONFML(multimediasharing.confml)
+multimediasharing_1028238B.crml APP_LAYER_CRML(multimediasharing_1028238B.crml)
+../cenrep/backup_registration.xml  /epoc32/data/z/private/1028238D/backup_registration.xml
+
--- a/mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/main.cpp	Thu Sep 02 20:23:40 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/src/main.cpp	Fri Sep 17 08:28:43 2010 +0300
@@ -21,7 +21,7 @@
 #include "ut_lcview.h"
 #include "ut_lceffecthandler.h"
 #include "ut_lcvideowidget.h"
-#include "testresultxmlparser.h"
+#include "testrunner.h"
 #include <qapplication.h>
 #include <QtTest/QtTest>
 #include <stdio.h>
@@ -29,55 +29,40 @@
 #include <QFile>
 #include <QTextStream>
 
-#define UT_ARGS( args, file )\
-    QStringList args( "ut_lcui");\
-    args << "-silent" << "-xml" << "-o" << file
-
 int main(int argc, char *argv[]) 
 {
-    bool promptOnExit(true);
-    for (int i=0; i<argc; i++) {
-        if (QString(argv[i]) == "-noprompt")
-            promptOnExit = false;
+    printf("Running tests...\n");
+            
+    QApplication app(argc, argv);
+    QStringList args = app.arguments();
+    QString combinedOutputFileName;
+    for ( int i = 0; i < args.count(); i++ ){
+        QString arg = args.at(i);
+        if ( arg == QString("-o") && i + 1 < args.count() ){
+            i++;
+            combinedOutputFileName = args.at(i);
+        }
     }
-    printf("Running tests...\n");
-    QApplication app(argc, argv);
-    TestResultXmlParser parser;
+    
+    TestRunner testRunner("LcUi", combinedOutputFileName);
     
     UT_LcUiViewManager ut_lcViewManager;
-    QString resultFileName = "c:/ut_lcui_LcViewManager.xml";
-    UT_ARGS( args_lcViewManager, resultFileName );
-    QTest::qExec( &ut_lcViewManager, args_lcViewManager );
-    parser.parseAndPrintResults(resultFileName);
-    
+    testRunner.runTests(ut_lcViewManager);
+   
     UT_LcUiComponentRepository ut_lcUiComponentRepository;
-    resultFileName = "c:/ut_lcui_LcUiComponentRepository.xml";
-    UT_ARGS( args_lcUiComponentRepository, resultFileName );
-    QTest::qExec( &ut_lcUiComponentRepository, args_lcUiComponentRepository );
-    parser.parseAndPrintResults(resultFileName);
+    testRunner.runTests(ut_lcUiComponentRepository);
  
     UT_LcView ut_lcView;
-    resultFileName = "c:/ut_lcui_LcView.xml";
-    UT_ARGS( args_lcView, resultFileName ); 
-    QTest::qExec( &ut_lcView, args_lcView );
-    parser.parseAndPrintResults(resultFileName);
+    testRunner.runTests(ut_lcView);
     
     UT_LcEffectHandler ut_effectHandler;
-    resultFileName = "c:/ut_lcui_LcEffectHandler.xml";
-    UT_ARGS( args_lcEffectHandler, resultFileName ); 
-    QTest::qExec( &ut_effectHandler, args_lcEffectHandler );
-    parser.parseAndPrintResults(resultFileName);
+    testRunner.runTests(ut_effectHandler);
     
     UT_LcVideoWidget ut_videoWidget;
-    resultFileName = "c:/ut_lcui_LcVideoWidget.xml";
-    UT_ARGS( args_lcVideoWidget, resultFileName ); 
-    QTest::qExec( &ut_videoWidget, args_lcVideoWidget );
-    parser.parseAndPrintResults(resultFileName);
+    testRunner.runTests(ut_videoWidget);
   
-    if (promptOnExit) {
-        printf("Press any key...\n");
-        getchar(); 
-    }
+    testRunner.printResults();
+    
     return 0;
 }
 
--- a/mmsharing/livecommsui/lcui/tsrc/ut_lcui/ut_lcui.pro	Thu Sep 02 20:23:40 2010 +0300
+++ b/mmsharing/livecommsui/lcui/tsrc/ut_lcui/ut_lcui.pro	Fri Sep 17 08:28:43 2010 +0300
@@ -72,7 +72,7 @@
 SOURCES += src/ut_lcvideowidget.cpp
 SOURCES += $$LCUI_DIR/src/lcvideowidget.cpp
 SOURCES += $$LCUIENGINE_DIR/src/lcuiengine.cpp
-SOURCES += $$MUS_DIR/tsrc/qtestutils/src/testresultxmlparser.cpp
+SOURCES += $$MUS_DIR/tsrc/qtestutils/src/testrunner.cpp
 
 
 symbian: {
--- a/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/src/main.cpp	Thu Sep 02 20:23:40 2010 +0300
+++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/src/main.cpp	Fri Sep 17 08:28:43 2010 +0300
@@ -19,7 +19,7 @@
 #include <QtTest/QtTest>
 
 #include "ut_lcuiengine.h"
-#include "testresultxmlparser.h"
+#include "testrunner.h"
 
 #if defined(Q_OS_SYMBIAN)
 #include "ut_lcactivitymanager.h"
@@ -27,36 +27,31 @@
 
 int main(int argc, char *argv[]) 
 {
-    bool promptOnExit(true);
-    for (int i=0; i<argc; i++) {
-        if (QString(argv[i]) == "-noprompt")
-            promptOnExit = false;
+    printf("Running tests...\n");
+            
+    QApplication app(argc, argv);
+    QStringList args = app.arguments();
+    QString combinedOutputFileName;
+    for ( int i = 0; i < args.count(); i++ ){
+        QString arg = args.at(i);
+        if ( arg == QString("-o") && i + 1 < args.count() ){
+            i++;
+            combinedOutputFileName = args.at(i);
+        }
     }
-    printf("Running tests...\n");
     
-    QApplication app(argc, argv);
-    TestResultXmlParser parser;
+    TestRunner testRunner("LcEngine", combinedOutputFileName);
     
     UT_LcUiEngine ut_lcUiEngine;
-    QString resultFileName = "c:/ut_lcui_lcUiEngine.xml";
-    QStringList args_lcUiEngine( "ut_lcuiengine");
-    args_lcUiEngine << "-xml" << "-o" << resultFileName;
-    QTest::qExec(&ut_lcUiEngine, args_lcUiEngine);
-    parser.parseAndPrintResults(resultFileName,true); 
+    testRunner.runTests(ut_lcUiEngine);
 
 #if defined(Q_OS_SYMBIAN)
     UT_LcActivityManager ut_lcActivityManager;
-    resultFileName = "c:/ut_lcui_lcActivityManager.xml";
-    QStringList args_lcActivityManager( "ut_lcuiengine");
-    args_lcActivityManager << "-xml" << "-o" << resultFileName;
-    QTest::qExec(&ut_lcActivityManager, args_lcActivityManager);
-    parser.parseAndPrintResults(resultFileName,true); 
+    testRunner.runTests(ut_lcActivityManager);
 #endif
     
-    if (promptOnExit) {
-        printf("Press any key...\n");
-        getchar(); 
-    }
+    testRunner.printResults();
+    
     return 0;   
 }
 
--- a/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/ut_lcuieng.pro	Thu Sep 02 20:23:40 2010 +0300
+++ b/mmsharing/livecommsui/lcuiengine/tsrc/ut_lcuieng/ut_lcuieng.pro	Fri Sep 17 08:28:43 2010 +0300
@@ -45,7 +45,7 @@
 SOURCES += lcstub/src/lcsessionstub.cpp
 SOURCES += lcstub/src/lcvideoplayerstub.cpp
 SOURCES += lcstub/src/lcenginestub.cpp
-SOURCES += $$MUS_DIR/tsrc/qtestutils/src/testresultxmlparser.cpp
+SOURCES += $$MUS_DIR/tsrc/qtestutils/src/testrunner.cpp
 
 symbian: {
     INCLUDEPATH += $$LCUIENGINE_DIR/inc
--- a/mmsharing/mmshapp/tsrc/ut_mmshapp/src/main.cpp	Thu Sep 02 20:23:40 2010 +0300
+++ b/mmsharing/mmshapp/tsrc/ut_mmshapp/src/main.cpp	Fri Sep 17 08:28:43 2010 +0300
@@ -18,31 +18,30 @@
 #include <QtTest/QtTest>
 
 #include "ut_lcapplication.h"
-#include "testresultxmlparser.h"
+#include "testrunner.h"
 
 
 int main(int argc, char *argv[]) 
 {
-    bool promptOnExit(true);
-    for (int i=0; i<argc; i++) {
-        if (QString(argv[i]) == "-noprompt")
-            promptOnExit = false;
+    printf("Running tests...\n");
+            
+    QApplication app(argc, argv);
+    QStringList args = app.arguments();
+    QString combinedOutputFileName;
+    for ( int i = 0; i < args.count(); i++ ){
+        QString arg = args.at(i);
+        if ( arg == QString("-o") && i + 1 < args.count() ){
+            i++;
+            combinedOutputFileName = args.at(i);
+        }
     }
-    printf("Running tests...\n");
     
-    QApplication app(argc, argv);
-    TestResultXmlParser parser;
+    TestRunner testRunner("LcApplication", combinedOutputFileName);
     
     UT_LcApplication ut_lcApplication;
-    QString resultFileName = "c:/ut_lcapplication.xml";
-    QStringList args_lcApplication( "ut_lcapplication");
-    args_lcApplication << "-xml" << "-o" << resultFileName;
-    QTest::qExec(&ut_lcApplication, args_lcApplication);
-    parser.parseAndPrintResults(resultFileName,true); 
+    testRunner.runTests(ut_lcApplication);
+    
+    testRunner.printResults();
 
-    if (promptOnExit) {
-        printf("Press any key...\n");
-        getchar(); 
-    }
     return 0;   
 }
--- a/mmsharing/mmshapp/tsrc/ut_mmshapp/ut_mmshapp.pro	Thu Sep 02 20:23:40 2010 +0300
+++ b/mmsharing/mmshapp/tsrc/ut_mmshapp/ut_mmshapp.pro	Fri Sep 17 08:28:43 2010 +0300
@@ -39,7 +39,7 @@
 SOURCES += src/main.cpp
 SOURCES += src/ut_lcapplication.cpp
 SOURCES += $$MUSAPP_DIR/src/lcapplication.cpp
-SOURCES += $$MUS_DIR/tsrc/qtestutils/src/testresultxmlparser.cpp
+SOURCES += $$MUS_DIR/tsrc/qtestutils/src/testrunner.cpp
 
 
 symbian: {
--- a/mmsharing/mmshengine/src/musengcamerahandler.cpp	Thu Sep 02 20:23:40 2010 +0300
+++ b/mmsharing/mmshengine/src/musengcamerahandler.cpp	Fri Sep 17 08:28:43 2010 +0300
@@ -603,7 +603,6 @@
     __ASSERT_ALWAYS( iSession != NULL, User::Leave( KErrNotReady ) );
     
     CMceCameraSource* camera = MusEngMceUtils::GetCameraL( *iSession );
-    CMceDisplaySink* display = MusEngMceUtils::GetDisplayL( *iSession );
     
     if ( camera->CamerasAvailable() )
         {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_definition.xml	Fri Sep 17 08:28:43 2010 +0300
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SystemDefinition schema="3.0.0" xmlns:qt="http://www.nokia.com/qt">
+ <package id="mmsharinguis" name="Multimedia Sharing UIs" levels="base plugin if">
+  <collection id="mmsharinguis_plat" name="Multimedia Sharing UIs Platform Interfaces" level="if">
+   <component id="live_comms_plugin_api" name="Multimedia Sharing Settings API" class="api" filter="s60" introduced="^4">
+    <unit bldFile="mmsharinguis_plat/live_comms_plugin_api/group"/>
+   </component>
+   <component id="multimedia_sharing_settings_api" name="Multimedia Sharing Settings API" class="api" filter="s60">
+    <meta rel="Api" href="mmsharinguis_plat/multimedia_sharing_settings_api/multimedia_sharing_settings_api.metaxml"/>
+    <unit bldFile="mmsharinguis_plat/multimedia_sharing_settings_api/group"/>
+   </component>
+   <component id="multimedia_sharing_resource_api" name="Multimedia Sharing Resource API" class="api" filter="s60">
+    <meta rel="Api" href="mmsharinguis_plat/multimedia_sharing_resource_api/multimedia_sharing_resource_api.metaxml"/>
+    <unit bldFile="mmsharinguis_plat/multimedia_sharing_resource_api/group"/>
+   </component>
+   <component id="multimedia_sharing_manager_api" name="Multimedia Sharing Manager API" class="api" filter="s60">
+    <meta rel="Api" href="mmsharinguis_plat/multimedia_sharing_manager_api/multimedia_sharing_manager_api.metaxml"/>
+    <unit bldFile="mmsharinguis_plat/multimedia_sharing_manager_api/group" filter="!test"/>
+    <unit bldFile="mmsharinguis_plat/multimedia_sharing_manager_api/tsrc/group" filter="test,api_test"/>
+   </component>
+  </collection>
+  <collection id="mmsharing" name="Multimedia Sharing" level="base">
+   <component id="mmshavailability" filter="s60" name="Multimedia Sharing Availability">
+    <unit bldFile="mmsharing/mmshavailability/group"/>
+   </component>
+   <component id="mmshindicator" filter="s60" name="Multimedia Sharing Indicator">
+    <!-- <unit bldFile="mmsharing/mmshindicator/group"/>  -->
+   </component>
+   <!-- consider putting client and server in the same component -->
+   <component id="mmshmanagercli" filter="s60" name="Multimedia Sharing Manager Client">
+    <unit bldFile="mmsharing/mmshmanagercli/group"/>
+   </component>
+   <component id="mmshmanagersrv" filter="s60" name="Multimedia Sharing Manager Server">
+    <!-- <unit bldFile="mmsharing/mmshmanagersrv/group"/>  -->
+   </component>
+   <component id="mmshengine" filter="s60" name="Multimedia Sharing Engine">
+    <unit bldFile="mmsharing/mmshengine/group"/>
+   </component>
+   <component id="livecommsui" filter="s60" name="Live Comms UI" introduced="^4">
+    <unit bldFile="mmsharing/livecommsui" qt:proFile="livecommsui.pro"/>
+   </component>
+   <component id="mmshapp" filter="s60" name="Multimedia Sharing Application" introduced="^4">
+    <!-- can only have one unit: need to #include the bld.inf from the .pro file -->
+    <unit bldFile="mmsharing/mmshapp" qt:proFile="mmshapp.pro"/>
+    <unit bldFile="mmsharing/mmshapp/help/group"/>
+   </component>
+   <component id="mmsharing_conf" filter="s60" name="Multimedia Sharing Config" class="config">
+    <unit bldFile="mmsharing/Conf"/>
+   </component>
+  </collection>
+  <collection id="mmshplugins" name="Multimedia Sharing Plugins" level="plugin">
+   <component id="mmshaoplugin" filter="s60" name="Multimedia Sharing Always Online Plugin" class="plugin">
+    <unit bldFile="mmshplugins/mmshaoplugin/group"/>
+   </component>
+   <component id="mmshaiwplugin" filter="s60" name="Multimedia Sharing AIW Plugin" class="plugin">
+    <unit bldFile="mmshplugins/mmshaiwplugin/group"/>
+   </component>
+   <component id="mmshsipcrplugin" filter="s60" name="Multimedia Sharing SIP Client Resolver Plugin" class="plugin">
+    <unit bldFile="mmshplugins/mmshsipcrplugin/group"/>
+   </component>
+   <component id="mmshsettingsuiplugin" filter="s60" name="Multimedia Sharing Settings UI Plugin" class="plugin">
+    <!-- <unit bldFile="mmshplugins/mmshsettingsuiplugin/group"/> -->
+   </component>
+   <component id="mmshwpadapterplugin" filter="s60" name="Multimedia Sharing WAP Provisioning Adapter" class="plugin">
+    <unit bldFile="mmshplugins/mmshwpadapterplugin/group"/>
+   </component>
+   <component id="mmcctranscoder" filter="s60" name="MCC Transcoder" class="plugin" introduced="^4">
+    <!--<unit bldFile="mmshplugins/mmcctranscoder/group"/> -->
+   </component>
+  </collection>
+  <collection id="mmsharinguis_info" name="Multimedia Sharing UIs Info" level="if">
+   <component id="mmsharinguis_rom" filter="s60" name="Multimedia Sharing UIs ROM">
+    <!--  consider distributing to other components -->
+    <unit bldFile="rom"/>
+   </component>
+  </collection>
+ </package>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/package_map.xml	Fri Sep 17 08:28:43 2010 +0300
@@ -0,0 +1,1 @@
+<PackageMap root="sf" layer="app"/>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/bld.inf	Fri Sep 17 08:28:43 2010 +0300
@@ -0,0 +1,29 @@
+/*
+* 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:  Exports for mmsharinguis.
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+
+multimediasharing.iby CORE_APP_LAYER_IBY_EXPORT_PATH(multimediasharing.iby)
+multimediasharingresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(multimediasharingresources.iby)
+multimediasharing_stub.SIS /epoc32/data/z/system/install/multimediasharing_stub.SIS
+    
\ No newline at end of file
--- a/tsrc/qtestutils/inc/testresultxmlparser.h	Thu Sep 02 20:23:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +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:
-*
-*/
-
-#ifndef TESTRESULTXMLPARSER_H
-#define TESTRESULTXMLPARSER_H
-
-#include <QXmlDefaultHandler>
-
-
-class TestResultXmlParser : public QXmlDefaultHandler
-{
-public: // Constructors and destructor
-    TestResultXmlParser();
-    ~TestResultXmlParser();    
-    
-public: // From QXmlContentHandler 
-    bool startElement(
-        const QString& namespaceURI,
-        const QString& localName,
-        const QString& qName,
-        const QXmlAttributes& atts);
-    
-    bool endElement(
-        const QString& namespaceURI,
-        const QString& localName,
-        const QString& qName);
-    
-    bool characters(const QString& ch);
-       
-public: // New functions
-    
-    int parse(const QString& fileName);
-    
-    int parseAndPrintResults(
-        const QString& fileName,
-        bool printDetails=false);
-    
-    int testCount();
-    
-    QStringList errors();
-    
-private: // Data
-    int mTestCount;
-    QStringList* mErrors;
-    bool mParsingIncidentElement;
-    bool mParsingDescriptionElement;
-    bool mCurrentTestFailed;
-    QString mCurrentTestName;
-    QString mCurrentTestFile;
-    int mCurrentTestFailureLine;
-};
-
-
-#endif // TESTRESULTXMLPARSER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/qtestutils/inc/testrunner.h	Fri Sep 17 08:28:43 2010 +0300
@@ -0,0 +1,73 @@
+/*
+* 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:
+*
+*/
+
+#ifndef TESTRUNNER_H
+#define TESTRUNNER_H
+
+#include <QXmlDefaultHandler>
+
+class QXmlStreamWriter;
+class QXmlStreamReader;
+
+class TestRunner : public QXmlDefaultHandler
+{
+public: // Constructors and destructor
+    TestRunner(const QString& name, const QString& combinedOutputFileName = QString() );
+    ~TestRunner();
+        
+public: // New functions
+    
+    int runTests(QObject& testObject);
+    void printResults();
+    
+protected: // From QXmlContentHandler 
+    bool startElement(
+        const QString& namespaceURI,
+        const QString& localName,
+        const QString& qName,
+        const QXmlAttributes& atts);
+    
+    bool endElement(
+        const QString& namespaceURI,
+        const QString& localName,
+        const QString& qName);
+    
+    bool characters(const QString& ch);
+
+private: // New functions
+
+    void parse(const QString& fileName);
+    void combineResults();
+    void appendToXml(QXmlStreamWriter& writer, QXmlStreamReader& reader, QString& caseName);
+
+private: // Data
+    QStringList mTestRunParams;
+    QString mHomeDir;
+    int mTestCount;
+    QStringList mErrors;
+    bool mParsingIncidentElement;
+    bool mParsingDescriptionElement;
+    bool mCurrentTestFailed;
+    QString mCurrentTestName;
+    QString mCurrentTestFile;
+    int mCurrentTestFailureLine;
+    QString mCombinedOutputFileName;
+    QStringList mResultFiles;
+};
+
+
+#endif // TESTRUNNER_H
--- a/tsrc/qtestutils/src/testresultxmlparser.cpp	Thu Sep 02 20:23:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +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: 
-*
-*/
-
-#include "testresultxmlparser.h" 
-#include <stdio.h>
-
-const char testFunctionElement[] = "TestFunction";
-const char incidentElement[] = "Incident";
-const char descriptionElement[] = "Description";
-const char nameAttr[] = "name";
-const char typeAttr[] = "type";
-const char fileAttr[] = "file";
-const char lineAttr[] = "line";
-const char attrValueFail[] = "fail";
-
-
-// -----------------------------------------------------------------------------
-// TestResultXmlParser::TestResultXmlParser
-// -----------------------------------------------------------------------------
-//
-TestResultXmlParser::TestResultXmlParser() 
-: mTestCount(0), 
-  mParsingIncidentElement(false),
-  mParsingDescriptionElement(false),
-  mCurrentTestFailed(false),
-  mCurrentTestFailureLine(0)
-{
-    mErrors = new QStringList;
-}
-
-// -----------------------------------------------------------------------------
-// TestResultXmlParser::TestResultXmlParser
-// -----------------------------------------------------------------------------
-//
-TestResultXmlParser::~TestResultXmlParser()
-{
-    delete mErrors;   
-}
-
-// -----------------------------------------------------------------------------
-// TestResultXmlParser::startElement
-// -----------------------------------------------------------------------------
-//
-bool TestResultXmlParser::startElement(
-    const QString& /*namespaceURI*/, 
-    const QString& /*localName*/, 
-    const QString& qName, 
-    const QXmlAttributes& atts)
-{
-    if (qName == testFunctionElement) {
-        mTestCount++;
-        mCurrentTestName = atts.value(nameAttr);
-        return true;
-    }
-    if (qName == incidentElement) {
-        mParsingIncidentElement = true;
-        if (atts.value(typeAttr) == attrValueFail) {
-            mCurrentTestFailed = true;
-            mCurrentTestFile = atts.value(fileAttr);
-            mCurrentTestFailureLine = atts.value(lineAttr).toInt();
-        }
-        return true;
-    }
-    mParsingDescriptionElement = (qName == descriptionElement);
-    return true;
-}
-
-// -----------------------------------------------------------------------------
-// TestResultXmlParser::endElement
-// -----------------------------------------------------------------------------
-//
-bool TestResultXmlParser::endElement(
-    const QString& /*namespaceURI*/,
-    const QString& /*localName*/,
-    const QString& qName)
-{
-    if (qName == incidentElement) {
-        mParsingIncidentElement = false;
-        mCurrentTestFailed = false;
-        return true;
-    }
-    if (qName == descriptionElement) {
-        mParsingDescriptionElement = false;
-    }    
-    return true;
-}
-
-// -----------------------------------------------------------------------------
-// TestResultXmlParser::characters
-// -----------------------------------------------------------------------------
-//
-bool TestResultXmlParser::characters(const QString& ch)
-{
-    if (mParsingIncidentElement && 
-        mParsingDescriptionElement &&
-        mCurrentTestFailed) {
-        QString testResult = mCurrentTestName + " failed:\n";
-        testResult += "File: ";
-        testResult += mCurrentTestFile;
-        testResult += "\n";
-        testResult += "Line: ";
-        testResult += QString::number(mCurrentTestFailureLine);
-        testResult += "\n";
-        testResult += "Reason: ";
-        testResult += ch;
-        testResult += "\n";
-        mErrors->append(testResult);
-    }
-    return true;
-}
-
-// -----------------------------------------------------------------------------
-// TestResultXmlParser::parse
-// -----------------------------------------------------------------------------
-//
-int TestResultXmlParser::parse(const QString& fileName)
-{
-    QFile file(fileName);
-    QXmlInputSource inputSource(&file);
-    QXmlSimpleReader reader;
-    reader.setContentHandler(this);
-    return reader.parse(inputSource);
-}
-
-// -----------------------------------------------------------------------------
-// TestResultXmlParser::parseAndPrintResults
-// -----------------------------------------------------------------------------
-//
-int TestResultXmlParser::parseAndPrintResults(
-    const QString& fileName,
-    bool printDetails)
-{
-    printf("Parsing: %s\n", fileName.toUtf8().data());
-    int error = parse(fileName);
-    printf("%d tests executed. Failed total: %d\n", mTestCount, mErrors->count());
-    if (printDetails) {
-        printf("\n");
-        foreach(QString error, *mErrors) {
-            printf(error.toUtf8().data());
-            printf("\n");
-        }
-    }
-    return error;
-}
-
-// -----------------------------------------------------------------------------
-// TestResultXmlParser::testCount
-// -----------------------------------------------------------------------------
-//
-int TestResultXmlParser::testCount()
-{
-    return mTestCount;
-}
-
-// -----------------------------------------------------------------------------
-// TestResultXmlParser::errors
-// -----------------------------------------------------------------------------
-//
-QStringList TestResultXmlParser::errors()
-{
-    return *mErrors;
-}
-
-// End of File.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/qtestutils/src/testrunner.cpp	Fri Sep 17 08:28:43 2010 +0300
@@ -0,0 +1,217 @@
+/*
+* 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: 
+*
+*/
+
+#include "testrunner.h"
+#include <QtTest/QtTest>
+#include <QDir>
+#include <stdio.h>
+
+const char testCaseElement[] = "TestCase";
+const char testFunctionElement[] = "TestFunction";
+const char incidentElement[] = "Incident";
+const char descriptionElement[] = "Description";
+const char nameAttr[] = "name";
+const char typeAttr[] = "type";
+const char fileAttr[] = "file";
+const char lineAttr[] = "line";
+const char attrValueFail[] = "fail";
+
+
+TestRunner::TestRunner(const QString& name, const QString& combinedOutputFileName)
+: mTestCount(0),
+  mParsingIncidentElement(false),
+  mParsingDescriptionElement(false),
+  mCurrentTestFailed(false),
+  mCurrentTestFailureLine(0),
+  mCombinedOutputFileName(combinedOutputFileName)
+{
+    mTestRunParams.append(name);
+    mTestRunParams.append("-xml");
+    mTestRunParams.append("-o");
+    mHomeDir = QDir::homePath();
+    mTestRunParams.append(QString()); // Initial result file name
+
+    if (!mHomeDir.endsWith(QString::fromAscii("/")))
+        mHomeDir += QString::fromAscii("/");
+}
+
+TestRunner::~TestRunner()
+{
+}
+
+int TestRunner::runTests(QObject& testObject)
+{
+    QString className(testObject.metaObject()->className());
+    printf("Running tests for %s ... ", className.toUtf8().data());
+    QString resultFileName = mHomeDir + className + ".xml";
+    mTestRunParams.replace(mTestRunParams.count()-1,resultFileName);
+    int errorsBefore = mErrors.count();
+    int error = QTest::qExec(&testObject, mTestRunParams);
+    parse(resultFileName);
+    mResultFiles.append(resultFileName);
+    printf("Failures: %d\n",mErrors.count()-errorsBefore);
+    fflush(stdout);
+    return error;
+}
+
+void TestRunner::printResults()
+{
+    printf("\nTests executed: %d\n",mTestCount);
+    if (mErrors.count() > 0) {
+        printf("Failures (%d):\n", mErrors.count());
+        foreach(QString error, mErrors) {
+            printf("\n%s", error.toUtf8().data());
+        }
+        printf("\n");
+    } else {
+        printf("All passed.\n\n");
+    }
+    fflush(stdout);
+    
+    combineResults();
+}
+
+void TestRunner::parse(const QString& fileName)
+{
+    QFile file(fileName);
+    QXmlInputSource inputSource(&file);
+    QXmlSimpleReader reader;
+    reader.setContentHandler(this);
+    reader.parse(inputSource);
+}
+
+bool TestRunner::startElement(
+    const QString& /*namespaceURI*/, 
+    const QString& /*localName*/, 
+    const QString& qName, 
+    const QXmlAttributes& atts)
+{
+    if (qName == QString::fromAscii(testFunctionElement)) {
+        mTestCount++;
+        mCurrentTestName = atts.value(QString::fromAscii(nameAttr));
+        return true;
+    }
+    if (qName == QString::fromAscii(incidentElement)) {
+        mParsingIncidentElement = true;
+        if (atts.value(QString::fromAscii(typeAttr)) == QString::fromAscii(attrValueFail)) {
+            mCurrentTestFailed = true;
+            mCurrentTestFile = atts.value(QString::fromAscii(fileAttr));
+            mCurrentTestFailureLine = atts.value(QString::fromAscii(lineAttr)).toInt();
+        }
+        return true;
+    }
+    mParsingDescriptionElement =
+        (qName == QString::fromAscii(descriptionElement));
+    return true;
+}
+
+bool TestRunner::endElement(
+    const QString& /*namespaceURI*/,
+    const QString& /*localName*/,
+    const QString& qName)
+{
+    if (qName == QString::fromAscii(incidentElement)) {
+        mParsingIncidentElement = false;
+        mCurrentTestFailed = false;
+        return true;
+    }
+    if (qName == QString::fromAscii(descriptionElement)) {
+        mParsingDescriptionElement = false;
+    }    
+    return true;
+}
+
+bool TestRunner::characters(const QString& ch)
+{
+    if (mParsingIncidentElement && 
+        mParsingDescriptionElement &&
+        mCurrentTestFailed) {
+        QByteArray testResult = mCurrentTestName.toAscii() + " failed:\n";
+        testResult += "File: ";
+        testResult += mCurrentTestFile.toAscii();
+        testResult += "\n";
+        testResult += "Line: ";
+        testResult += QByteArray::number(mCurrentTestFailureLine);
+        testResult += "\n";
+        testResult += "Reason: ";
+        testResult += ch.toAscii();
+        testResult += "\n";
+        mErrors.append(QString::fromAscii(testResult.data()));
+    }
+    return true;
+}
+
+void TestRunner::combineResults()
+{
+    if ( mCombinedOutputFileName.isEmpty() ){
+        return;
+    }
+    if ( !mCombinedOutputFileName.contains(QString::fromAscii("/")) ){
+        mCombinedOutputFileName.prepend( mHomeDir );
+    }
+    QFile file(mCombinedOutputFileName);
+    if (!file.open(QIODevice::WriteOnly)){
+        return;
+    }
+
+    QXmlStreamWriter writer(&file);
+    writer.setAutoFormatting(true);
+    writer.writeStartDocument();
+    QString caseName;
+    foreach ( QString resultFile, mResultFiles ){
+        QFile readFile( resultFile );
+        if ( resultFile != mCombinedOutputFileName && readFile.open(QIODevice::ReadOnly) ){
+            QXmlStreamReader reader(&readFile);
+            appendToXml(writer, reader, caseName);
+            readFile.close();
+        }
+    }
+    writer.writeEndDocument();
+    file.close();
+}
+
+void TestRunner::appendToXml(QXmlStreamWriter& writer, QXmlStreamReader& reader, QString& caseName)
+{
+    while (!reader.atEnd()) {
+        QXmlStreamReader::TokenType type = reader.readNext();
+        if ( type == QXmlStreamReader::StartDocument  || 
+             type == QXmlStreamReader::EndDocument ){
+            // Ignored
+        } else if ( reader.name() == testCaseElement ){
+            if ( type == QXmlStreamReader::StartElement ){
+                QString tempCaseName = reader.attributes().value(nameAttr).toString();
+                if ( caseName.isEmpty() && type == QXmlStreamReader::StartElement){
+                    writer.writeStartElement(testCaseElement);
+                    writer.writeAttribute(nameAttr, mTestRunParams.at(0));
+                }
+                caseName = tempCaseName;
+            }  
+        } else if ( type == QXmlStreamReader::StartElement ) {
+            if ( reader.name() == testFunctionElement ){
+                QString tempFuncName = reader.attributes().value(nameAttr).toString();
+                if ( !tempFuncName.isEmpty() ){
+                    writer.writeStartElement(testFunctionElement);
+                    writer.writeAttribute(nameAttr, caseName + "::" + tempFuncName);
+                }
+            } else {
+                writer.writeCurrentToken( reader );
+            }
+        } else {
+            writer.writeCurrentToken( reader );
+        }
+    }
+}
--- a/tsrc/unittestrunner/unittest_qt_config.txt	Thu Sep 02 20:23:40 2010 +0300
+++ b/tsrc/unittestrunner/unittest_qt_config.txt	Fri Sep 17 08:28:43 2010 +0300
@@ -1,3 +1,3 @@
-ut_lcuieng -noprompt,ut_lcui_lcUiEngine.xml,ut_lcui_lcactivitymanager.xml
-ut_lcui -noprompt,ut_lcui_LcViewManager.xml,ut_lcui_LcUiComponentRepository.xml,ut_lcui_LcView.xml,ut_lcui_LcEffectHandler.xml,ut_lcui_LcVideoWidget.xml
-ut_mmshapp -noprompt,ut_lcapplication.xml
\ No newline at end of file
+ut_lcuieng -noprompt -o C:/ut_lcuieng_all.xml,ut_lcuieng_all.xml
+ut_lcui -noprompt -o C:/ut_lcui_all.xml,ut_lcui_all.xml
+ut_mmshapp -noprompt -o C:/ut_lcapplication_all.xml,ut_lcapplication_all.xml