From 10cd05f1a4f2c0919204f7f48820c892d5a0a2d6 Mon Sep 17 00:00:00 2001 From: Frank Reininghaus Date: Wed, 17 Nov 2010 20:59:05 +0000 Subject: [PATCH] Add unit test which checks that DolphinDetailsView::expandedUrls() works as expected. svn path=/trunk/KDE/kdebase/apps/; revision=1198202 --- src/tests/dolphindetailsviewtest.cpp | 81 ++++++++++++++++++++++++++++ src/tests/testbase.h | 9 ++-- src/views/dolphindetailsview.h | 3 ++ 3 files changed, 89 insertions(+), 4 deletions(-) diff --git a/src/tests/dolphindetailsviewtest.cpp b/src/tests/dolphindetailsviewtest.cpp index 20d5daebd..0ca19bddd 100644 --- a/src/tests/dolphindetailsviewtest.cpp +++ b/src/tests/dolphindetailsviewtest.cpp @@ -40,11 +40,92 @@ class DolphinDetailsViewTest : public TestBase private slots: + void testExpandedUrls(); + void bug217447_shiftArrowSelection(); void bug234600_overlappingIconsWhenZooming(); +private: + + QModelIndex proxyModelIndexForUrl(const KUrl& url) const { + const QModelIndex index = m_dolphinModel->indexForUrl(url); + return m_proxyModel->mapFromSource(index); + } }; +/** + * This test verifies that DolphinDetailsView::expandedUrls() returns the right set of URLs. + * The test creates a folder hierarchy: 3 folders (a, b, c) contain 3 subfolders (also names a, b, c) each. + * Each of those contains 3 further subfolders of the same name. + */ + +void DolphinDetailsViewTest::testExpandedUrls() +{ + QStringList files; + QStringList subFolderNames; + subFolderNames << "a" << "b" << "c"; + + foreach(const QString& level1, subFolderNames) { + foreach(const QString& level2, subFolderNames) { + foreach(const QString& level3, subFolderNames) { + files << level1 + "/" + level2 + "/" + level3 + "/testfile"; + } + } + } + + createFiles(files); + + m_view->setMode(DolphinView::DetailsView); + DolphinDetailsView* detailsView = qobject_cast(itemView()); + QVERIFY(detailsView); + detailsView->setFoldersExpandable(true); + m_view->resize(400, 400); + m_view->show(); + QTest::qWaitForWindowShown(m_view); + reloadViewAndWait(); + + // We start with an empty set of expanded URLs. + QSet expectedExpandedUrls; + QCOMPARE(detailsView->expandedUrls(), expectedExpandedUrls); + + // Every time we expand a folder, we have to wait until the view has finished loading + // its contents before we can expand further subfolders. We keep track of the reloading + // using a signal spy. + QSignalSpy spyFinishedPathLoading(m_view, SIGNAL(finishedPathLoading(const KUrl&))); + + // Expand URLs one by one and verify the result of DolphinDetailsView::expandedUrls() + QStringList itemsToExpand; + itemsToExpand << "b" << "b/a" << "b/a/c" << "b/c" << "c"; + + foreach(const QString& item, itemsToExpand) { + KUrl url(m_path + item); + detailsView->expand(proxyModelIndexForUrl(url)); + expectedExpandedUrls += url; + QCOMPARE(detailsView->expandedUrls(), expectedExpandedUrls); + + // Before we proceed, we have to make sure that the view has finished + // loading the contents of the expanded folder. + while (spyFinishedPathLoading.isEmpty()) { + QTest::qWait(10); + } + spyFinishedPathLoading.takeFirst(); + } + + // Collapse URLs one by one and verify the result of DolphinDetailsView::expandedUrls() + QStringList itemsToCollapse; + itemsToCollapse << "b/c" << "b/a/c" << "c" << "b/a" << "b"; + + foreach(const QString& item, itemsToCollapse) { + KUrl url(m_path + item); + detailsView->collapse(proxyModelIndexForUrl(url)); + expectedExpandedUrls -= url; + QCOMPARE(detailsView->expandedUrls(), expectedExpandedUrls); + } + + m_view->hide(); + cleanupTestDir(); +} + /** * When the first item in the view is active and Shift is held while the "arrow down" * key is pressed repeatedly, the selection should grow by one item for each key press. diff --git a/src/tests/testbase.h b/src/tests/testbase.h index a940a5296..d29213291 100644 --- a/src/tests/testbase.h +++ b/src/tests/testbase.h @@ -30,7 +30,7 @@ class DolphinModel; class DolphinSortFilterProxyModel; class DolphinView; -/* +/** * The class TestBase aims to make writing Dolphin unit tests easier. * It provides functionality that almost every unit test needs: setup of the DolphinView and * easy creation of test files and subfolders in a temporary directory which is removed in @@ -56,7 +56,7 @@ public: KUrl testDirUrl() const; - /* + /** * The following functions create either a file, a list of files, or a directory. * The paths may be absolute or relative to the test directory. Any missing parent * directories will be created automatically. @@ -66,7 +66,7 @@ public: void createFiles(const QStringList& files); void createDir(const QString& path); - /* + /** * Remove the test directory and create an empty one. */ @@ -79,10 +79,11 @@ public: DolphinSortFilterProxyModel* m_proxyModel; DolphinView* m_view; + QString m_path; + private: KTempDir* m_tempDir; - QString m_path; QDir* m_dir; void makePathAbsoluteAndCreateParents(QString& path); diff --git a/src/views/dolphindetailsview.h b/src/views/dolphindetailsview.h index 479683f66..fddbdc6c0 100644 --- a/src/views/dolphindetailsview.h +++ b/src/views/dolphindetailsview.h @@ -211,6 +211,9 @@ private: QFont m_font; QSize m_decorationSize; + + // For unit tests + friend class DolphinDetailsViewTest; }; #endif -- 2.47.3