Proper dictionary result handling with test
authorBartosz Szatkowski <bulislaw@linux.com>
Wed, 4 Aug 2010 08:37:13 +0000 (10:37 +0200)
committerBartosz Szatkowski <bulislaw@linux.com>
Wed, 4 Aug 2010 08:37:13 +0000 (10:37 +0200)
Simply (in one thread) pool each dictionary for translation (with blocking)

trunk/src/base/backbone/backbone.cpp
trunk/src/base/backbone/backbone.h
trunk/tests/mDictionaryTests/tst_Backbone.cpp

index 1b0c70e..ef05d42 100644 (file)
@@ -37,7 +37,7 @@ Backbone::~Backbone()
 Backbone::Backbone(const Backbone &b){
     dicts = QHash<CommonDictInterface*, bool > (b.dicts);
     plugins = QList<CommonDictInterface* > (b.plugins);
-    resultv = QHash<QString, Translation* > (b.resultv);
+    _result = QHash<QString, Translation* > (b._result);
     searchLimitv = b.searchLimit();
 }
 
@@ -57,8 +57,8 @@ QList<QString> Backbone::getHistory() {
     //TODO code needed
 }
 
-QHash<QString, Translation*> Backbone::result() {
-    return resultv;
+QMultiHash<QString, Translation*> 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<CommonDictInterface* > activeDicts) {
@@ -84,7 +92,8 @@ void Backbone::search(QString word) {
  void Backbone::addDictionary(CommonDictInterface* dict) {
      dicts[dict] = 1;
      connect(dict, SIGNAL(finalTranslation(QList<Translation*>)),
-             this, SLOT(translation(QList<Translation*>)));
+             this, SLOT(translation(QList<Translation*>)),
+             Qt::UniqueConnection);
  }
 
  void Backbone::quit() {
@@ -94,8 +103,19 @@ void Backbone::search(QString word) {
 
 
 
+int Backbone::activeSearches() const {
+    return activeSearchNum;
+}
+
+
+
 void Backbone::translation(QList<Translation *> trans) {
+    activeSearchNum--;
+    foreach(Translation* t, trans)
+        _result.insert(t->key(), t);
 
+    if(activeSearchNum < 1)
+        Q_EMIT ready();
 }
 
 
index ddd0dbb..ea97550 100644 (file)
@@ -52,11 +52,14 @@ public:
     QList<QString> getHistory(); //TODO implementation needed (in future)
 
     //! \return return search fesult
-    QHash<QString, Translation*> result();
+    QMultiHash<QString, Translation*> 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<CommonDictInterface*, bool> dicts;
     QList<CommonDictInterface*> plugins;
-    QHash<QString, Translation*> resultv;
+    QMultiHash<QString, Translation*> _result;
     int searchLimitv;
+    int activeSearchNum;
 
 };
 
index 4a58344..fb1548e 100644 (file)
@@ -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");
 }