--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/tsrc/unittest_notesmodel/src/unittest_notesmodel.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,272 @@
+/*
+* Copyright (c) 2009 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:
+* NotesModel unit-test class.
+*
+*/
+
+// System includes
+#include <QtTest/QtTest>
+#include <QtGui>
+#include <QPointer>
+#include <e32base.h>
+
+// User includes
+#include "notesmodel.h"
+#include "agendautil.h"
+
+class TestNotesModel : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void handleEntriesDeletion(int var);
+
+private slots:
+ // Test case setup.
+ void initTestCase();
+ void cleanupTestCase();
+
+ // Test cases.
+ void test_construction();
+ void test_sourceModelAddNote();
+ void test_sourceModelDeleteNote();
+ void test_sourceModelUpdateNote();
+
+private:
+ QPointer<NotesModel> mNotesModel;
+ QPointer<AgendaUtil> mAgendaUtil;
+
+ QDateTime mStart;
+ QDateTime mEnd;
+
+ CActiveSchedulerWait *mWait;
+};
+
+/*!
+ \class TestNotesModel
+
+ This is unittest class for NotesModel apis.
+ */
+
+/*!
+ Slot called when all the entries have been deleted.
+ */
+void TestNotesModel::handleEntriesDeletion(int var)
+{
+ Q_UNUSED(var)
+
+ if (mWait && mWait->IsStarted()) {
+ mWait->AsyncStop();
+ }
+}
+
+/*!
+ This function is called to init the testcase.
+ Called for every test case execution.
+ */
+void TestNotesModel::initTestCase()
+{
+ QT_TRAP_THROWING(mAgendaUtil = new AgendaUtil(this););
+ QVERIFY(mAgendaUtil != 0);
+
+ // Connect to the required signals
+ connect(
+ mAgendaUtil, SIGNAL(entriesDeleted(int)),
+ this, SLOT(handleEntriesDeletion(int)));
+
+ mWait = 0;
+
+ mStart.setDate(QDate(1900, 1, 1));
+ mStart.setTime(QTime(0, 0, 0));
+ mEnd.setDate(QDate(2100, 30, 12));
+ mEnd.setTime(QTime(23, 59, 0));
+}
+
+/*!
+ This function is called when the testcase execution is
+ completed, for cleaning up.
+ */
+void TestNotesModel::cleanupTestCase()
+{
+ if (mAgendaUtil) {
+ delete mAgendaUtil;
+ }
+ if (mNotesModel) {
+ delete mNotesModel;
+ }
+ if (mWait && mWait->IsStarted()) {
+ mWait->AsyncStop();
+ }
+ if (mWait) {
+ delete mWait;
+ }
+}
+
+/*!
+ This test functions tests the construction of NotesModel object.
+ */
+void TestNotesModel::test_construction()
+{
+ mNotesModel = new NotesModel(mAgendaUtil, this);
+ QVERIFY(mNotesModel);
+
+ if (mNotesModel) {
+ delete mNotesModel;
+ QVERIFY(!mNotesModel);
+ }
+}
+
+/*!
+ This test function tests if the source model is updated when a note is
+ added.
+ */
+void TestNotesModel::test_sourceModelAddNote()
+{
+ mAgendaUtil->deleteEntries(mStart, mEnd, AgendaUtil::IncludeAll);
+ if (!mWait) {
+ mWait = new CActiveSchedulerWait;
+ }
+ if (!mWait->IsStarted()) {
+ mWait->Start();
+ }
+ mNotesModel = new NotesModel(mAgendaUtil, this);
+ QVERIFY(mNotesModel);
+
+ QAbstractItemModel *model = 0;
+ model = mNotesModel->sourceModel();
+ QVERIFY(model);
+ QVERIFY(!model->rowCount());
+
+ // Now save a note.
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeNote);
+ entry.setDescription("Hello");
+ entry.setLastModifiedDateTime(
+ QDateTime(QDate::currentDate(), QTime::currentTime()));
+ QVERIFY(mAgendaUtil->addEntry(entry));
+
+ // Now check the count in the model.
+ startTimer(1000);
+ QVERIFY(model->rowCount());
+ QVERIFY(model->rowCount() == 1);
+}
+
+/*!
+ This test function tests if the source model is updated when a note is
+ deleted.
+ */
+void TestNotesModel::test_sourceModelDeleteNote()
+{
+ mAgendaUtil->deleteEntries(mStart, mEnd, AgendaUtil::IncludeAll);
+ if (!mWait) {
+ mWait = new CActiveSchedulerWait;
+ }
+ if (!mWait->IsStarted()) {
+ mWait->Start();
+ }
+ mNotesModel = new NotesModel(mAgendaUtil, this);
+ QVERIFY(mNotesModel);
+
+ QAbstractItemModel *model = 0;
+ model = mNotesModel->sourceModel();
+ QVERIFY(model);
+ QVERIFY(!model->rowCount());
+
+ // Now save a note.
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeNote);
+ entry.setDescription("Hello");
+ entry.setLastModifiedDateTime(
+ QDateTime(QDate::currentDate(), QTime::currentTime()));
+ ulong id;
+ QVERIFY(id = mAgendaUtil->addEntry(entry));
+
+ // Now check the count in the model.
+ startTimer(1000);
+ QVERIFY(model->rowCount());
+ QVERIFY(model->rowCount() == 1);
+
+ // Verify if the model has the updated content.
+ startTimer(1000);
+ QModelIndex index = model->index(0, 0);
+ QVERIFY(index.isValid());
+ QStringList list = index.data(Qt::DisplayRole).value<QStringList>();
+ QCOMPARE(entry.description(), list.at(0));
+
+ // Delete the note saved above.
+ QVERIFY(mAgendaUtil->deleteEntry(id));
+ // Now check the count in the model.
+ startTimer(1000);
+ QVERIFY(!model->rowCount());
+}
+
+/*!
+ This test function tests if the source model is updated when a note is
+ modified.
+ */
+void TestNotesModel::test_sourceModelUpdateNote()
+{
+ mAgendaUtil->deleteEntries(mStart, mEnd, AgendaUtil::IncludeAll);
+ if (!mWait) {
+ mWait = new CActiveSchedulerWait;
+ }
+ if (!mWait->IsStarted()) {
+ mWait->Start();
+ }
+ mNotesModel = new NotesModel(mAgendaUtil, this);
+ QVERIFY(mNotesModel);
+
+ QAbstractItemModel *model = 0;
+ model = mNotesModel->sourceModel();
+ QVERIFY(model);
+ QVERIFY(!model->rowCount());
+
+ // Now save a note.
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeNote);
+ entry.setDescription("Hello");
+ entry.setLastModifiedDateTime(
+ QDateTime(QDate::currentDate(), QTime::currentTime()));
+ ulong id;
+ QVERIFY(id = mAgendaUtil->addEntry(entry));
+ // Now check the count in the model.
+ startTimer(1000);
+ QVERIFY(model->rowCount());
+ QVERIFY(model->rowCount() == 1);
+
+ // Now update the content on of the note created above.
+ entry = mAgendaUtil->fetchById(id);
+ QVERIFY(!entry.isNull());
+ entry.setDescription("Hello world");
+ QVERIFY(mAgendaUtil->updateEntry(entry));
+
+ // Verify if the model has the updated content.
+ startTimer(1000);
+ QModelIndex index = model->index(0, 0);
+ QVERIFY(index.isValid());
+ QStringList list = index.data(Qt::DisplayRole).value<QStringList>();
+ QCOMPARE(entry.description(), list.at(0));
+
+ // Delete the note saved above.
+ QVERIFY(mAgendaUtil->deleteEntry(id));
+ // Now check the count in the model.
+ startTimer(1000);
+ QVERIFY(!model->rowCount());
+}
+
+QTEST_MAIN(TestNotesModel)
+#include "unittest_notesmodel.moc"
+
+// End of file --Don't remove this.