From 727fd64e121f97b32d645e2fb26c4e93c413a849 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Thu, 17 May 2012 21:59:51 +0200 Subject: Create unit-test for KStandardItemModel --- src/tests/CMakeLists.txt | 11 ++++ src/tests/kstandarditemmodeltest.cpp | 117 +++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 src/tests/kstandarditemmodeltest.cpp (limited to 'src/tests') diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 830138e74..e5d3d6468 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -68,3 +68,14 @@ if (Nepomuk_FOUND) kde4_add_unit_test(dolphinsearchboxtest TEST ${dolphinsearchboxtest_SRCS}) target_link_libraries(dolphinsearchboxtest ${KDE4_KIO_LIBS} ${SOPRANO_LIBRARIES} ${NEPOMUK_LIBRARIES} ${NEPOMUK_QUERY_LIBRARIES} nepomukutils ${QT_QTTEST_LIBRARY}) endif (Nepomuk_FOUND) + +# KStandardItemModelTest +set(kstandarditemmodeltest_SRCS + kstandarditemmodeltest.cpp + ../kitemviews/kstandarditem.cpp + ../kitemviews/kstandarditemmodel.cpp + ../kitemviews/kitemmodelbase.cpp +) +kde4_add_unit_test(kstandarditemmodeltest TEST ${kstandarditemmodeltest_SRCS}) +target_link_libraries(kstandarditemmodeltest dolphinprivate ${KDE4_KIO_LIBS} ${QT_QTTEST_LIBRARY}) + diff --git a/src/tests/kstandarditemmodeltest.cpp b/src/tests/kstandarditemmodeltest.cpp new file mode 100644 index 000000000..2de0d0b78 --- /dev/null +++ b/src/tests/kstandarditemmodeltest.cpp @@ -0,0 +1,117 @@ +/*************************************************************************** + * Copyright (C) 2011 by Peter Penz * + * Copyright (C) 2011 by Frank Reininghaus * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * + ***************************************************************************/ + +#include + +#include "kitemviews/kstandarditem.h" +#include "kitemviews/kstandarditemmodel.h" + +class KStandardItemModelTest : public QObject +{ + Q_OBJECT + +private slots: + void init(); + void cleanup(); + + void testNewItems(); + void testRemoveItems(); + +private: + bool isModelConsistent() const; + +private: + KStandardItemModel* m_model; +}; + +void KStandardItemModelTest::init() +{ + m_model = new KStandardItemModel(); +} + +void KStandardItemModelTest::cleanup() +{ + delete m_model; + m_model = 0; +} + +void KStandardItemModelTest::testNewItems() +{ + m_model->insertItem(0, new KStandardItem("item 1")); + m_model->insertItem(0, new KStandardItem("item 2")); + m_model->insertItem(2, new KStandardItem("item 3")); + m_model->appendItem(new KStandardItem("item 4")); + m_model->insertItem(-1, new KStandardItem("invalid 1")); + m_model->insertItem(5, new KStandardItem("invalid 2")); + QCOMPARE(m_model->count(), 4); + QCOMPARE(m_model->item(0)->text(), QString("item 2")); + QCOMPARE(m_model->item(1)->text(), QString("item 1")); + QCOMPARE(m_model->item(2)->text(), QString("item 3")); + QCOMPARE(m_model->item(3)->text(), QString("item 4")); + + QVERIFY(isModelConsistent()); +} + +void KStandardItemModelTest::testRemoveItems() +{ + for (int i = 1; i <= 10; ++i) { + m_model->appendItem(new KStandardItem("item " + QString::number(i))); + } + + m_model->removeItem(0); + m_model->removeItem(3); + m_model->removeItem(5); + m_model->removeItem(-1); + QCOMPARE(m_model->count(), 7); + QCOMPARE(m_model->item(0)->text(), QString("item 2")); + QCOMPARE(m_model->item(1)->text(), QString("item 3")); + QCOMPARE(m_model->item(2)->text(), QString("item 4")); + QCOMPARE(m_model->item(3)->text(), QString("item 6")); + QCOMPARE(m_model->item(4)->text(), QString("item 7")); + QCOMPARE(m_model->item(5)->text(), QString("item 9")); + QCOMPARE(m_model->item(6)->text(), QString("item 10")); +} + +bool KStandardItemModelTest::isModelConsistent() const +{ + if (m_model->m_items.count() != m_model->m_indexesForItems.count()) { + return false; + } + + for (int i = 0; i < m_model->count(); ++i) { + const KStandardItem* item = m_model->item(i); + if (!item) { + qWarning() << "Item" << i << "is null"; + return false; + } + + const int itemIndex = m_model->index(item); + if (itemIndex != i) { + qWarning() << "Item" << i << "has a wrong index:" << itemIndex; + return false; + } + } + + return true; +} + +QTEST_KDEMAIN(KStandardItemModelTest, NoGUI) + +#include "kstandarditemmodeltest.moc" -- cgit v1.3