From 0c963ff4a80645e36b3f5a8835d31626cb1c8ec7 Mon Sep 17 00:00:00 2001 From: Daniel Graziotin Date: Wed, 12 Jan 2011 18:31:35 +0100 Subject: [PATCH 1/2] reached acceptable code coverage for quickview.cpp --- autotests/quickview/tst_quickview.cpp | 23 ++++++++++++ src/quickview/quickview.cpp | 50 ++++++++++----------------- src/quickview/quickview.h | 23 ++++++------ 3 files changed, 54 insertions(+), 42 deletions(-) diff --git a/autotests/quickview/tst_quickview.cpp b/autotests/quickview/tst_quickview.cpp index ed235132..66ea64c5 100644 --- a/autotests/quickview/tst_quickview.cpp +++ b/autotests/quickview/tst_quickview.cpp @@ -96,6 +96,11 @@ private slots: */ void verifyFilterFrecencies(); + /** + * Verifies if the methods are fault tollerant + */ + void verifyFaults(); + private: QList m_history; @@ -335,6 +340,24 @@ void tst_QuickView::verifyFilterFrecencies() } +void tst_QuickView::verifyFaults() +{ + + HistoryManager* manager = BrowserApplication::historyManager(); + QuickView* quickView = BrowserApplication::quickView(); + quickView->calculate(); + + QVERIFY(quickView->mostVisitedEntries().size() == 0); + manager->addHistoryEntry(" "); + manager->addHistoryEntry(""); + manager->addHistoryEntry("qrc:/home.html"); + manager->addHistoryEntry("about:home"); + manager->addHistoryEntry("fake data"); + quickView->calculate(); + QVERIFY(quickView->mostVisitedEntries().size() == 0); + +} + QTEST_MAIN(tst_QuickView) #include "tst_quickview.moc" diff --git a/src/quickview/quickview.cpp b/src/quickview/quickview.cpp index bb42ffd8..469e95d8 100644 --- a/src/quickview/quickview.cpp +++ b/src/quickview/quickview.cpp @@ -31,20 +31,16 @@ #include #include -bool compareHistoryFrecencyEntries(const HistoryFrecencyEntry& a, const HistoryFrecencyEntry& b) -{ - // for a reverse quickSort. - return a > b; -} - HistoryFrecencyEntry::HistoryFrecencyEntry(const QString &u, const QDateTime &d, const QString &t, const int f, const QString &i): HistoryEntry(u, d, t), frecency(f), icon(i) {} +/* QuickView::QuickView(QObject* parent) :QObject(parent) { QuickView::QuickView(0 , parent); } +*/ QuickView::QuickView(int numberEntries, QObject* parent) :QObject(parent) @@ -82,7 +78,7 @@ void QuickView::calculate(){ for(int i = 0; i < numberEntries; i++) { QModelIndex index = model->index(i, 0, QModelIndex()); QUrl url(index.data(HistoryModel::UrlRole).toString()); - if (!url.isEmpty()){ + if (QuickView::isValid(url)){ QDateTime datetime = index.data(HistoryModel::DateTimeRole).toDateTime(); QString finalUrl = url.scheme() + QString::fromLatin1("://") + url.host(); QString finalTitle = url.host(); @@ -131,35 +127,11 @@ QByteArray QuickView::render() return quickViewPage(mostVisitedHtmlEntries); } - -QHash QuickView::getFrecencies() -{ - QuickViewFilterModel* model = BrowserApplication::historyManager()->quickViewFilterModel(); - int rowCount = model->rowCount(); - - int numberEntries = m_maxNumberEntries; - - if(rowCount < m_maxNumberEntries) - numberEntries = rowCount; - - QHash list; - - for(int i = 0; i < m_maxNumberEntries; i++) { - QModelIndex index = model->index(i, 0, QModelIndex()); - - QUrl url(index.data(HistoryModel::UrlRole).toString()); - QString finalUrl = url.scheme() + QString::fromLatin1("://") + url.host(); - int frec = index.data(HistoryFilterModel::FrecencyRole).toInt(); - list.insert(finalUrl, frec); - } - return list; -} - int QuickView::maxNumberEntries(){ return m_maxNumberEntries; } -QString QuickView::toBase64(QIcon icon){ +QString QuickView::toBase64(QIcon& icon){ if (icon.isNull()) return QString(); QImage image(icon.pixmap(20,20).toImage()); @@ -168,3 +140,17 @@ QString QuickView::toBase64(QIcon icon){ image.save(&buffer, "PNG"); // writes image into ba in PNG format. return QString::fromLatin1(byteArray.toBase64().data()); } + +bool QuickView::isValid(const QUrl& url) +{ + return !url.toString().contains(QString::fromLatin1(" ")) && url.isValid(); + //&& !url.toString().contains(QString::fromLatin1("qrc:/")) + //&& !url.toString().contains(QString::fromLatin1("about:")) + //&& !url.toString().contains(QString::fromLatin1("file://")); +} + +bool QuickView::compareHistoryFrecencyEntries(const HistoryFrecencyEntry& a, const HistoryFrecencyEntry& b) +{ + // a has most frecency than b + return a > b; +} diff --git a/src/quickview/quickview.h b/src/quickview/quickview.h index 79f3c80e..4bc4fa1f 100644 --- a/src/quickview/quickview.h +++ b/src/quickview/quickview.h @@ -89,7 +89,7 @@ Q_OBJECT * Default constructor for QObjects, it automatically sets * numberEntries to 0 */ - QuickView(QObject * parent=0); + //QuickView(QObject * parent=0); /** * Constructor for also setting the maximum number of entries * to be computed by QuickView @@ -130,19 +130,13 @@ Q_OBJECT */ QByteArray render(); + static bool isValid(const QUrl& url); + /** * Getter for m_maxNumberEntries */ int maxNumberEntries(); - /** - * Right now it is used just for the Unittests. It returns a QHASH - * of the frecencies of each most visited entry. - * @param numberEntries how many entries must be considered - * @return a hash table of URLs and frecencies - */ - QHash getFrecencies(); - /** * Default number of most visited entries to be considered */ @@ -164,7 +158,16 @@ public slots: * @param icon a QIcon * @return its representation in base64 */ - QString toBase64(QIcon icon); + QString toBase64(QIcon& icon); + + /** + * Comparison method to be used with qSort() + * @param a the first entry + * @param b the second entry + * @return true if a > b (a most visited) + */ + static bool compareHistoryFrecencyEntries(const HistoryFrecencyEntry& a, + const HistoryFrecencyEntry& b); /** * QList of HistoryFrecencyEntry that holds the most visited * entries From df6ef63cecca4ba5d2af8f2b1114881123fcb11e Mon Sep 17 00:00:00 2001 From: Daniel Graziotin Date: Sat, 15 Jan 2011 18:48:03 +0100 Subject: [PATCH 2/2] Final version of QuickView --- autotests/quickview/quickview.pro | 6 +- autotests/quickview/tst_quickview.cpp | 404 +++++++++++-------------- src/quickview/quickview.cpp | 24 +- src/quickview/quickview.h | 15 +- src/quickview/quickviewfiltermodel.cpp | 14 +- src/quickview/quickviewfiltermodel.h | 8 +- 6 files changed, 211 insertions(+), 260 deletions(-) diff --git a/autotests/quickview/quickview.pro b/autotests/quickview/quickview.pro index 4f71d855..32bfbcfe 100644 --- a/autotests/quickview/quickview.pro +++ b/autotests/quickview/quickview.pro @@ -9,5 +9,7 @@ LIBS += -lgcov include(../autotests.pri) # Input -SOURCES += tst_quickview.cpp -HEADERS += +SOURCES += \ + tst_quickview.cpp +HEADERS += \ + tst_quickview.h diff --git a/autotests/quickview/tst_quickview.cpp b/autotests/quickview/tst_quickview.cpp index 66ea64c5..0bad4af3 100644 --- a/autotests/quickview/tst_quickview.cpp +++ b/autotests/quickview/tst_quickview.cpp @@ -1,119 +1,16 @@ -/* - * Copyright 2008 Benjamin C. Meyer - * - * 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 "qtest_arora.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; - -class tst_QuickView : public QObject -{ - Q_OBJECT - -public slots: - /** - * Called before the beginning of the Unittest. - */ - void initTestCase(); - /** - * Called after the end of the Unittest. - * It restores the user history - */ - void cleanupTestCase(); - void init(); - void cleanup(); - -private slots: - // BEGIN: tests against real history - /** - * Verifies that, given an empty history, different max number entries of QuickView - * always produce a QList of length 0 - */ - void maxNumberEntriesEmptyHistory(); - - /** - * Verifies that, given an non empty history, different max number - * entries of QuickView always produce a QList - * of consistent length. - */ - void maxNumberEntriesNonEmptyHistory(); - - /** - * Verifies QuickView::mostVisitedEntriesHTML() about its return value, - * in all possible cases - */ - void mostVisitedEntriesHTML(); - - /** - * Verifies QuickView::mostVisitedEntries() checking - * consistency with QuickViewFilterModel - */ - void mostVisitedEntriesConsistency(); - - /** - * Verifies QuickView::render() by using dangerous parameter values - */ - void render(); - // END - // BEGIN: tests against fake history - /** - * Heavily verifies the operator overloading of QuickView::HistoryFrecencyEntry class - */ - void verifyOperatorFrecencies(); - /** - * Verifies that the frencencies are correctly computed for having the Top N visited - * hosts - */ - void verifyFilterFrecencies(); - - /** - * Verifies if the methods are fault tollerant - */ - void verifyFaults(); - - -private: - QList m_history; -}; - - +#include "tst_QuickView.h" +#include // This will be called before the first test function is executed. // It is only called once. We save the browser history void tst_QuickView::initTestCase() { - HistoryManager* manager = BrowserApplication::historyManager(); - m_history = manager->history(); + m_manager = BrowserApplication::historyManager(); + m_history = m_manager->history(); + m_model = BrowserApplication::historyManager()->quickViewFilterModel(); + m_quickView = BrowserApplication::quickView(); + connect(m_model, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), + this, SLOT(testMinorFilterMethods())); } @@ -121,17 +18,15 @@ void tst_QuickView::initTestCase() // It is only called once. void tst_QuickView::cleanupTestCase() { - HistoryManager* manager = BrowserApplication::historyManager(); - manager->setHistory(m_history); } // This will be called before each test function is executed. We clean browser history void tst_QuickView::init() { - HistoryManager* manager = BrowserApplication::historyManager(); QList emtpyHistory; - manager->history().clear(); - manager->setHistory(emtpyHistory); + m_manager->history().clear(); + m_manager->setHistory(emtpyHistory); + m_quickView->calculate(); } // This will be called after every test function. @@ -142,159 +37,148 @@ void tst_QuickView::cleanup() void tst_QuickView::maxNumberEntriesEmptyHistory() { int defaultMaxNumberEntries = QuickView::s_defaultMaxNumberEntries; - QuickView* quickView = BrowserApplication::quickView(defaultMaxNumberEntries); + m_quickView = BrowserApplication::quickView(defaultMaxNumberEntries); + QList last; - last = quickView->mostVisitedEntries(); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 0); - quickView = BrowserApplication::quickView(defaultMaxNumberEntries + 1); - last = quickView->mostVisitedEntries(); + m_quickView = BrowserApplication::quickView(defaultMaxNumberEntries + 1); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 0); - quickView = BrowserApplication::quickView(defaultMaxNumberEntries - 1); - last = quickView->mostVisitedEntries(); + m_quickView = BrowserApplication::quickView(defaultMaxNumberEntries - 1); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 0); - quickView = BrowserApplication::quickView(0); - last = quickView->mostVisitedEntries(); + m_quickView = BrowserApplication::quickView(0); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 0); - quickView = BrowserApplication::quickView(-1); - last = quickView->mostVisitedEntries(); + m_quickView = BrowserApplication::quickView(-1); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 0); } void tst_QuickView::maxNumberEntriesNonEmptyHistory() { - - HistoryManager* manager = BrowserApplication::historyManager(); int defaultMaxNumberEntries = QuickView::s_defaultMaxNumberEntries; - QuickView* quickView; QList last; - // quickview must contain http://twitter.com and http://facebook.com + // m_quickView must contain http://twitter.com and http://facebook.com // that are two entries. - manager->addHistoryEntry("http://twitter.com/xyz"); - manager->addHistoryEntry("http://facebook.com/asd"); - manager->addHistoryEntry("http://facebook.com/poi"); - manager->addHistoryEntry("http://twitter.com/xyz"); - manager->addHistoryEntry("http://twitter.com/oki"); - - quickView = BrowserApplication::quickView(defaultMaxNumberEntries + 1); - last = quickView->mostVisitedEntries(); + m_manager->addHistoryEntry("http://twitter.com/xyz"); + m_manager->addHistoryEntry("http://facebook.com/asd"); + m_manager->addHistoryEntry("http://facebook.com/poi"); + m_manager->addHistoryEntry("http://twitter.com/xyz"); + m_manager->addHistoryEntry("http://twitter.com/oki"); + + m_quickView = BrowserApplication::quickView(defaultMaxNumberEntries + 1); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 2); - quickView = BrowserApplication::quickView(defaultMaxNumberEntries - 1); - last = quickView->mostVisitedEntries(); + m_quickView = BrowserApplication::quickView(defaultMaxNumberEntries - 1); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 2); - quickView = BrowserApplication::quickView(defaultMaxNumberEntries); - last = quickView->mostVisitedEntries(); + m_quickView = BrowserApplication::quickView(defaultMaxNumberEntries); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 2); - quickView = BrowserApplication::quickView(-1); - last = quickView->mostVisitedEntries(); + m_quickView = BrowserApplication::quickView(-1); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 2); - manager->addHistoryEntry("http://google.com"); + m_manager->addHistoryEntry("http://google.com"); - quickView = BrowserApplication::quickView(); - last = quickView->mostVisitedEntries(); + m_quickView = BrowserApplication::quickView(); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 3); - quickView = BrowserApplication::quickView(2); - last = quickView->mostVisitedEntries(); + m_quickView = BrowserApplication::quickView(2); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 2); - quickView = BrowserApplication::quickView(1); - last = quickView->mostVisitedEntries(); + m_quickView = BrowserApplication::quickView(1); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 1); - quickView = BrowserApplication::quickView(-1); - last = quickView->mostVisitedEntries(); + m_quickView = BrowserApplication::quickView(-1); + last = m_quickView->mostVisitedEntries(); QCOMPARE(last.size(), 3); } void tst_QuickView::mostVisitedEntriesHTML() { - HistoryManager* manager = BrowserApplication::historyManager(); - QuickView* quickView; - - quickView = BrowserApplication::quickView(); - quickView->calculate(); + QCOMPARE(m_quickView->mostVisitedEntriesHTML().compare("

No recent websites

"), 0); - QCOMPARE(quickView->mostVisitedEntriesHTML().compare("

No recent websites

"), 0); - - // quickview must contain http://twitter.com and http://facebook.com + // m_quickView must contain http://twitter.com and http://facebook.com // that are two entries. - manager->addHistoryEntry("http://twitter.com/xyz"); - manager->addHistoryEntry("http://facebook.com/asd"); - manager->addHistoryEntry("http://facebook.com/poi"); - manager->addHistoryEntry("http://twitter.com/xyz"); - manager->addHistoryEntry("http://twitter.com/oki"); + m_manager->addHistoryEntry("http://twitter.com/xyz"); + m_manager->addHistoryEntry("http://facebook.com/asd"); + m_manager->addHistoryEntry("http://facebook.com/poi"); + m_manager->addHistoryEntry("http://twitter.com/xyz"); + m_manager->addHistoryEntry("http://twitter.com/oki"); - quickView->calculate(); - QVERIFY(quickView->mostVisitedEntriesHTML().compare("

No recent websites

") < 0); + m_quickView->calculate(); + QVERIFY(m_quickView->mostVisitedEntriesHTML().compare("

No recent websites

") < 0); } void tst_QuickView::mostVisitedEntriesConsistency() { - HistoryManager* manager = BrowserApplication::historyManager(); - QuickView* quickView = BrowserApplication::quickView(-1); - QuickViewFilterModel* model = BrowserApplication::historyManager()->quickViewFilterModel(); int nLast; int rowCount; - nLast = quickView->mostVisitedEntries().size(); - rowCount = model->rowCount(); + nLast = m_quickView->mostVisitedEntries().size(); + rowCount = m_model->rowCount(); QVERIFY((nLast == 0) && rowCount == 0); - // quickview and model must contain http://twitter.com and http://facebook.com + // m_quickView and m_model must contain http://twitter.com and http://facebook.com // that are two entries. - manager->addHistoryEntry("http://twitter.com/xyz"); - manager->addHistoryEntry("http://facebook.com/asd"); - manager->addHistoryEntry("http://facebook.com/poi"); - manager->addHistoryEntry("http://twitter.com/xyz"); - manager->addHistoryEntry("http://twitter.com/oki"); + m_manager->addHistoryEntry("http://twitter.com/xyz"); + m_manager->addHistoryEntry("http://facebook.com/asd"); + m_manager->addHistoryEntry("http://facebook.com/poi"); + m_manager->addHistoryEntry("http://twitter.com/xyz"); + m_manager->addHistoryEntry("http://twitter.com/oki"); - quickView->calculate(); - nLast = quickView->mostVisitedEntries().size(); - rowCount = model->rowCount(); + m_quickView->calculate(); + nLast = m_quickView->mostVisitedEntries().size(); + rowCount = m_model->rowCount(); QVERIFY((nLast == 2) && rowCount == 2); - manager->addHistoryEntry("http://google.com"); + m_manager->addHistoryEntry("http://google.com"); - nLast = quickView->mostVisitedEntries().size(); - rowCount = model->rowCount(); + nLast = m_quickView->mostVisitedEntries().size(); + rowCount = m_model->rowCount(); // calculate() not yet forced! QVERIFY((nLast == 2) && rowCount == 3); - quickView->calculate(); - nLast = quickView->mostVisitedEntries().size(); + m_quickView->calculate(); + nLast = m_quickView->mostVisitedEntries().size(); QVERIFY((nLast == 3) && rowCount == 3); } void tst_QuickView::render() { - QuickView* quickView = BrowserApplication::quickView(0); - QVERIFY(quickView->render().isEmpty() == false); - quickView = BrowserApplication::quickView(5); - QVERIFY(quickView->render().isEmpty() == false); - quickView = BrowserApplication::quickView(15); - QVERIFY(quickView->render().isEmpty() == false); - quickView = BrowserApplication::quickView(-1); - QVERIFY(quickView->render().isEmpty() == false); + m_quickView = BrowserApplication::quickView(0); + QVERIFY(m_quickView->render().isEmpty() == false); + m_quickView = BrowserApplication::quickView(5); + QVERIFY(m_quickView->render().isEmpty() == false); + m_quickView = BrowserApplication::quickView(15); + QVERIFY(m_quickView->render().isEmpty() == false); + m_quickView = BrowserApplication::quickView(-1); + QVERIFY(m_quickView->render().isEmpty() == false); } void tst_QuickView::verifyOperatorFrecencies() -{ +{ HistoryFrecencyEntry twitter(QString("http://twitter.com"), QDateTime(), QString("Twitter"), 100); HistoryFrecencyEntry facebook(QString("http://facebook.com"), QDateTime(), QString("Twitter"), 200); HistoryFrecencyEntry google(QString("http://google.com"), QDateTime(), QString("Google"), 500); @@ -312,28 +196,28 @@ void tst_QuickView::verifyOperatorFrecencies() void tst_QuickView::verifyFilterFrecencies() { - - HistoryManager* manager = BrowserApplication::historyManager(); - QuickView* quickView = BrowserApplication::quickView(-1); - QuickViewFilterModel* model = BrowserApplication::historyManager()->quickViewFilterModel(); - - QVERIFY(manager->history().count() == 0); - manager->addHistoryEntry("http://facebook.com/lol"); - manager->addHistoryEntry("http://twitter.com/xyz"); - manager->addHistoryEntry("http://facebook.com/asd"); - manager->addHistoryEntry("http://twitter.com/abc"); - manager->addHistoryEntry("http://twitter.com/def"); - manager->addHistoryEntry("http://twitter.com/def"); - manager->addHistoryEntry("http://twitter.com/qwe"); - manager->addHistoryEntry("http://twitter.com/def"); - manager->addHistoryEntry("http://twitter.com/poi"); - manager->addHistoryEntry("http://facebook.com/ooo"); - QVERIFY(manager->history().count() == 10); - // at this point, we espect two results from QuickViewFilterModel + m_quickView = BrowserApplication::quickView(-1); + + QVERIFY(m_manager->history().count() == 0); + m_manager->addHistoryEntry("http://facebook.com/lol"); + m_manager->addHistoryEntry("http://twitter.com/xyz"); + m_manager->addHistoryEntry("http://facebook.com/asd"); + m_manager->addHistoryEntry("http://twitter.com/abc"); + m_manager->addHistoryEntry("http://twitter.com/def"); + m_manager->addHistoryEntry("http://twitter.com/def"); + m_manager->addHistoryEntry("http://twitter.com/qwe"); + m_manager->addHistoryEntry("http://twitter.com/def"); + m_manager->addHistoryEntry("http://twitter.com/poi"); + m_manager->addHistoryEntry("http://facebook.com/ooo"); + QVERIFY(m_manager->history().count() == 10); + // at this point, we espect two results from m_quickViewFiltermodel // with the domains twitter.com as most visited and facebook.com as second one - QVERIFY(model->rowCount() == 2); - quickView->calculate(); - QList mostVisited = quickView->mostVisitedEntries(); + QVERIFY(m_model->rowCount() == 2); + + QVERIFY(m_model->historyLocation("http://facebook.com/ooo") > 0); + + m_quickView->calculate(); + QList mostVisited = m_quickView->mostVisitedEntries(); QVERIFY(mostVisited.count() == 2); QVERIFY(mostVisited.first().url.compare(QString("http://twitter.com")) == 0); QVERIFY(mostVisited.last().url.compare(QString("http://facebook.com")) == 0); @@ -342,23 +226,85 @@ void tst_QuickView::verifyFilterFrecencies() void tst_QuickView::verifyFaults() { + QVERIFY(m_quickView->mostVisitedEntries().size() == 0); + m_manager->addHistoryEntry(" "); + m_manager->addHistoryEntry(""); + m_manager->addHistoryEntry("qrc:/home.html"); + m_manager->addHistoryEntry("about:home"); + m_manager->addHistoryEntry("fake data"); + m_quickView->calculate(); + QVERIFY(m_quickView->mostVisitedEntries().size() == 0); + + //valid index to first entry + QModelIndex index = m_model->index(0, 0, QModelIndex()); + QString url1(index.data(HistoryModel::UrlRole).toString()); + + QModelIndex idx = m_model->mapToSource(index); + QModelIndex idx2 = m_model->mapFromSource(idx); + QString url2(idx2.data(HistoryModel::UrlRole).toString()); + + QVERIFY(url1.compare(url2) == 0); + + //invalid index + QCOMPARE(m_model->columnCount(QModelIndex()), 2); + QCOMPARE(m_model->rowCount(idx), 0); + QCOMPARE(m_model->data(m_model->index(-1, 1, QModelIndex()), QuickViewFilterModel::FrecencyRole).toInt(), 0); + QCOMPARE(m_model->data(m_model->index(-1, -1, QModelIndex()), QuickViewFilterModel::FrecencyRole).toInt(), 0); + QCOMPARE(m_model->data(m_model->index(1, -1, QModelIndex()), QuickViewFilterModel::FrecencyRole).toInt(), 0); + QCOMPARE(m_model->data(m_model->index(m_model->rowCount() + 1, -1, QModelIndex()), QuickViewFilterModel::FrecencyRole).toInt(), 0); + QCOMPARE(m_model->data(m_model->index(0, 100, QModelIndex()), QuickViewFilterModel::FrecencyRole).toInt(), 0); + QCOMPARE(m_model->historyLocation("http://notexistant.com"), 0); + QCOMPARE(m_model->historyContains("http://notexistant.com"), 0); + m_model->removeRows(-1, 0); + m_model->removeRows(0, -1); + m_model->removeRows(m_model->rowCount() + 1, 2); + m_model->removeRows(0, 100); + m_model->removeRows(-1, -1, index); + QVERIFY(m_quickView->mostVisitedEntries().size() == 0); + m_model->setSourceModel(m_model->sourceModel()); - HistoryManager* manager = BrowserApplication::historyManager(); - QuickView* quickView = BrowserApplication::quickView(); - quickView->calculate(); +} + +void tst_QuickView::testMinorFilterMethods() +{ + QVERIFY(m_manager->history().count() == 0); + QVERIFY(m_model->rowCount() == 0); + m_manager->addHistoryEntry("http://facebook.com/lol"); + m_manager->addHistoryEntry("http://twitter.com/xyz"); + m_model->recalculateFrecencies(); + QVERIFY(m_manager->history().count() == 2); + QVERIFY(m_model->rowCount() == 2); + + // this is twitter.com/xyz + QModelIndex index_twitter = m_model->index(0, 0, QModelIndex()); + QModelIndex index_facebook = m_model->index(1, 0, QModelIndex()); + + QString url_twitter(index_twitter.data(HistoryModel::UrlRole).toString()); + QString url_facebook(index_facebook.data(HistoryModel::UrlRole).toString()); - QVERIFY(quickView->mostVisitedEntries().size() == 0); - manager->addHistoryEntry(" "); - manager->addHistoryEntry(""); - manager->addHistoryEntry("qrc:/home.html"); - manager->addHistoryEntry("about:home"); - manager->addHistoryEntry("fake data"); - quickView->calculate(); - QVERIFY(quickView->mostVisitedEntries().size() == 0); + QVERIFY(url_twitter.compare(QString::fromLatin1("http://twitter.com/xyz")) == 0); + QVERIFY(url_facebook.compare(QString::fromLatin1("http://facebook.com/lol")) == 0); + QModelIndex fake1 = m_model->parent(index_facebook); + QModelIndex fake2 = m_model->parent(index_twitter); + + QCOMPARE(fake1.internalId(), fake2.internalId()); + + for(int i = 0; i < m_model->rowCount(); i++) { + QModelIndex index = m_model->index(i, 0, QModelIndex()); + QCOMPARE(m_model->columnCount(index), 0); + m_model->headerData(0, Qt::Horizontal, 0); + } + + + m_model->removeRows(0, 2); + QVERIFY(m_manager->history().count() == 0); + QVERIFY(m_model->rowCount() == 0); + m_model->sourceModel(); + m_model->recalculateFrecencies(); } QTEST_MAIN(tst_QuickView) -#include "tst_quickview.moc" + diff --git a/src/quickview/quickview.cpp b/src/quickview/quickview.cpp index 469e95d8..382d3038 100644 --- a/src/quickview/quickview.cpp +++ b/src/quickview/quickview.cpp @@ -43,9 +43,9 @@ QuickView::QuickView(QObject* parent) */ QuickView::QuickView(int numberEntries, QObject* parent) - :QObject(parent) + : QObject(parent) { - if (numberEntries > 0 && numberEntries != s_defaultMaxNumberEntries) + if(numberEntries > 0 && numberEntries != s_defaultMaxNumberEntries) m_maxNumberEntries = numberEntries; else m_maxNumberEntries = s_defaultMaxNumberEntries; @@ -63,7 +63,8 @@ QList QuickView::mostVisitedEntries() return m_mostVisitedEntries; } -void QuickView::calculate(){ +void QuickView::calculate() +{ QuickViewFilterModel* model = BrowserApplication::historyManager()->quickViewFilterModel(); @@ -78,7 +79,7 @@ void QuickView::calculate(){ for(int i = 0; i < numberEntries; i++) { QModelIndex index = model->index(i, 0, QModelIndex()); QUrl url(index.data(HistoryModel::UrlRole).toString()); - if (QuickView::isValid(url)){ + if(QuickView::isValid(url)) { QDateTime datetime = index.data(HistoryModel::DateTimeRole).toDateTime(); QString finalUrl = url.scheme() + QString::fromLatin1("://") + url.host(); QString finalTitle = url.host(); @@ -127,14 +128,16 @@ QByteArray QuickView::render() return quickViewPage(mostVisitedHtmlEntries); } -int QuickView::maxNumberEntries(){ +int QuickView::maxNumberEntries() +{ return m_maxNumberEntries; } -QString QuickView::toBase64(QIcon& icon){ - if (icon.isNull()) +QString QuickView::toBase64(QIcon& icon) +{ + if(icon.isNull()) return QString(); - QImage image(icon.pixmap(20,20).toImage()); + QImage image(icon.pixmap(20, 20).toImage()); QByteArray byteArray; QBuffer buffer(&byteArray); image.save(&buffer, "PNG"); // writes image into ba in PNG format. @@ -143,10 +146,7 @@ QString QuickView::toBase64(QIcon& icon){ bool QuickView::isValid(const QUrl& url) { - return !url.toString().contains(QString::fromLatin1(" ")) && url.isValid(); - //&& !url.toString().contains(QString::fromLatin1("qrc:/")) - //&& !url.toString().contains(QString::fromLatin1("about:")) - //&& !url.toString().contains(QString::fromLatin1("file://")); + return QuickViewFilterModel::isValid(url); } bool QuickView::compareHistoryFrecencyEntries(const HistoryFrecencyEntry& a, const HistoryFrecencyEntry& b) diff --git a/src/quickview/quickview.h b/src/quickview/quickview.h index 4bc4fa1f..fbb004c2 100644 --- a/src/quickview/quickview.h +++ b/src/quickview/quickview.h @@ -82,20 +82,15 @@ class HistoryFrecencyEntry: public HistoryEntry class QuickView : public QObject { -Q_OBJECT + Q_OBJECT public: - /** - * Default constructor for QObjects, it automatically sets - * numberEntries to 0 - */ - //QuickView(QObject * parent=0); /** * Constructor for also setting the maximum number of entries * to be computed by QuickView * @param numberEntries the maximum number of entries */ - QuickView(int numberEntries = 0, QObject * parent=0); + QuickView(int numberEntries = 0, QObject * parent = 0); /** * Given a number n of entries, it retrieves the most n visited hosts * and encapsulates them in a QList of HistoryFrecencyEntry objects. @@ -130,6 +125,10 @@ Q_OBJECT */ QByteArray render(); + /** + * @return true if the given URL is valid for QuickView mode + * @see QuickViewFilterModel::isValid() + */ static bool isValid(const QUrl& url); /** @@ -167,7 +166,7 @@ public slots: * @return true if a > b (a most visited) */ static bool compareHistoryFrecencyEntries(const HistoryFrecencyEntry& a, - const HistoryFrecencyEntry& b); + const HistoryFrecencyEntry& b); /** * QList of HistoryFrecencyEntry that holds the most visited * entries diff --git a/src/quickview/quickviewfiltermodel.cpp b/src/quickview/quickviewfiltermodel.cpp index 77518a40..c47a5a65 100644 --- a/src/quickview/quickviewfiltermodel.cpp +++ b/src/quickview/quickviewfiltermodel.cpp @@ -101,7 +101,7 @@ int QuickViewFilterModel::historyLocation(const QString &url) const if(!m_historyHash.contains(qUrl.host())) return 0; - return sourceModel()->rowCount() - m_historyHash.value(qUrl.host()); + return sourceModel()->rowCount() - m_historyHash.value(qUrl.toString()); } QVariant QuickViewFilterModel::data(const QModelIndex &index, int role) const @@ -303,13 +303,13 @@ bool QuickViewFilterModel::removeRows(int row, int count, const QModelIndex &par return true; } -bool QuickViewFilterModel::isValid(const QUrl url) const +bool QuickViewFilterModel::isValid(const QUrl url) { - return !url.isEmpty() - && url.isValid() - && !url.toString().contains(QString::fromLatin1("qrc:/")) - && !url.toString().contains(QString::fromLatin1("about:")) - && !url.toString().contains(QString::fromLatin1("file://")); + QString urlString = url.toString(); + return !urlString.contains(QString::fromLatin1(" ")) + && !urlString.contains(QString::fromLatin1("qrc:")) + && !urlString.contains(QString::fromLatin1("about:")) + && url.isValid(); } int QuickViewFilterModel::frecencyScore(const QModelIndex &sourceIndex) const diff --git a/src/quickview/quickviewfiltermodel.h b/src/quickview/quickviewfiltermodel.h index 218552ca..9b0d6428 100644 --- a/src/quickview/quickviewfiltermodel.h +++ b/src/quickview/quickviewfiltermodel.h @@ -60,9 +60,13 @@ class QuickViewFilterModel : public QAbstractProxyModel * @return true if the host is contained in the hash table */ inline bool historyContains(const QString &url) const { - return m_historyHash.contains(url); + QUrl newUrl(url); + return m_historyHash.contains(newUrl.host()); } + /** + * @return the History position of the given URL + */ int historyLocation(const QString &url) const; /** @@ -117,7 +121,7 @@ class QuickViewFilterModel : public QAbstractProxyModel * Helper method to check the validity of a url * @return true if the url is valid for our model */ - bool isValid(const QUrl url) const; + static bool isValid(const QUrl url); /** * Forces to check the frecencies of the entries */