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 |