[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/apps/dolphin/src
From:       Frank Reininghaus <frank78ac () googlemail ! com>
Date:       2010-11-17 20:59:06
Message-ID: 20101117205906.1E547AC8A1 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1198202 by freininghaus:

Add unit test which checks that DolphinDetailsView::expandedUrls()
works as expected.


 M  +81 -0     tests/dolphindetailsviewtest.cpp  
 M  +5 -4      tests/testbase.h  
 M  +3 -0      views/dolphindetailsview.h  


--- trunk/KDE/kdebase/apps/dolphin/src/tests/dolphindetailsviewtest.cpp #1198201:1198202
@@ -40,12 +40,93 @@
 
 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<DolphinDetailsView*>(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<KUrl> 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.
  * A change in Qt 4.6 revealed a bug in DolphinDetailsView which broke this, see
--- trunk/KDE/kdebase/apps/dolphin/src/tests/testbase.h #1198201:1198202
@@ -30,7 +30,7 @@
 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 @@
 
     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 @@
     void createFiles(const QStringList& files);
     void createDir(const QString& path);
 
-    /*
+    /**
      * Remove the test directory and create an empty one.
      */
 
@@ -79,10 +79,11 @@
     DolphinSortFilterProxyModel* m_proxyModel;
     DolphinView* m_view;
 
+    QString m_path;
+
 private:
 
     KTempDir* m_tempDir;
-    QString m_path;
     QDir* m_dir;
 
     void makePathAbsoluteAndCreateParents(QString& path);
--- trunk/KDE/kdebase/apps/dolphin/src/views/dolphindetailsview.h #1198201:1198202
@@ -211,6 +211,9 @@
 
     QFont m_font;
     QSize m_decorationSize;
+
+    // For unit tests
+    friend class DolphinDetailsViewTest;
 };
 
 #endif
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic