--- a/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.cpp Mon May 03 12:24:20 2010 +0300
+++ b/phonebookui/cnthistorymodel/tsrc/mt_cnthistorymodel/mt_cnthistorymodel.cpp Fri May 14 15:42:23 2010 +0300
@@ -18,238 +18,312 @@
#include <QtTest/QtTest>
#include "mt_cnthistorymodel.h"
+#include "cnthistorymodel_p.h"
#include "cnthistorymodel.h"
-#include "stub_classes.h"
+
+void TestCntHistoryModel::init()
+{
+ cm = new QContactManager("symbian");
+ model = new CntHistoryModel(1, cm);
+ model->d->m_List.clear();
+ model->d->m_logsMap.clear();
+ model->d->m_msgMap.clear();
+}
+
+void TestCntHistoryModel::cleanup()
+{
+ delete cm;
+ delete model;
+}
+
+void TestCntHistoryModel::testLogsInsertions()
+{
+ QSignalSpy spy( model, SIGNAL(rowsInserted(const QModelIndex &, int, int)));
+ model->logsRowsInserted(QModelIndex(), 0, 0);
+
+ QVERIFY(model->rowCount() == 1);
+ QVERIFY(model->d->m_logsMap.count() == 1);
+ QVERIFY(spy.count() == 1);
+}
-void TestCntHistoryModel::initTestCase()
+void TestCntHistoryModel::testLogsRemovals()
+{
+ model->logsRowsInserted(QModelIndex(), 0, 0);
+
+ QSignalSpy spy( model, SIGNAL(rowsRemoved(const QModelIndex &, int, int)));
+ model->logsRowsRemoved(QModelIndex(), 0, 0);
+ QVERIFY(model->rowCount() == 0);
+ QVERIFY(model->d->m_logsMap.count() == 0);
+ QVERIFY(spy.count() == 1);
+
+ // Remove the same item
+ QSignalSpy spy1( model, SIGNAL(rowsRemoved(const QModelIndex &, int, int)));
+ model->logsRowsRemoved(QModelIndex(), 0, 0);
+ QVERIFY(spy1.count() == 0);
+}
+
+void TestCntHistoryModel::testLogsUpdates()
+{
+ model->logsRowsInserted(QModelIndex(), 0, 0);
+
+ QSignalSpy spy( model, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)));
+ QModelIndex in = model->d->m_AbstractLogsModel->index(0,0);
+ model->logsDataChanged(in, in);
+ QVERIFY(spy.count() == 1);
+}
+
+void TestCntHistoryModel::testMsgInsertions()
{
+ QList<MsgItem> msgs;
+ MsgItem msg1;
+ msg1.setId(111);
+ MsgItem msg2;
+ msg2.setId(222);
+ MsgItem msg3;
+ msg3.setId(333);
+ msgs.append(msg1);
+ msgs.append(msg2);
+ msgs.append(msg3);
+
+ QSignalSpy spy( model, SIGNAL(rowsInserted(const QModelIndex &, int, int)));
+ model->messagesReady(msgs);
+
+ QVERIFY(model->rowCount() == 3);
+ QVERIFY(model->d->m_msgMap.count() == 3);
+ QVERIFY(model->d->m_msgMap.contains(111));
+ QVERIFY(model->d->m_msgMap.contains(222));
+ QVERIFY(model->d->m_msgMap.contains(333));
+ QVERIFY(spy.count() == 1);
+
+ MsgItem msg;
+ QSignalSpy spy2( model, SIGNAL(rowsInserted(const QModelIndex &, int, int)));
+ model->messageAdded(msg);
+ QVERIFY(model->rowCount() == 4);
+ QVERIFY(model->d->m_msgMap.count() == 4);
+ QVERIFY(spy2.count() == 1);
+
}
-void TestCntHistoryModel::cleanupTestCase()
+void TestCntHistoryModel::testMsgRemovals()
+{
+ QList<MsgItem> msgs;
+ MsgItem msg1;
+ msg1.setId(111);
+ MsgItem msg2;
+ msg2.setId(222);
+ MsgItem msg3;
+ msg3.setId(333);
+ msgs.append(msg1);
+ msgs.append(msg2);
+ msgs.append(msg3);
+ model->messagesReady(msgs);
+
+ QSignalSpy spy( model, SIGNAL(rowsRemoved(const QModelIndex &, int, int)));
+ model->messageDeleted(msg2);
+ QVERIFY(!model->d->m_msgMap.contains(222));
+ QVERIFY(model->rowCount() == 2);
+ QVERIFY(spy.count() == 1);
+
+ // Increase code coverage
+ HItemPointer p;
+ model->d->m_msgMap.insert(333, p);
+ model->messageDeleted(msg3);
+}
+
+void TestCntHistoryModel::testMsgUpdates()
{
+ QList<MsgItem> msgs;
+ MsgItem msg1;
+ msg1.setId(111);
+ MsgItem msg2;
+ msg2.setId(222);
+ MsgItem msg3;
+ msg3.setId(333);
+ msgs.append(msg1);
+ msgs.append(msg2);
+ msgs.append(msg3);
+ model->messagesReady(msgs);
+
+ QSignalSpy spy( model, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)));
+ QString s("test message");
+ msg2.setBody(s);
+ model->messageChanged(msg2);
+ QVERIFY(model->d->m_msgMap.value(222)->message == s);
+ QVERIFY(spy.count() == 1);
+
+ // Increase code coverage
+ HItemPointer p;
+ model->d->m_msgMap.insert(333, p);
+ model->messageChanged(msg3);
+}
+
+void TestCntHistoryModel::testReadLogEvent()
+{
+ LogsEvent event;
+ HItemPointer item(new HistoryItem);
+ model->readLogEvent(&event, *item);
+
+ QVERIFY(event.time() == item->timeStamp);
+ QVERIFY(item->flags & CntHistoryModel::Incoming);
+ QVERIFY(event.number() == item->number);
+ QVERIFY(item->flags & CntHistoryModel::CallLog);
+ QVERIFY(!item->message.isEmpty());
+
+ // Increase code coverage
+ model->d->m_isMyCard = true;
+ model->readLogEvent(&event, *item);
+}
+
+void TestCntHistoryModel::testReadMsgEvent()
+{
+ MsgItem msg;
+ QString body("Some message");
+ msg.setBody(body);
+ msg.setDirection(MsgItem::MsgDirectionIncoming);
+ msg.setPhoneNumber("123456");
+ QDateTime d = QDateTime(QDate(2012, 12, 12), QTime(12, 23, 10));
+ msg.setTimeStamp(d.toTime_t());
+
+ HItemPointer item(new HistoryItem);
+ model->readMsgEvent(msg, *item);
+
+ QVERIFY(item->timeStamp == d);
+ QVERIFY(item->message == body);
+ QVERIFY(item->flags & CntHistoryModel::Message);
+ QVERIFY(item->number == QString("123456"));
+ QVERIFY(item->flags & CntHistoryModel::Incoming);
}
void TestCntHistoryModel::testRoles()
{
- // Contact centric history data
- QContactManager* cm = new QContactManager("symbian");
- QContact c;
- QVERIFY(cm->saveContact(&c));
- CntHistoryModel* model = new CntHistoryModel(c.localId(), cm);
- QVERIFY(model != 0);
- QVERIFY(model->rowCount() == FILTERED_EVENTS);
+ MsgItem msg;
+ model->messageAdded(msg);
+
+ QModelIndex modelIndex = model->index(0, 0);
+ QVERIFY(modelIndex.isValid());
// Branded icon path
- int index = 1;
- QModelIndex modelIndex = model->index(index, 0);
- QVERIFY(modelIndex.isValid());
- QVariant var = modelIndex.data(Qt::DecorationRole);
- QVERIFY(var.type() == QVariant::String);
+ //QVariant var = modelIndex.data(Qt::DecorationRole);
+ //QVERIFY(var.type() == QVariant::String);
- // Direction
- modelIndex = model->index(index, 0);
- QVERIFY(modelIndex.isValid());
- var = modelIndex.data(DirectionRole);
+ // FlagsRole
+ var = modelIndex.data(CntHistoryModel::FlagsRole);
QVERIFY(var.type() == QVariant::Int);
- QVERIFY(var.toInt() == Incoming ||
- var.toInt() == Outgoing ||
- var.toInt() == Missed);
// Display role
- modelIndex = model->index(index, 0);
- QVERIFY(modelIndex.isValid());
var = modelIndex.data(Qt::DisplayRole);
- QString str = QString(cc_msg).arg(index);
- QVERIFY(var.toStringList().at(0) == "");
- QDateTime t = constDateTime.addSecs(5*index);
- str = t.toString();
- QVERIFY(var.toStringList().at(2) == str);
-
- index = 3;
- modelIndex = model->index(index, 0);
- QVERIFY(modelIndex.isValid());
- var = modelIndex.data(Qt::DisplayRole);
- str = QString(cc_msg).arg(index);
QVERIFY(var.type() == QVariant::StringList);
- QVERIFY(var.toStringList().at(0) == "");
- t = constDateTime.addSecs(5*index);
- str = t.toString();
- QVERIFY(var.toStringList().at(2) == str);
-
- // decoration role
- modelIndex = model->index(index, 0);
- QVERIFY(modelIndex.isValid());
- var = modelIndex.data(Qt::DecorationRole);
- QVERIFY(var.type() == QVariant::String);
- QVERIFY(var.toString() == QString("qtg_small_missed_call") ||
- var.toString() == QString("qtg_small_sent") ||
- var.toString() == QString("qtg_small_received"));
-
- // SeenStatusRole
- index = 1;
- modelIndex = model->index(index, 0);
- QVERIFY(modelIndex.isValid());
- var = modelIndex.data(SeenStatusRole);
- QVERIFY(var.type() == QVariant::Int);
- QVERIFY(var.toInt() == Unseen ||
- var.toInt() == Seen);
-
- // ItemTypeRole
- index = 1;
- modelIndex = model->index(index, 0);
- QVERIFY(modelIndex.isValid());
- var = modelIndex.data(ItemTypeRole);
- QVERIFY(var.type() == QVariant::Int);
- QVERIFY(var.toInt() == CallLog ||
- var.toInt() == Message);
// PhoneNumberRole
- modelIndex = model->index(index, 0);
- QVERIFY(modelIndex.isValid());
- var = modelIndex.data(PhoneNumberRole);
+ var = modelIndex.data(CntHistoryModel::PhoneNumberRole);
QVERIFY(var.type() == QVariant::String);
- QVERIFY(var.toString() == "1234567");
+
+ // BackgroundRole
+ var = modelIndex.data(Qt::BackgroundRole);
+ QVERIFY(var.type() > (QVariant::UserType - 1));
// Invalid role
- index = 1;
- modelIndex = model->index(index, 0);
- QVERIFY(modelIndex.isValid());
- var = modelIndex.data(1000);
+ var = modelIndex.data(-10);
QVERIFY(var.type() == QVariant::Invalid);
// Invalid indices
- modelIndex = model->index(-1, 0);
+ modelIndex = model->index(-10, 0);
QVERIFY(!modelIndex.isValid());
- var = modelIndex.data(Qt::DisplayRole);
- QVERIFY(var.type() == QVariant::Invalid);
-
var = model->data(modelIndex, Qt::DisplayRole);
QVERIFY(var.type() == QVariant::Invalid);
modelIndex = model->index(100, 0);
QVERIFY(!modelIndex.isValid());
- var = modelIndex.data(Qt::DisplayRole);
- QVERIFY(var.type() == QVariant::Invalid);
+ // Stored history item is null
+ model->d->m_List.first().clear();
+ modelIndex = model->index(0, 0);
var = model->data(modelIndex, Qt::DisplayRole);
QVERIFY(var.type() == QVariant::Invalid);
-
- // Test all conversations
- QVERIFY(cm->setSelfContactId(c.localId()));
- delete model;
- model = new CntHistoryModel(c.localId(), cm);
- QVERIFY(model != 0);
- QVERIFY(model->rowCount() == ALL_EVENTS);
-
- cm->removeContact(c.localId());
-
- delete cm;
- delete model;
}
void TestCntHistoryModel::testSorting()
{
- QContactManager* cm = new QContactManager("symbian");
- QContact c;
- QVERIFY(cm->saveContact(&c));
- CntHistoryModel* model = new CntHistoryModel(c.localId(), cm);
- QVERIFY(model != 0);
- QVERIFY(model->rowCount() == FILTERED_EVENTS);
+ // Create random data
+ QList<int> delta;
+ delta.append(23);
+ delta.append(12);
+ delta.append(45);
+ delta.append(32);
+ delta.append(67);
+ delta.append(45);
+ delta.append(92);
+ delta.append(12);
+
+ QDateTime dt = QDateTime::currentDateTime();
+
+ for(int i=0; i<delta.count(); i++) {
+ HItemPointer p(new HistoryItem());
+ dt = dt.addMSecs(delta.at(i));
+ p.data()->timeStamp = dt.toLocalTime();
+ if ( i % 2 )
+ p.data()->flags |= CntHistoryModel::CallLog;
+ else
+ p.data()->flags |= CntHistoryModel::Message;
+
+ qDebug() << "Flag: " << p.data()->flags;
+ qDebug() << "Delta: " << delta.at(i);
+ model->d->m_List.append(p);
+ }
// Sort ascending
- QSignalSpy spy( model, SIGNAL( layoutChanged()));
+ QSignalSpy spy( model, SIGNAL( rowsInserted(const QModelIndex &, int, int)));
model->sortAndRefresh(Qt::AscendingOrder);
- QModelIndex modelIndex = model->index(1, 0);
- QVERIFY(modelIndex.isValid());
- QVariant var = modelIndex.data(Qt::DisplayRole);
- QDateTime dt1 = QDateTime::fromString(var.toStringList().at(2));
-
- modelIndex = model->index(2, 0);
- QVERIFY(modelIndex.isValid());
- var = modelIndex.data(Qt::DisplayRole);
- QDateTime dt2 = QDateTime::fromString(var.toStringList().at(2));
- QVERIFY(dt1 < dt2);
- QVERIFY(spy.count() == 1);
+ QVERIFY(spy.count() == 1);
+ HItemPointer current = model->d->m_List.first();
+ for(int i=1; i<model->d->m_List.count(); i++) {
+ QVERIFY(current.data()->timeStamp <= model->d->m_List.at(i).data()->timeStamp);
+ current = model->d->m_List.at(i);
+ }
// Sort descending
- QSignalSpy spy1( model, SIGNAL( layoutChanged()));
+ QSignalSpy spy1( model, SIGNAL( rowsInserted(const QModelIndex &, int, int)));
model->sortAndRefresh(Qt::DescendingOrder);
- modelIndex = model->index(1, 0);
- QVERIFY(modelIndex.isValid());
- var = modelIndex.data(Qt::DisplayRole);
- dt1 = QDateTime::fromString(var.toStringList().at(2));
-
- modelIndex = model->index(2, 0);
- QVERIFY(modelIndex.isValid());
- var = modelIndex.data(Qt::DisplayRole);
- dt2 = QDateTime::fromString(var.toStringList().at(2));
- QVERIFY(dt1 > dt2);
- QVERIFY(spy1.count() == 1);
-
- cm->removeContact(c.localId());
- delete model;
- delete cm;
+ QVERIFY(spy1.count() == 1);
+ current = model->d->m_List.last();
+ for(int i=model->d->m_List.count(); i<1; i--) {
+ QVERIFY(current.data()->timeStamp >= model->d->m_List.at(i).data()->timeStamp);
+ current = model->d->m_List.at(i);
+ }
}
void TestCntHistoryModel::testClear()
{
- QContactManager* cm = new QContactManager("symbian");
- QContact c;
- QVERIFY(cm->saveContact(&c));
- CntHistoryModel* model = new CntHistoryModel(c.localId(), cm);
- QVERIFY(model != 0);
- QVERIFY(model->rowCount() == FILTERED_EVENTS);
+ model->logsRowsInserted(QModelIndex(), 0, 0);
- // Clear history
+ // Clear history with log
QSignalSpy spy( model, SIGNAL( rowsRemoved(const QModelIndex &, int, int)));
- int beforeClear = model->rowCount();
model->clearHistory();
- QTest::qWait(1000); // wait clearing completion
QVERIFY( model->rowCount() == 0 );
QVERIFY(spy.count() == 1);
- QList<QVariant> arguments = spy.takeFirst();
- QVERIFY(arguments.at(1).type() == QVariant::Int);
- QVERIFY(arguments.at(2).type() == QVariant::Int);
- QVERIFY(arguments.at(2).toInt() == beforeClear);
-
// Clear already empty history view
QSignalSpy spy1( model, SIGNAL( rowsRemoved(const QModelIndex &, int, int)));
model->clearHistory();
- QTest::qWait(1000); // wait clearing completion
QVERIFY(spy1.count() == 0);
-
- cm->removeContact(c.localId());
- delete model;
- delete cm;
}
void TestCntHistoryModel::testMarkSeen()
{
- QContactManager* cm = new QContactManager("symbian");
- QContact c;
- QVERIFY(cm->saveContact(&c));
- CntHistoryModel* model = new CntHistoryModel(c.localId(), cm);
- QVERIFY(model != 0);
- QVERIFY(model->rowCount() == FILTERED_EVENTS);
-
// Mark history as seen
- QSignalSpy spy( model, SIGNAL( layoutChanged()));
+ QVERIFY(!model->d->m_isMarkedAsSeen);
model->markAllAsSeen();
- QTest::qWait(1000); // wait marking completion
- QVERIFY(spy.count() == 1);
+ QVERIFY(model->d->m_isMarkedAsSeen);
- // Mark already marked history as seen
- QSignalSpy spy1( model, SIGNAL( layoutChanged()));
+ // NOT TESTING! Increasing code coverage
model->markAllAsSeen();
- QTest::qWait(1000); // wait marking completion
- QVERIFY(spy1.count() == 0);
-
- cm->removeContact(c.localId());
- delete model;
- delete cm;
+ model->d->m_isMarkedAsSeen = false;
+ model->d->m_isMyCard = true;
+ model->initializeMsgModel();
+ model->markAllAsSeen();
+ model->clearHistory();
}
QTEST_MAIN(TestCntHistoryModel);