|
1 /* |
|
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 #include "ut_logsdetailsmodel.h" |
|
18 #include "logsdetailsmodel.h" |
|
19 #include "logsevent.h" |
|
20 #include "logsdbconnector.h" |
|
21 #include "logscall.h" |
|
22 #include "logscontact.h" |
|
23 #include "logsmessage.h" |
|
24 #include "logseventdata.h" |
|
25 #include "qtcontacts_stubs_helper.h" |
|
26 #include "logsdbconnector_stub_helper.h" |
|
27 #include <hblineedit.h> |
|
28 #include <hbglobal.h> |
|
29 #include <QtTest/QtTest> |
|
30 |
|
31 Q_DECLARE_METATYPE(LogsCall *) |
|
32 Q_DECLARE_METATYPE(LogsMessage *) |
|
33 Q_DECLARE_METATYPE(LogsContact *) |
|
34 |
|
35 const QString testEmpty = ""; |
|
36 const QString testDetailsRemoteParty = "Remoteman"; |
|
37 const QString testDetailsRemoteNum = "12345566"; |
|
38 const QString testDetailsRemoteInfo = "Remoteman"; |
|
39 QDateTime testDetailsDateAndTime; |
|
40 const LogsEvent::LogsDirection testDetailsDirection = LogsEvent::DirIn; |
|
41 const LogsEvent::LogsEventType testDetailsEventType = LogsEvent::TypeVoiceCall; |
|
42 const int testDetailsDuration = 2000; |
|
43 const QString testDetailsNumber = "+4152800"; |
|
44 |
|
45 void UT_LogsDetailsModel::initTestCase() |
|
46 { |
|
47 |
|
48 mDbConnector = new LogsDbConnector(mEvents); |
|
49 } |
|
50 |
|
51 void UT_LogsDetailsModel::cleanupTestCase() |
|
52 { |
|
53 delete mDbConnector; |
|
54 } |
|
55 |
|
56 |
|
57 void UT_LogsDetailsModel::init() |
|
58 { |
|
59 testDetailsDateAndTime.setTime_t( 3000 ); |
|
60 |
|
61 LogsEvent event; |
|
62 event.setRemoteParty( testDetailsRemoteParty ); |
|
63 event.setNumber( testDetailsRemoteNum ); |
|
64 event.setTime( testDetailsDateAndTime ); |
|
65 event.setDirection( testDetailsDirection ); |
|
66 event.setEventType( testDetailsEventType ); |
|
67 event.setDuration( testDetailsDuration ); |
|
68 mModel = new LogsDetailsModel(*mDbConnector, event); |
|
69 } |
|
70 |
|
71 void UT_LogsDetailsModel::cleanup() |
|
72 { |
|
73 delete mModel; |
|
74 mModel = 0; |
|
75 } |
|
76 |
|
77 void UT_LogsDetailsModel::testConstructor() |
|
78 { |
|
79 QVERIFY( mModel ); |
|
80 } |
|
81 |
|
82 void UT_LogsDetailsModel::testRowCount() |
|
83 { |
|
84 QVERIFY( mModel->rowCount(QModelIndex()) == 5 ); |
|
85 } |
|
86 |
|
87 void UT_LogsDetailsModel::testgetNumberToClipboard() |
|
88 { |
|
89 HbLineEdit *cliptmp2 = new HbLineEdit(" "); |
|
90 |
|
91 cliptmp2->setText(" "); |
|
92 cliptmp2->selectAll(); |
|
93 cliptmp2->copy(); |
|
94 |
|
95 mModel->getNumberToClipboard(); |
|
96 |
|
97 cliptmp2->setText(" "); |
|
98 cliptmp2->paste(); |
|
99 |
|
100 QVERIFY( cliptmp2->text() == testDetailsRemoteNum ); |
|
101 delete cliptmp2; |
|
102 } |
|
103 |
|
104 void UT_LogsDetailsModel::testData() |
|
105 { |
|
106 QVERIFY( mModel->data(QModelIndex(), Qt::DisplayRole).isNull() ); |
|
107 |
|
108 // Test remote party info |
|
109 QStringList display = mModel->data(mModel->index(0), Qt::DisplayRole).toStringList(); |
|
110 QVERIFY( display.count() == 2 ); |
|
111 QVERIFY( display.at(1) == testDetailsRemoteNum ); |
|
112 QList<QVariant> decoration = mModel->data(mModel->index(0), Qt::DecorationRole).toList(); |
|
113 QVERIFY( decoration.count() == 1 ); |
|
114 |
|
115 // Test date and time |
|
116 display = mModel->data(mModel->index(1), Qt::DisplayRole).toStringList(); |
|
117 QVERIFY( display.count() == 2 ); |
|
118 QVERIFY( display.at(1) == testDetailsDateAndTime.toTimeSpec(Qt::LocalTime).toString() ); |
|
119 decoration = mModel->data(mModel->index(1), Qt::DecorationRole).toList(); |
|
120 QVERIFY( decoration.count() == 1 ); |
|
121 |
|
122 // Test call direction |
|
123 display = mModel->data(mModel->index(2), Qt::DisplayRole).toStringList(); |
|
124 QVERIFY( display.count() == 2 ); |
|
125 QVERIFY( display.at(1) == mModel->mEvent->directionAsString() ); |
|
126 decoration = mModel->data(mModel->index(2), Qt::DecorationRole).toList(); |
|
127 QVERIFY( decoration.count() == 1 ); |
|
128 |
|
129 // Test call type |
|
130 display = mModel->data(mModel->index(3), Qt::DisplayRole).toStringList(); |
|
131 QVERIFY( display.count() == 2 ); |
|
132 QVERIFY( display.at(1) == mModel->mEvent->typeAsString() ); |
|
133 decoration = mModel->data(mModel->index(3), Qt::DecorationRole).toList(); |
|
134 QVERIFY( decoration.count() == 1 ); |
|
135 |
|
136 // Test call duration |
|
137 display = mModel->data(mModel->index(4), Qt::DisplayRole).toStringList(); |
|
138 QVERIFY( display.count() == 2 ); |
|
139 QTime n(0,0,0); |
|
140 QTime t = n.addSecs(testDetailsDuration); |
|
141 QVERIFY( display.at(1) == t.toString("hh:mm:ss") ); |
|
142 decoration = mModel->data(mModel->index(4), Qt::DecorationRole).toList(); |
|
143 QVERIFY( decoration.count() == 1 ); |
|
144 |
|
145 // Test call, event type supports call |
|
146 QVariant callData = mModel->data(mModel->index(0), LogsDetailsModel::RoleCall); |
|
147 LogsCall *call = qVariantValue<LogsCall *>( callData ); |
|
148 QVERIFY( call ); |
|
149 delete call; |
|
150 |
|
151 // Test call, event type does not support call |
|
152 mModel->mEvent->setEventType(LogsEvent::TypeUndefined); |
|
153 QVariant callData2 = mModel->data(mModel->index(0), LogsDetailsModel::RoleCall); |
|
154 LogsCall *call2 = qVariantValue<LogsCall *>( callData2 ); |
|
155 QVERIFY( !call2 ); |
|
156 |
|
157 // Test message |
|
158 QVariant messageData = mModel->data(mModel->index(0), LogsDetailsModel::RoleMessage); |
|
159 LogsMessage* message = qVariantValue<LogsMessage *>( messageData ); |
|
160 QVERIFY( message != 0 ); |
|
161 delete message; |
|
162 LogsEventData* eventData = new LogsEventData; |
|
163 eventData->mRemoteUrl = "test@1.2.3.4"; |
|
164 mModel->mEvent->setLogsEventData( eventData ); |
|
165 QVariant messageData2 = mModel->data(mModel->index(0), LogsDetailsModel::RoleMessage); |
|
166 LogsMessage* message2 = qVariantValue<LogsMessage *>( messageData2 ); |
|
167 QVERIFY( message2 == 0 ); |
|
168 |
|
169 // Contact supported |
|
170 QVERIFY( mModel->mEvent->getNumberForCalling().length() > 0 ); |
|
171 QVariant contactData = mModel->data(mModel->index(0), LogsDetailsModel::RoleContact); |
|
172 LogsContact *contact = qVariantValue<LogsContact *>( contactData ); |
|
173 QVERIFY( contact ); |
|
174 delete contact; |
|
175 |
|
176 // Contact not supported |
|
177 mModel->mEvent->setNumber(""); |
|
178 mModel->mEvent->setLogsEventData( 0 ); |
|
179 contactData = mModel->data(mModel->index(0), LogsModel::RoleContact); |
|
180 contact = qVariantValue<LogsContact *>( contactData ); |
|
181 QVERIFY( !contact ); |
|
182 } |
|
183 |
|
184 void UT_LogsDetailsModel::testHeaderData() |
|
185 { |
|
186 QCOMPARE(mModel->headerData(0, Qt::Vertical).toString(), |
|
187 testDetailsRemoteInfo); |
|
188 QVERIFY(mModel->headerData(0, Qt::Vertical, Qt::DecorationRole).isNull()); |
|
189 } |
|
190 |
|
191 void UT_LogsDetailsModel::testgetRemoteUri() |
|
192 { |
|
193 LogsEvent event; |
|
194 QVERIFY( mModel->getRemoteUri(event) == QString("") ); |
|
195 LogsEventData* eventData = new LogsEventData; |
|
196 eventData->mRemoteUrl = "test@1.2.3.4"; |
|
197 mModel->mEvent->setLogsEventData( eventData ); |
|
198 QVERIFY( mModel->getRemoteUri(*mModel->mEvent) == QString("test@1.2.3.4") ); |
|
199 } |
|
200 |
|
201 void UT_LogsDetailsModel::testInitTextsAndIcons() |
|
202 { |
|
203 //No VoIP call,no remote url or local url and contactname |
|
204 testDetailsDateAndTime.setTime_t( 3000 ); |
|
205 LogsEvent event; |
|
206 event.setRemoteParty( testDetailsRemoteParty ); |
|
207 event.setNumber( testDetailsRemoteNum ); |
|
208 event.setTime( testDetailsDateAndTime ); |
|
209 event.setDirection( testDetailsDirection ); |
|
210 event.setEventType( testDetailsEventType ); |
|
211 event.setDuration( testDetailsDuration ); |
|
212 LogsDetailsModel* model = new LogsDetailsModel(*mDbConnector, event); |
|
213 QVERIFY(model->mDetailIcons.count() == 5); |
|
214 QVERIFY(model->mDetailTexts.count() == 5); |
|
215 delete model; |
|
216 model = 0; |
|
217 |
|
218 //No VoIP call,no remote url or local url and no contactname |
|
219 testDetailsDateAndTime.setTime_t( 3000 ); |
|
220 event.setRemoteParty( testEmpty ); |
|
221 event.setNumber( testDetailsRemoteNum ); |
|
222 event.setTime( testDetailsDateAndTime ); |
|
223 event.setDirection( testDetailsDirection ); |
|
224 event.setEventType( testDetailsEventType ); |
|
225 event.setDuration( testDetailsDuration ); |
|
226 model = new LogsDetailsModel(*mDbConnector, event); |
|
227 QVERIFY(model->mDetailIcons.count() == 4); |
|
228 QVERIFY(model->mDetailTexts.count() == 4); |
|
229 delete model; |
|
230 model = 0; |
|
231 |
|
232 //VoIP call,only remote url,no contact name |
|
233 testDetailsDateAndTime.setTime_t( 3000 ); |
|
234 event.setRemoteParty( testEmpty ); |
|
235 event.setNumber( testEmpty ); |
|
236 event.setTime( testDetailsDateAndTime ); |
|
237 event.setDirection( testDetailsDirection ); |
|
238 event.setEventType( testDetailsEventType ); |
|
239 event.setDuration( testDetailsDuration ); |
|
240 LogsEventData* eventData = new LogsEventData; |
|
241 eventData->mRemoteUrl = "tester@100.200.300.400"; |
|
242 event.setLogsEventData( eventData ); |
|
243 model = new LogsDetailsModel(*mDbConnector, event); |
|
244 QVERIFY(model->mDetailIcons.count() == 4); |
|
245 QVERIFY(model->mDetailTexts.count() == 4); |
|
246 delete model; |
|
247 model = 0; |
|
248 |
|
249 //VoIP call,only remote url, contact name |
|
250 testDetailsDateAndTime.setTime_t( 3000 ); |
|
251 event.setRemoteParty( testDetailsRemoteParty ); |
|
252 event.setNumber( testEmpty ); |
|
253 event.setTime( testDetailsDateAndTime ); |
|
254 event.setDirection( testDetailsDirection ); |
|
255 event.setEventType( testDetailsEventType ); |
|
256 event.setDuration( testDetailsDuration ); |
|
257 eventData = new LogsEventData; |
|
258 eventData->mRemoteUrl = "tester@100.200.300.400"; |
|
259 event.setLogsEventData( eventData ); |
|
260 model = new LogsDetailsModel(*mDbConnector, event); |
|
261 QVERIFY(model->mDetailIcons.count() == 5); |
|
262 QVERIFY(model->mDetailTexts.count() == 5); |
|
263 delete model; |
|
264 model = 0; |
|
265 |
|
266 //VoIP call,remote uri and local uri, contact name |
|
267 testDetailsDateAndTime.setTime_t( 3000 ); |
|
268 event.setRemoteParty( testDetailsRemoteParty ); |
|
269 event.setNumber( testEmpty ); |
|
270 event.setTime( testDetailsDateAndTime ); |
|
271 event.setDirection( testDetailsDirection ); |
|
272 event.setEventType( testDetailsEventType ); |
|
273 event.setDuration( testDetailsDuration ); |
|
274 eventData = new LogsEventData; |
|
275 eventData->mRemoteUrl = "tester@100.200.300.400"; |
|
276 eventData->mLocalUrl = "caller@100.200.300.400"; |
|
277 event.setLogsEventData( eventData ); |
|
278 model = new LogsDetailsModel(*mDbConnector, event); |
|
279 QVERIFY(model->mDetailIcons.count() == 5); |
|
280 QVERIFY(model->mDetailTexts.count() == 5); |
|
281 delete model; |
|
282 model = 0; |
|
283 |
|
284 // Missed call, duration is not shown |
|
285 // No VoIP call,no remote url or local url and contactname |
|
286 event.setRemoteParty( testDetailsRemoteParty ); |
|
287 event.setNumber( testDetailsRemoteNum ); |
|
288 event.setTime( testDetailsDateAndTime ); |
|
289 event.setEventType( testDetailsEventType ); |
|
290 event.setDirection( LogsEvent::DirMissed ); |
|
291 model = new LogsDetailsModel(*mDbConnector, event); |
|
292 QVERIFY(model->mDetailIcons.count() == 4); |
|
293 QVERIFY(model->mDetailTexts.count() == 4); |
|
294 delete model; |
|
295 model = 0; |
|
296 } |
|
297 |
|
298 void UT_LogsDetailsModel::testInitUnseenMissed() |
|
299 { |
|
300 LogsDbConnectorStubHelper::reset(); |
|
301 testDetailsDateAndTime.setTime_t( 3000 ); |
|
302 QString dateAndTimeRowHeading; |
|
303 |
|
304 // No duplicates |
|
305 LogsEvent event; |
|
306 event.setRemoteParty( testDetailsRemoteParty ); |
|
307 event.setNumber( testDetailsRemoteNum ); |
|
308 event.setTime( testDetailsDateAndTime ); |
|
309 event.setDirection( LogsEvent::DirMissed ); |
|
310 event.setEventType( testDetailsEventType ); |
|
311 event.setDuration( testDetailsDuration ); |
|
312 LogsDetailsModel* model = new LogsDetailsModel(*mDbConnector, event); |
|
313 QVERIFY(model->mDetailIcons.count() == 4); |
|
314 QVERIFY(model->mDetailTexts.count() == 4); |
|
315 QVERIFY(LogsDbConnectorStubHelper::lastCalledFunction().isEmpty()); |
|
316 dateAndTimeRowHeading = model->mDetailTexts.at(1).at(0); |
|
317 delete model; |
|
318 model = 0; |
|
319 |
|
320 // Already read |
|
321 event.setIsRead(true); |
|
322 model = new LogsDetailsModel(*mDbConnector, event); |
|
323 QVERIFY(model->mDetailIcons.count() == 4); |
|
324 QVERIFY(model->mDetailTexts.count() == 4); |
|
325 QVERIFY(LogsDbConnectorStubHelper::lastCalledFunction().isEmpty()); |
|
326 delete model; |
|
327 model = 0; |
|
328 |
|
329 // Not read and duplicates exist |
|
330 event.setIsRead(false); |
|
331 event.setDuplicates(3); |
|
332 model = new LogsDetailsModel(*mDbConnector, event); |
|
333 QVERIFY(model->mDetailIcons.count() == 4); |
|
334 QVERIFY(model->mDetailTexts.count() == 4); |
|
335 QVERIFY(LogsDbConnectorStubHelper::lastCalledFunction() == "readDuplicates" ); |
|
336 |
|
337 // Reading duplicates completes |
|
338 QSignalSpy spy( model, SIGNAL(modelReset()) ); |
|
339 LogsEvent* dup1 = new LogsEvent; |
|
340 model->mDbConnector->mDuplicatedEvents.append(dup1); |
|
341 LogsEvent* dup2 = new LogsEvent; |
|
342 model->mDbConnector->mDuplicatedEvents.append(dup2); |
|
343 model->duplicatesRead(); |
|
344 QVERIFY(model->mDetailIcons.count() == 6); |
|
345 QVERIFY(model->mDetailTexts.count() == 6); |
|
346 // When having multiple date and time items, first item has different heading than others |
|
347 QVERIFY( model->mDetailTexts.at(1).at(0) != dateAndTimeRowHeading ); |
|
348 QVERIFY( model->mDetailTexts.at(5).at(0) == dateAndTimeRowHeading ); |
|
349 delete model; |
|
350 model = 0; |
|
351 |
|
352 } |
|
353 |
|
354 void UT_LogsDetailsModel::testGetHeaderData() |
|
355 { |
|
356 // No name or number |
|
357 LogsEvent event; |
|
358 QVERIFY( mModel->getHeaderData(event) == hbTrId("txt_dial_dblist_call_id_val_unknown_number") ); |
|
359 |
|
360 // No name |
|
361 QString num("+12345555"); |
|
362 event.setNumber(num); |
|
363 QVERIFY( mModel->getHeaderData(event) == num ); |
|
364 |
|
365 // No number |
|
366 QString remote("Souuu"); |
|
367 event.setRemoteParty(remote); |
|
368 event.setNumber(""); |
|
369 QVERIFY( mModel->getHeaderData(event) == remote ); |
|
370 |
|
371 // Both |
|
372 event.setNumber(num); |
|
373 QVERIFY( mModel->getHeaderData(event) == remote ); |
|
374 |
|
375 // Only remote url |
|
376 event.setNumber(""); |
|
377 event.setRemoteParty(""); |
|
378 LogsEventData* eventData = new LogsEventData; |
|
379 eventData->mRemoteUrl = "test@1.2.3.4"; |
|
380 event.setLogsEventData( eventData ); |
|
381 QVERIFY( mModel->getHeaderData(event) == eventData->mRemoteUrl ); |
|
382 } |
|
383 |
|
384 |
|
385 void UT_LogsDetailsModel::testGetCallerId() |
|
386 { |
|
387 // No name or number |
|
388 LogsEvent event; |
|
389 QVERIFY( mModel->getCallerId(event) == QString("") ); |
|
390 |
|
391 // No name |
|
392 QString num("+12345555"); |
|
393 event.setNumber(num); |
|
394 QVERIFY( mModel->getCallerId(event) == QString("") ); |
|
395 |
|
396 // No number |
|
397 QString remote("Souuu"); |
|
398 event.setRemoteParty(remote); |
|
399 event.setNumber(""); |
|
400 QVERIFY( mModel->getCallerId(event) == QString("") ); |
|
401 |
|
402 // Both |
|
403 event.setNumber(num); |
|
404 QVERIFY( mModel->getCallerId(event) == num ); |
|
405 |
|
406 //Only number |
|
407 event.setRemoteParty(""); |
|
408 QVERIFY( mModel->getCallerId(event) == QString("") ); |
|
409 |
|
410 // Only remote url |
|
411 event.setNumber(""); |
|
412 event.setRemoteParty("contactname"); |
|
413 LogsEventData* eventData = new LogsEventData; |
|
414 eventData->mRemoteUrl = "test@1.2.3.4"; |
|
415 event.setLogsEventData( eventData ); |
|
416 QVERIFY( mModel->getCallerId(event) == eventData->mRemoteUrl ); |
|
417 } |
|
418 |
|
419 void UT_LogsDetailsModel::testCreateContact() |
|
420 { |
|
421 LogsEvent event; |
|
422 LogsModelItemContainer item(&event); |
|
423 LogsContact* contact = qVariantValue<LogsContact*>(mModel->createContact(item)); |
|
424 QVERIFY( !contact ); |
|
425 |
|
426 LogsEvent event2; |
|
427 event2.setNumber("2145"); |
|
428 LogsModelItemContainer item2(&event2); |
|
429 contact = qVariantValue<LogsContact*>(mModel->createContact(item2)); |
|
430 QVERIFY( contact ); |
|
431 delete contact; |
|
432 } |
|
433 |
|
434 void UT_LogsDetailsModel::testContactActionCompleted() |
|
435 { |
|
436 mModel->mDetailTexts.clear(); |
|
437 mModel->contactActionCompleted(false); |
|
438 QVERIFY( mModel->mDetailTexts.count() == 0 ); |
|
439 |
|
440 // No match |
|
441 mModel->mEvent->setRemoteParty( "" ); |
|
442 mModel->mEvent->setNumber( "123445" ); |
|
443 mModel->contactActionCompleted(true); |
|
444 QVERIFY( mModel->mDetailTexts.count() == 0 ); |
|
445 QVERIFY( mModel->mEvent->remoteParty().length() == 0 ); |
|
446 |
|
447 // Match |
|
448 QtContactsStubsHelper::setContactNames("first", "last"); |
|
449 mModel->mEvent->setRemoteParty( "" ); |
|
450 mModel->mEvent->setNumber( "11112222" ); |
|
451 mModel->contactActionCompleted(true); |
|
452 QVERIFY( mModel->mDetailTexts.count() > 0 ); |
|
453 QVERIFY( mModel->mEvent->remoteParty().length() > 0 ); |
|
454 } |