telutils/dialpad/tsrc/unit/ut_dialpadvoicemailboxeventfilter/ut_dialpadvoicemailboxeventfilter.cpp
changeset 51 12bc758d6a02
parent 31 a2467631ae02
equal deleted inserted replaced
48:78df25012fda 51:12bc758d6a02
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 #include <QtGui>
    18 #include <QtGui>
    19 #include <QtTest/QtTest>
    19 #include <QtTest/QtTest>
       
    20 #include <mockservice.h>
    20 
    21 
    21 #include <hbapplication.h>
    22 #include <hbapplication.h>
    22 #include <hbmainwindow.h>
       
    23 #include <hbaction.h>
       
    24 #include <hbtoolbar.h>
       
    25 #include <hbview.h>
       
    26 #include <hblineedit.h>
    23 #include <hblineedit.h>
    27 #include <hbinstance.h>
    24 #include <hbstringutil.h>
    28 
       
    29 #ifdef Q_OS_SYMBIAN
       
    30 #include "xqservicerequest.h"
       
    31 #endif
       
    32 
    25 
    33 #include "dialpadtest.h"
    26 #include "dialpadtest.h"
    34 #include "dialpadtestutil.h"
       
    35 #include "dialpadvoicemailboxeventfilter.h"
       
    36 #include "dialpad.h"
    27 #include "dialpad.h"
    37 #include "dialpadsymbianwrapper.h"
    28 #include "dialpadsymbianwrapper.h"
    38 
    29 #define protected public
    39 const int WAIT_TIME = 300;
    30 #include "dialpadvoicemailboxeventfilter.h"
    40 QString mService;
    31 #include "dialpadmailboxeventfilterbase.h"
    41 QString mMessage;
    32 
    42 bool mXQServiceConstructed;
    33 
    43 bool mSendCalled;
    34 void editText(QString &text)
    44 
    35 {
    45 DialpadSymbianWrapper::DialpadSymbianWrapper(QObject *parent) : d_ptr(NULL) {}
    36     text = QString("blah");
    46 DialpadSymbianWrapper::~DialpadSymbianWrapper() {}
    37 }
    47 int DialpadSymbianWrapper::getMailboxNumber(QString &vmbxNumber) { vmbxNumber=QString("12345678"); return 0; }
    38 
    48 int DialpadSymbianWrapper::defineMailboxNumber(QString &vmbxNumber) { return 0; }
       
    49 
       
    50 #ifdef Q_OS_SYMBIAN
       
    51 XQServiceRequest::XQServiceRequest(const QString& service, const QString& message, const bool& synchronous) { mService=service; mMessage=message; mXQServiceConstructed=true; }
       
    52 XQServiceRequest::~XQServiceRequest() {}
       
    53 bool XQServiceRequest::send(QVariant& retValue) { mSendCalled=true; return true; }
       
    54 void XQServiceRequest::addArg(const QVariant& v) {}
       
    55 #endif
       
    56 
       
    57 // helper class
       
    58 class KeyEventCatcher : public QObject
       
    59 {
       
    60 public:
       
    61     bool eventFilter(QObject* watched, QEvent * event)
       
    62     {
       
    63         Q_UNUSED(watched);
       
    64 
       
    65         if (event->type() == QEvent::KeyPress) {
       
    66             QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
       
    67             mKeyPresses.append(keyEvent->key());
       
    68             return false;
       
    69         } else if (event->type() == QEvent::KeyRelease) {
       
    70             QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
       
    71             mKeyReleases.append(keyEvent->key());
       
    72             return false;
       
    73         }
       
    74         return false;
       
    75     }
       
    76 
       
    77 public:
       
    78     QList<int> mKeyPresses;
       
    79     QList<int> mKeyReleases;
       
    80 };
       
    81 
    39 
    82 // test cases
    40 // test cases
    83 class ut_DialpadVoiceMailboxEventFilter : public QObject
    41 class ut_DialpadVoiceMailboxEventFilter : public QObject, MockService
    84 {
    42 {
    85     Q_OBJECT
    43     Q_OBJECT
       
    44 
       
    45 public:    
       
    46     ut_DialpadVoiceMailboxEventFilter();
       
    47     virtual ~ut_DialpadVoiceMailboxEventFilter();
    86 
    48 
    87 private slots:
    49 private slots:
    88     void initTestCase();
    50     void initTestCase();
    89     void init();
    51     void init();
    90     void cleanupTestCase();
    52     void cleanupTestCase();
    91     void cleanup();
    53     void cleanup();
    92 
    54 
    93     // These are actual voice mailbox event filter unit tests
    55     // These are actual voice mailbox event filter unit tests
    94     void testNumericKeyOneLongPress();
    56     void testEventFilter();
    95     void testNumericKeyOneShortPress();
    57     void testHandleCallButtonPress();
    96     void testNumericKeyOneShortThenLongPress();
    58     void testHandleMailboxOperation();
       
    59     void testHandleLongKeyPress();
    97 
    60 
    98 private:
    61 private:
    99     HbMainWindow*  mMainWindow;
       
   100     Dialpad*       mDialpad;
       
   101     DialpadVoiceMailboxEventFilter *mEventFilter;
    62     DialpadVoiceMailboxEventFilter *mEventFilter;
   102     KeyEventCatcher* mKeyCatcher;
    63     Dialpad *mDialpad;
   103     DialpadTestUtil* mUtil;
       
   104 };
    64 };
   105 
    65 
       
    66 ut_DialpadVoiceMailboxEventFilter::ut_DialpadVoiceMailboxEventFilter()
       
    67 {
       
    68 }
       
    69 
       
    70 ut_DialpadVoiceMailboxEventFilter::~ut_DialpadVoiceMailboxEventFilter()
       
    71 {
       
    72 }
       
    73 
   106 void ut_DialpadVoiceMailboxEventFilter::initTestCase()
    74 void ut_DialpadVoiceMailboxEventFilter::initTestCase()
   107 {
    75 {
   108     mMainWindow = new HbMainWindow;
       
   109 
       
   110     mKeyCatcher = new KeyEventCatcher;
       
   111     mMainWindow->installEventFilter(mKeyCatcher);
       
   112 
       
   113     mUtil = new DialpadTestUtil(*mMainWindow);
       
   114 
       
   115     mDialpad = new Dialpad();
       
   116     mEventFilter = new DialpadVoiceMailboxEventFilter(mDialpad, this);
       
   117     hbInstance->allMainWindows().at(0)->installEventFilter(mEventFilter);
       
   118 
       
   119     QRectF rect(mMainWindow->contentsRect());
       
   120     rect.setHeight(rect.height()*0.7);
       
   121     rect.moveTop((mMainWindow->contentsRect().height()-rect.height())/2);
       
   122 
       
   123     mDialpad->setPreferredSize(360,400);
       
   124     mDialpad->setPos(0,100);
       
   125 
       
   126     mMainWindow->show();
       
   127     mDialpad->show();
       
   128     mDialpad->hide();
       
   129 }
    76 }
   130 
    77 
   131 void ut_DialpadVoiceMailboxEventFilter::init()
    78 void ut_DialpadVoiceMailboxEventFilter::init()
   132 {
    79 {
   133     mService = QString("");
    80     initialize();
   134     mMessage = QString("");
    81     HbMainWindow *window = 0;
   135     mXQServiceConstructed = false;
    82     mDialpad = new Dialpad(*window);
   136     mSendCalled = false;
    83     mEventFilter = new DialpadVoiceMailboxEventFilter(mDialpad);
   137 }
    84 }
   138 
    85 
   139 void ut_DialpadVoiceMailboxEventFilter::cleanupTestCase()
    86 void ut_DialpadVoiceMailboxEventFilter::cleanupTestCase()
   140 {
    87 {
       
    88 }
       
    89 
       
    90 void ut_DialpadVoiceMailboxEventFilter::cleanup()
       
    91 {
       
    92     delete mEventFilter;
   141     delete mDialpad;
    93     delete mDialpad;
   142     delete mMainWindow;
    94     reset();
   143     delete mKeyCatcher;
    95 }
   144     delete mUtil;
    96 
   145 }
    97 void ut_DialpadVoiceMailboxEventFilter::testEventFilter()
   146 
    98 {
   147 void ut_DialpadVoiceMailboxEventFilter::cleanup()
    99     QObject *obj = 0;
   148 {
   100 
   149     mKeyCatcher->mKeyPresses.clear();
   101     // First test key press functionality (all code branches).
   150     mKeyCatcher->mKeyReleases.clear();
   102     QKeyEvent event1(QEvent::KeyPress, 0, Qt::NoModifier);
   151     mDialpad->editor().setText(QString());
   103     EXPECT(DialpadMailboxEventFilterBase, checkIfSendEventAndConsumeEvent).returns(true);
   152     QTest::qWait( WAIT_TIME ); // delay between tests
   104 
   153 }
   105     bool eaten = mEventFilter->eventFilter(obj, &event1);
   154 
   106     QVERIFY(verify() && eaten);
   155 void ut_DialpadVoiceMailboxEventFilter::testNumericKeyOneLongPress()
   107 
   156 {
   108     HbLineEdit line;// = new HbLineEdit();
   157     mDialpad->openDialpad();
   109     EXPECT(DialpadMailboxEventFilterBase, checkIfSendEventAndConsumeEvent).returns(false);
   158     QTest::qWait(WAIT_TIME);
   110     EXPECT(DialpadMailboxEventFilterBase, isLongKeyPressSupported).returns(true);
   159     mUtil->mouseClickDialpad(Qt::Key_1, DialpadTestUtil::Press);
   111     EXPECT(Dialpad, editor).returns(&line);
   160     QTest::qWait(2000);
   112     EXPECT(HbLineEdit, text).returns(QString(""));
   161     mUtil->mouseClickDialpad(Qt::Key_1, DialpadTestUtil::Release);
   113     EXPECT(QTimer, stop);
   162     QTest::qWait(1000);
   114     EXPECT(QTimer ,start);
   163     QCOMPARE(mDialpad->editor().text(), QString(""));
   115     eaten = mEventFilter->eventFilter(obj, &event1);
   164     mDialpad->closeDialpad();
   116     QVERIFY(verify() && !eaten);
   165 
   117 
   166 #ifdef Q_OS_SYMBIAN
   118     EXPECT(DialpadMailboxEventFilterBase, checkIfSendEventAndConsumeEvent).returns(false);
   167     QVERIFY(mXQServiceConstructed == true);
   119     EXPECT(DialpadMailboxEventFilterBase, isLongKeyPressSupported).returns(true);
   168     QVERIFY(mSendCalled == true);
   120     EXPECT(Dialpad, editor).returns(&line);
   169     QCOMPARE(mService, QString("com.nokia.symbian.ICallDial"));
   121     EXPECT(HbLineEdit, text).returns(QString("blaa"));
   170     QCOMPARE(mMessage, QString("dial(QString)"));
   122     eaten = mEventFilter->eventFilter(obj, &event1);
   171 #endif
   123     QVERIFY(verify() && !eaten);
   172 }
   124 
   173 
   125     EXPECT(DialpadMailboxEventFilterBase, checkIfSendEventAndConsumeEvent).returns(false);
   174 void ut_DialpadVoiceMailboxEventFilter::testNumericKeyOneShortPress()
   126     EXPECT(DialpadMailboxEventFilterBase, isLongKeyPressSupported).returns(false);
   175 {
   127     eaten = mEventFilter->eventFilter(obj, &event1);
   176     mDialpad->openDialpad();
   128     QVERIFY(verify() && !eaten);
   177     QTest::qWait(WAIT_TIME);
   129 
   178     mUtil->mouseClickDialpad(Qt::Key_1, DialpadTestUtil::Press);
   130     //delete event1;
   179     QTest::qWait(200);
   131 
   180     mUtil->mouseClickDialpad(Qt::Key_1, DialpadTestUtil::Release);
   132     // Test key release functionality (all code branches).
   181     QTest::qWait(1000);
   133     QKeyEvent event2(QEvent::KeyRelease, 0, Qt::NoModifier);// = new QKeyEvent(QEvent::KeyRelease, 0, Qt::NoModifier);
   182     // Check that character '1' is in editor.
   134     EXPECT(DialpadMailboxEventFilterBase, checkIfSendEventAndConsumeEvent).returns(true);
   183     QCOMPARE(mDialpad->editor().text(), QString("1"));
   135     eaten = mEventFilter->eventFilter(obj, &event2);
   184 }
   136     QVERIFY(verify() && eaten);
   185 
   137 
   186 void ut_DialpadVoiceMailboxEventFilter::testNumericKeyOneShortThenLongPress()
   138     EXPECT(DialpadMailboxEventFilterBase, checkIfSendEventAndConsumeEvent).returns(false);
   187 {
   139     EXPECT(DialpadMailboxEventFilterBase, isLongKeyPressSupported).returns(true);
   188     // Then one short and one long press
   140     EXPECT(QTimer, stop);
   189     mDialpad->openDialpad();
   141     eaten = mEventFilter->eventFilter(obj, &event2);
   190     QTest::qWait( WAIT_TIME );
   142     QVERIFY(verify() && !eaten);
   191     mUtil->mouseClickDialpad(Qt::Key_1, DialpadTestUtil::Press);
   143 
   192     mUtil->mouseClickDialpad(Qt::Key_1, DialpadTestUtil::Release);
   144     EXPECT(DialpadMailboxEventFilterBase, checkIfSendEventAndConsumeEvent).returns(false);
   193     mUtil->mouseClickDialpad(Qt::Key_1, DialpadTestUtil::Press);
   145     EXPECT(DialpadMailboxEventFilterBase, isLongKeyPressSupported).returns(false);
   194     QTest::qWait(2000);
   146     eaten = mEventFilter->eventFilter(obj, &event2);
   195     mUtil->mouseClickDialpad(Qt::Key_1, DialpadTestUtil::Release);
   147     QVERIFY(verify() && !eaten);
   196     QTest::qWait(1000);
   148 
   197     QVERIFY(mDialpad->editor().text()=="11");
   149     //delete event2;
   198     mDialpad->closeDialpad();
   150 
   199 }
   151     // Test non-supported key type functionality.
       
   152     QKeyEvent event3(QEvent::None, 0, Qt::NoModifier);// = new QKeyEvent(QEvent::None, 0, Qt::NoModifier);
       
   153     eaten = mEventFilter->eventFilter(obj, &event3);
       
   154     QVERIFY(verify() && !eaten);
       
   155     //delete event3;
       
   156 
       
   157     //delete line;
       
   158 }
       
   159 
       
   160 void ut_DialpadVoiceMailboxEventFilter::testHandleCallButtonPress()
       
   161 {
       
   162     HbLineEdit line;// = new HbLineEdit();
       
   163 
       
   164     EXPECT(Dialpad, editor).returns(&line);
       
   165     EXPECT(HbLineEdit, text).returns(QString("1"));
       
   166     EXPECT(Dialpad, editor).returns(&line);
       
   167     EXPECT(HbLineEdit, text).returns(QString("1"));
       
   168     EXPECT(HbStringUtil, convertDigitsTo).returns(QString("1"));
       
   169     EXPECT(DialpadSymbianWrapper, getMailboxNumber).returns(97);
       
   170     bool handled = mEventFilter->handleCallButtonPress();
       
   171     QVERIFY(verify() && handled);
       
   172 
       
   173     EXPECT(Dialpad, editor).returns(&line);
       
   174     EXPECT(HbLineEdit, text).returns(QString("a"));
       
   175     EXPECT(Dialpad, editor).returns(&line);
       
   176     EXPECT(HbLineEdit, text).returns(QString("a"));
       
   177     EXPECT(HbStringUtil, convertDigitsTo).returns(QString("a"));
       
   178     handled = mEventFilter->handleCallButtonPress();
       
   179     QVERIFY(verify() && !handled);
       
   180 
       
   181     EXPECT(Dialpad, editor).returns(&line);
       
   182     EXPECT(HbLineEdit, text).returns(QString(""));
       
   183     handled = mEventFilter->handleCallButtonPress();
       
   184     QVERIFY(verify() && !handled);
       
   185 
       
   186     //delete line;
       
   187 }
       
   188 
       
   189 void ut_DialpadVoiceMailboxEventFilter::testHandleMailboxOperation()
       
   190 {
       
   191     EXPECT(DialpadSymbianWrapper, getMailboxNumber).returns(DialpadErrorCancel);
       
   192     EXPECT(Dialpad, closeDialpad);
       
   193     EXPECT(DialpadSymbianWrapper, defineMailboxNumber).returns(DialpadErrorCancel);
       
   194     EXPECT(Dialpad, openDialpad);
       
   195     mEventFilter->handleMailboxOperation();
       
   196     QVERIFY(verify());
       
   197 
       
   198     EXPECT(DialpadSymbianWrapper, getMailboxNumber).returns(DialpadErrorNone);
       
   199     EXPECT(Dialpad, closeDialpad);
       
   200     EXPECT(DialpadSymbianWrapper, defineMailboxNumber).returns(DialpadErrorCancel);
       
   201     EXPECT(Dialpad, openDialpad);
       
   202     mEventFilter->handleMailboxOperation();
       
   203     QVERIFY(verify());
       
   204 
       
   205     EXPECT(DialpadSymbianWrapper, getMailboxNumber).returns(DialpadErrorCancel);
       
   206     EXPECT(Dialpad, closeDialpad);
       
   207     EXPECT(DialpadSymbianWrapper, defineMailboxNumber).returns(DialpadErrorNone);
       
   208     mEventFilter->handleMailboxOperation();
       
   209     QVERIFY(verify());
       
   210 
       
   211     QString text;
       
   212     EXPECT(DialpadSymbianWrapper, getMailboxNumber).with<QString &>(text).
       
   213         willOnce(invoke(editText)).times(1).returns(DialpadErrorCancel);
       
   214     EXPECT(Dialpad, closeDialpad);
       
   215     EXPECT(DialpadSymbianWrapper, defineMailboxNumber).returns(DialpadErrorCancel);
       
   216     EXPECT(Dialpad, openDialpad);
       
   217     mEventFilter->handleMailboxOperation();
       
   218     QVERIFY(verify());
       
   219 
       
   220     EXPECT(DialpadSymbianWrapper, getMailboxNumber).with<QString &>(text).
       
   221         willOnce(invoke(editText)).times(1).returns(DialpadErrorNone);
       
   222     EXPECT(DialpadMailboxEventFilterBase, createCall);
       
   223     EXPECT(DialpadMailboxEventFilterBase, clearEditor);
       
   224     EXPECT(Dialpad, openDialpad);
       
   225     mEventFilter->handleMailboxOperation();
       
   226     QVERIFY(verify());
       
   227 }
       
   228 
       
   229 void ut_DialpadVoiceMailboxEventFilter::testHandleLongKeyPress()
       
   230 {
       
   231     QString text;
       
   232     mEventFilter->mKeyEvent = Qt::Key_1;
       
   233     EXPECT(DialpadSymbianWrapper, getMailboxNumber).with<QString &>(text).
       
   234         willOnce(invoke(editText)).times(1).returns(DialpadErrorNone);
       
   235     mEventFilter->handleLongKeyPress();
       
   236     QVERIFY(verify());
       
   237 
       
   238     mEventFilter->mKeyEvent = Qt::Key_Apostrophe;
       
   239     mEventFilter->handleLongKeyPress();
       
   240 }
       
   241 
   200 
   242 
   201 DIALPAD_TEST_MAIN(ut_DialpadVoiceMailboxEventFilter)
   243 DIALPAD_TEST_MAIN(ut_DialpadVoiceMailboxEventFilter)
   202 #include "ut_dialpadvoicemailboxeventfilter.moc"
   244 #include "ut_dialpadvoicemailboxeventfilter.moc"
   203 
   245