satui/satapp/tsrc/ut_satapp/src/ut_satappaction.cpp
branchRCL_3
changeset 19 7d48bed6ce0c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/satui/satapp/tsrc/ut_satapp/src/ut_satappaction.cpp	Tue Aug 31 15:45:17 2010 +0300
@@ -0,0 +1,201 @@
+/*
+* 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: Unit test for satappmainhandler
+*
+*/
+
+#include <QVariant>
+#include <QTimer>
+#include <badesca.h>
+
+#include <hbmainwindow.h>
+#include <hblistwidget.h>
+
+#include "ut_satappaction.h"
+#include "satappaction.h"
+
+
+
+// --------------------------------------------------------
+// The unit tests begin here
+// --------------------------------------------------------
+
+Ut_SatAppAction::Ut_SatAppAction(QObject *parent)
+    :QObject(parent)
+{
+}
+
+
+void Ut_SatAppAction::testAction()
+{
+    SatAppAction a(ESatDisplayTextAction);
+    SatAppAction b(ESatGetInputAction);
+    SatAppAction c(ESatPlayToneAction);
+    
+    QCOMPARE(a.action(),(int)ESatDisplayTextAction);
+    QCOMPARE(b.action(),(int)ESatGetInputAction);
+    QCOMPARE(c.action(),(int)ESatPlayToneAction);
+
+}
+
+void Ut_SatAppAction::testParams()
+{
+    SatAppAction a(ESatDisplayTextAction);
+    // qvariant
+    a.set(KeyText, QVariant("hello"));
+    QCOMPARE(a.value(KeyText).toString(),QString("hello"));
+
+    // int
+    a.set(KeyMinLength, 25);
+    QCOMPARE(a.value(KeyMinLength).toInt(),25);
+
+    // string
+    a.set(KeyInputString,_L("kiss"));
+    QCOMPARE(a.value(KeyInputString).toString(),QString("kiss"));
+
+    // descriptor array
+    CDesCArrayFlat* array1 = new CDesCArrayFlat(8);
+    array1->AppendL(_L("item_0"));
+    array1->AppendL(_L("item_1"));
+    array1->AppendL(_L("item_2"));
+    a.set(KeyMenu,*array1);
+    QList<QVariant> list1 = a.value(KeyMenu).toList();
+    QCOMPARE(list1.size(), 3);
+    QCOMPARE(list1[0].toString(), QString("item_0"));
+    QCOMPARE(list1[1].toString(), QString("item_1"));
+    QCOMPARE(list1[2].toString(), QString("item_2"));
+
+    // int array
+    CArrayFixFlat<TInt>* array2 = new CArrayFixFlat<TInt>(8);
+    array2->AppendL(1);
+    array2->AppendL(2);
+    array2->AppendL(3);
+    a.set(KeyIconIdArray,*array2);
+    QList<QVariant> list2 = a.value(KeyIconIdArray).toList();
+    QCOMPARE(list2.size(), 3);
+    QCOMPARE(list2[0].toInt(), 1);
+    QCOMPARE(list2[1].toInt(), 2);
+    QCOMPARE(list2[2].toInt(), 3);
+
+    // TTimeIntervalSeconds
+    TTimeIntervalSeconds seconds(3);
+    a.set(KeyDuration,seconds);
+    QCOMPARE(a.value(KeyDuration).toInt(),3000);
+    
+    // TTimeIntervalMicroSeconds
+    TTimeIntervalMicroSeconds ysec(TInt64(500000));
+    a.set(KeyDuration,ysec);
+    QCOMPARE(a.value(KeyDuration).toInt(),500);
+    
+    // test hasValue
+    QVERIFY(a.hasValue(KeyText));
+    QVERIFY(a.hasValue(KeyMinLength));
+    QVERIFY(a.hasValue(KeyInputString));
+    QVERIFY(a.hasValue(KeyMenu));
+    QVERIFY(a.hasValue(KeyIconIdArray));
+    QVERIFY(a.hasValue(KeyDuration));
+    QVERIFY(!a.hasValue(KeyHelpRequested)); // <-- not set
+    QVERIFY(!a.hasValue(KeyHelpRequested)); // <-- not set
+    QVERIFY(!a.hasValue(KeyCharacterSet)); // <-- not set
+    QVERIFY(!a.hasValue(QString("billy the kid"))); // <-- definitely not set
+}
+
+void Ut_SatAppAction::testComplete()
+{
+    SatAppAction a(ESatDisplayTextAction);
+    SatAppAction b(ESatGetInputAction);
+    SatAppAction c(ESatPlayToneAction);
+    SatAppAction d(ESatPlayToneAction);
+    SatAppAction e(ESatPlayToneAction);
+    a.complete();
+    b.completeWithSuccess();
+    c.completeWithFailure();
+    d.completeWithBackRequested();
+    e.completeWithSessionTerminated();
+    QCOMPARE(a.response(),ESatNoResponseFromUser);
+    QCOMPARE(b.response(),ESatSuccess);
+    QCOMPARE(c.response(),ESatFailure);
+    QCOMPARE(d.response(),ESatBackwardModeRequestedByUser);
+    QCOMPARE(e.response(),ESatSessionTerminatedByUser);
+}
+
+void Ut_SatAppAction::testCompleteSignal()
+{
+    SatAppAction a(ESatDisplayTextAction);
+    SatAppAction b(ESatGetInputAction);
+    SatAppAction c(ESatPlayToneAction);
+    SatAppAction d(ESatPlayToneAction);
+    SatAppAction e(ESatPlayToneAction);
+    ActionHelper x;
+    connect(&a, SIGNAL(actionCompleted(SatAppAction*)), &x, SLOT(inc()));
+    connect(&b, SIGNAL(actionCompleted(SatAppAction*)), &x, SLOT(inc()));
+    connect(&c, SIGNAL(actionCompleted(SatAppAction*)), &x, SLOT(inc()));
+    connect(&d, SIGNAL(actionCompleted(SatAppAction*)), &x, SLOT(inc()));
+    connect(&e, SIGNAL(actionCompleted(SatAppAction*)), &x, SLOT(inc()));
+    a.complete();
+    b.completeWithSuccess();
+    c.completeWithFailure();
+    d.completeWithBackRequested();
+    e.completeWithSessionTerminated();
+    QCOMPARE(x.count(),5);
+}
+
+void Ut_SatAppAction::testDoubleComplete()
+{
+    SatAppAction a(ESatDisplayTextAction);
+    a.completeWithSuccess();
+    QCOMPARE(a.response(),ESatSuccess);
+    a.completeWithFailure(); // <-- no effect because already completed
+    QCOMPARE(a.response(),ESatSuccess); // <-- still in same state!
+}
+
+void Ut_SatAppAction::testAsyncActionRobustness()
+{
+    // this function tests if an action can be safely deleted in the "completed"
+    // slot, at the same time testing robustness and memory leaks by repeating
+    // the sequence multiple times
+    ActionHelper x;
+    for(int i=0; i<10000; ++i)
+    {
+        SatAppAction* a = new SatAppAction(ESatDisplayTextAction, this);
+        connect(a,SIGNAL(actionCompleted(SatAppAction*)),&x,SLOT(del(SatAppAction*)));
+        a->complete();
+    }
+}
+
+
+void Ut_SatAppAction::testWait()
+{
+    SatAppAction a(ESatDisplayTextAction);
+    QTimer::singleShot(1000, &a, SLOT(completeWithSuccess()));
+    // this should last 1 second
+    a.waitUntilCompleted();
+    QCOMPARE(a.response(),ESatSuccess);
+
+    // this should flow through directly, because already completed
+    a.waitUntilCompleted();
+    QCOMPARE(a.response(),ESatSuccess); // <-- response remains unchanged
+    
+}
+
+
+
+// helper
+void ActionHelper::del(SatAppAction* action)
+{
+    delete action;
+}
+
+
+// End of file