From 4ea0eb856b23abfa0782b7a16b41587c6f8e8107 Mon Sep 17 00:00:00 2001 From: Bartosz Szatkowski Date: Wed, 4 Aug 2010 10:37:13 +0200 Subject: [PATCH] Proper dictionary result handling with test Simply (in one thread) pool each dictionary for translation (with blocking) --- trunk/src/base/backbone/backbone.cpp | 30 ++++++++++++++++++++----- trunk/src/base/backbone/backbone.h | 8 +++++-- trunk/tests/mDictionaryTests/tst_Backbone.cpp | 8 ++++++- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/trunk/src/base/backbone/backbone.cpp b/trunk/src/base/backbone/backbone.cpp index 1b0c70e..ef05d42 100644 --- a/trunk/src/base/backbone/backbone.cpp +++ b/trunk/src/base/backbone/backbone.cpp @@ -37,7 +37,7 @@ Backbone::~Backbone() Backbone::Backbone(const Backbone &b){ dicts = QHash (b.dicts); plugins = QList (b.plugins); - resultv = QHash (b.resultv); + _result = QHash (b._result); searchLimitv = b.searchLimit(); } @@ -57,8 +57,8 @@ QList Backbone::getHistory() { //TODO code needed } -QHash Backbone::result() { - return resultv; +QMultiHash Backbone::result() { + return _result; } void Backbone::stopSearching() { @@ -68,9 +68,17 @@ void Backbone::stopSearching() { void Backbone::search(QString word) { //TODO add running searches in new threads + _result.clear(); + activeSearchNum = 0; foreach(CommonDictInterface* dict, dicts.keys()) - if(dicts[dict] == 1) + if(dicts[dict] == 1) { + activeSearchNum ++; + } + + foreach(CommonDictInterface* dict, dicts.keys()) + if(dicts[dict] == 1) { dict->search(word, searchLimit()); + } } void Backbone::selectedDictionaries(QList activeDicts) { @@ -84,7 +92,8 @@ void Backbone::search(QString word) { void Backbone::addDictionary(CommonDictInterface* dict) { dicts[dict] = 1; connect(dict, SIGNAL(finalTranslation(QList)), - this, SLOT(translation(QList))); + this, SLOT(translation(QList)), + Qt::UniqueConnection); } void Backbone::quit() { @@ -94,8 +103,19 @@ void Backbone::search(QString word) { +int Backbone::activeSearches() const { + return activeSearchNum; +} + + + void Backbone::translation(QList trans) { + activeSearchNum--; + foreach(Translation* t, trans) + _result.insert(t->key(), t); + if(activeSearchNum < 1) + Q_EMIT ready(); } diff --git a/trunk/src/base/backbone/backbone.h b/trunk/src/base/backbone/backbone.h index ddd0dbb..ea97550 100644 --- a/trunk/src/base/backbone/backbone.h +++ b/trunk/src/base/backbone/backbone.h @@ -52,11 +52,14 @@ public: QList getHistory(); //TODO implementation needed (in future) //! \return return search fesult - QHash result(); + QMultiHash result(); //! \return maximum number of word that plugin could find int searchLimit() const; + //! \return number of active searches + int activeSearches() const; + public Q_SLOTS: //! stops all current searches void stopSearching(); @@ -95,8 +98,9 @@ Q_SIGNALS: private: QHash dicts; QList plugins; - QHash resultv; + QMultiHash _result; int searchLimitv; + int activeSearchNum; }; diff --git a/trunk/tests/mDictionaryTests/tst_Backbone.cpp b/trunk/tests/mDictionaryTests/tst_Backbone.cpp index 4a58344..fb1548e 100644 --- a/trunk/tests/mDictionaryTests/tst_Backbone.cpp +++ b/trunk/tests/mDictionaryTests/tst_Backbone.cpp @@ -55,7 +55,6 @@ BackboneTest::BackboneTest() total = 5; for(int i = 0; i < total; i++) dict.push_back(new CommonDictInterfaceMock()); - qRegisterMetaType(Translation); } @@ -166,6 +165,8 @@ void BackboneTest::searchTest() { void BackboneTest::translationTest() { QSignalSpy** ss = new QSignalSpy*[total]; + QSignalSpy translatS(back, SIGNAL(ready())); + QVERIFY2 (translatS.isValid() == true, "ready() signal is invalid"); for(int i = 0; i < total; i++) { CommonDictInterfaceMock *m = (CommonDictInterfaceMock*) dict[i]; @@ -180,6 +181,11 @@ void BackboneTest::translationTest() { for(int i = 0; i < total; i++) { QVERIFY2(ss[i]->count() == 1, "Translation signal lost"); } + + qDebug() << "count " << translatS.count(); + QVERIFY2(translatS.count() == 1, "Lost finall 'ready()' signal"); + qDebug() << "result.size " << back->result().size(); + QVERIFY2(back->result().size() == total*2, "Lost some of translations"); } -- 1.7.9.5