phonebookengines/cntmaptileservice/tsrc/ut_cntmaptileservice/src/testrunner.cpp
changeset 46 efe85016a067
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/cntmaptileservice/tsrc/ut_cntmaptileservice/src/testrunner.cpp	Wed Jun 23 18:02:44 2010 +0300
@@ -0,0 +1,176 @@
+/*
+* 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:
+*
+*/
+
+#include "testrunner.h"
+#include <QtTest/QtTest>
+#include <QDir>
+#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";
+
+
+TestRunner::TestRunner(const QString& name)
+: mTestCount(0),
+  mParsingIncidentElement(false),
+  mParsingDescriptionElement(false),
+  mCurrentTestFailed(false),
+  mCurrentTestFailureLine(0)
+{
+    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);
+    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);
+    
+    //To write in file
+    QFile file("C:\\CntMaptileServiceResult.txt");
+    if(file.open(QIODevice::WriteOnly)) 
+    {
+        QTextStream ts( &file );
+        ts << "Tests executed: " << mTestCount << "\n";
+        if (mErrors.count() > 0)
+        {
+            ts <<"Failures : " << mErrors.count() << "\n";
+            foreach(QString error, mErrors)
+                {
+                    ts << error.toUtf8().data();
+                }
+            ts << "\n";
+        }
+        else
+        {
+            ts<< "All passed.\n\n";
+        }
+        
+        ts << endl;
+        file.close();
+    } 
+}
+
+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;
+}
+