videocollection/videocollectionwrapper/tsrc/testvideothumbnailfetcher/src/testvideothumbnailfetcher.cpp
changeset 20 b9e04db066d4
parent 15 cf5481c2bc0b
--- a/videocollection/videocollectionwrapper/tsrc/testvideothumbnailfetcher/src/testvideothumbnailfetcher.cpp	Mon May 03 12:32:50 2010 +0300
+++ b/videocollection/videocollectionwrapper/tsrc/testvideothumbnailfetcher/src/testvideothumbnailfetcher.cpp	Fri May 14 15:53:50 2010 +0300
@@ -33,6 +33,16 @@
 
 #include "videothumbnailfetcher.h"
 
+/**
+ * global qHash function required fo creating hash values for TMPXItemId -keys
+ */
+inline uint qHash(TMPXItemId key) 
+{ 
+    QPair<uint, uint> keyPair(key.iId1, key.iId2); 
+
+    return qHash(keyPair);
+}
+
 // ---------------------------------------------------------------------------
 // main
 // ---------------------------------------------------------------------------
@@ -71,6 +81,7 @@
     
     ThumbnailManager::mGetThumbFails = false;
     ThumbnailManager::mThumbnailReadyError = 0;
+    ThumbnailManager::mCancelRequestCount = 0;
 }
 
 // ---------------------------------------------------------------------------
@@ -105,15 +116,10 @@
 {
     init();
     
-    mTestObject->addFetch(QString(), 0, 0);
-    QCOMPARE(mTestObject->mFetchList.count(), 1);
+    TMPXItemId mediaId(0, 0);
     
-    mTestObject->addFetch("test", 0, 0);
-    QCOMPARE(mTestObject->mFetchList.count(), 2);
-    
-    int *internal = new int;
-    mTestObject->addFetch("test", internal, 0);
-    QCOMPARE(mTestObject->mFetchList.count(), 3);
+    mTestObject->addFetch(QString(), mediaId, 0);
+    QCOMPARE(mTestObject->mFetchList.count(), 1);
     
     cleanup();
 }
@@ -126,6 +132,8 @@
 {
     init();
     
+    TMPXItemId mediaId(0, 0);
+    
     mTestObject->addFetch(QString(), 0, 0);
     mTestObject->cancelFetches();
     QCOMPARE(mTestObject->mFetchList.count(), 0);
@@ -138,8 +146,7 @@
     QCOMPARE(mTestObject->mStartedFetchList.count(), 0);
     QCOMPARE(mTestObject->mCreationList.count(), 0);
     
-    int *internal = new int;
-    mTestObject->addFetch("test", internal, 0);
+    mTestObject->addFetch("test", mediaId, 0);
     mTestObject->cancelFetches();
     QCOMPARE(mTestObject->mFetchList.count(), 0);
     QCOMPARE(mTestObject->mStartedFetchList.count(), 0);
@@ -175,7 +182,7 @@
 {
     init();
 
-    mTestObject->mFetchList.append(new VideoThumbnailFetcher::ThumbnailFetchData());
+    mTestObject->mFetchList.insert(TMPXItemId(0, 0), new VideoThumbnailFetcher::ThumbnailFetchData());
     QCOMPARE(mTestObject->fetchCount(), 1);
     
     mTestObject->mStartedFetchList.insert(0, new VideoThumbnailFetcher::ThumbnailFetchData());
@@ -209,21 +216,21 @@
 void TestVideoThumbnailFetcher::testContinueFetching()
 {
     init();
-    mTestObject->mFetchList.append(new VideoThumbnailFetcher::ThumbnailFetchData());
-    mTestObject->continueFetching();
+    mTestObject->mFetchList.insert(TMPXItemId(0, 0), new VideoThumbnailFetcher::ThumbnailFetchData());
+    mTestObject->continueFetching(false);
     QCOMPARE(mTestObject->fetchCount(), 1);
     cleanup();
     
     init();
     mTestObject->mCreationList.insert(0, new VideoThumbnailFetcher::ThumbnailFetchData());
-    mTestObject->continueFetching();
+    mTestObject->continueFetching(false);
     QCOMPARE(mTestObject->fetchCount(), 0);
     cleanup();
     
     // Test when there's nothing to fetch 
     init();
     QSignalSpy* spy = new QSignalSpy(mTestObject, SIGNAL(allThumbnailsFetched()));
-    mTestObject->continueFetching();
+    mTestObject->continueFetching(false);
     QCOMPARE(spy->count(), 1);
     delete spy;
     
@@ -255,16 +262,16 @@
 {
     // Test when thumbnail manager is null.
     init();
-    mTestObject->mFetchList.append(new VideoThumbnailFetcher::ThumbnailFetchData());    
+    mTestObject->mFetchList.insert(TMPXItemId(0, 0), new VideoThumbnailFetcher::ThumbnailFetchData());    
     delete mTestObject->mThumbnailManager;
     mTestObject->mThumbnailManager = 0;
-    mTestObject->startThumbnailFetches();
+    mTestObject->startThumbnailFetches(false);
     QCOMPARE(mTestObject->mFetchList.count(), 1);
     cleanup();
 
     // Test when nothing to fetch.
     init();
-    mTestObject->startThumbnailFetches();
+    mTestObject->startThumbnailFetches(false);
     QVERIFY(mTestObject->mThumbnailManager->mode() == ThumbnailManager::DoNotCreate);
     QCOMPARE(mTestObject->fetchCount(), 0);
     cleanup();
@@ -273,11 +280,11 @@
     init();
     for(int i = 0; i < 10; i++)
     {
-        int *internal = new int(i);
-        mTestObject->addFetch("test", internal, i);
+        TMPXItemId mediaId = TMPXItemId(i, i);
+        mTestObject->addFetch("test", mediaId, i);
     }
     QCOMPARE(mTestObject->mFetchList.count(), 10);
-    mTestObject->startThumbnailFetches();
+    mTestObject->startThumbnailFetches(false);
     QCOMPARE(mTestObject->mFetchList.count(), 0);
     QCOMPARE(mTestObject->mStartedFetchList.count(), 10);
     QCOMPARE(mTestObject->mThumbnailManager->mRequests.count(), 10);
@@ -286,14 +293,43 @@
     // Test when request to thumbnail manager fails.
     init();
     ThumbnailManager::mGetThumbFails = true;
-    int *internal = new int(0);
-    mTestObject->addFetch("test", internal, 0);
+    TMPXItemId mediaId = TMPXItemId(0, 0);
+    mTestObject->addFetch("test", mediaId, 0);
     QCOMPARE(mTestObject->mFetchList.count(), 1);
-    mTestObject->startThumbnailFetches();
+    mTestObject->startThumbnailFetches(false);
     QCOMPARE(mTestObject->mFetchList.count(), 0);
     QCOMPARE(mTestObject->mStartedFetchList.count(), 0);
     QCOMPARE(mTestObject->mThumbnailManager->mRequests.count(), 0);
-    cleanup();        
+    cleanup();
+    
+    // Test canceling fetches that are not on the new started list.
+    init();
+    for(int i = 0; i < 10; i++)
+    {
+        mediaId = TMPXItemId(i, i);
+        mTestObject->addFetch("test", mediaId, i);
+    }
+
+    // 5 overlapping, they won't be canceled.
+    for(int i = 5; i < 15; i++)
+    {
+        mediaId = TMPXItemId(i, i); // found from the list.
+        VideoThumbnailFetcher::ThumbnailFetchData *data = new VideoThumbnailFetcher::ThumbnailFetchData();
+        data->mFileName = "";
+        data->mPriority = 0;
+        data->mRequestId = -1;
+        data->mMediaId = mediaId;
+        mTestObject->mStartedFetchList.insert(mediaId, data);
+    }
+    
+    QCOMPARE(mTestObject->mFetchList.count(), 10);
+    mTestObject->startThumbnailFetches(true);
+    QCOMPARE(mTestObject->mFetchList.count(), 0);
+    QCOMPARE(mTestObject->mThumbnailManager->mRequests.count(), 5);
+    QCOMPARE(mTestObject->mStartedFetchList.count(), 10);
+    QCOMPARE(ThumbnailManager::mCancelRequestCount, 5);
+    cleanup();
+    
 }
 
 // ---------------------------------------------------------------------------
@@ -334,7 +370,6 @@
     {
         VideoThumbnailFetcher::ThumbnailFetchData *fetch = new VideoThumbnailFetcher::ThumbnailFetchData();
         fetch->mFileName = "test";
-        fetch->mInternal = 0;
         mTestObject->mCreationList.insert(0, fetch);
     }
     QCOMPARE(mTestObject->mCreationList.count(), 10);
@@ -372,7 +407,7 @@
 
     // Internal parameter is null, started fetches do not contain the fetch.
     init();
-    spy = new QSignalSpy(mTestObject, SIGNAL( thumbnailReady(QPixmap, void*, int) ));
+    spy = new QSignalSpy(mTestObject, SIGNAL( thumbnailReady(QPixmap, const TMPXItemId &, int) ));
     mTestObject->mThumbnailManager->emitThumbnailReady(pmap, internal, requestId, error);
     QCOMPARE(spy->count(), 1);
     delete spy; spy = 0;
@@ -380,7 +415,7 @@
 
     // Internal parameter is null, started fetches contains the fetch.
     init();
-    spy = new QSignalSpy(mTestObject, SIGNAL( thumbnailReady(QPixmap, void*, int) ));
+    spy = new QSignalSpy(mTestObject, SIGNAL( thumbnailReady(QPixmap, const TMPXItemId &, int) ));
     mTestObject->mStartedFetchList.insert(requestId, new VideoThumbnailFetcher::ThumbnailFetchData());
     mTestObject->mThumbnailManager->emitThumbnailReady(pmap, internal, requestId, error);
     QCOMPARE(spy->count(), 1);
@@ -389,17 +424,17 @@
     
     // Test error handling.  
     init();
-    spy = new QSignalSpy(mTestObject, SIGNAL( thumbnailReady(QPixmap, void*, int) ));
+    spy = new QSignalSpy(mTestObject, SIGNAL( thumbnailReady(QPixmap, const TMPXItemId &, int) ));
     error = -5;
     mTestObject->mStartedFetchList.insert(requestId, new VideoThumbnailFetcher::ThumbnailFetchData());
     mTestObject->mThumbnailManager->emitThumbnailReady(pmap, internal, requestId, error);
     QCOMPARE(spy->count(), 1);
     delete spy; spy = 0;
     cleanup();
-    
+    /* TODO FIX
     // Fetch fails because thumbnail was not created yet, fetch list contains the request.
     init();
-    spy = new QSignalSpy(mTestObject, SIGNAL( thumbnailReady(QPixmap, void*, int) ));
+    spy = new QSignalSpy(mTestObject, SIGNAL( thumbnailReady(QPixmap, const TMPXItemId &, int) ));
     error = -1;
     requestId = 5;
     internal = new int(5);
@@ -412,10 +447,10 @@
     delete spy; spy = 0;
     delete internal; internal = 0;
     cleanup();
-    
+*/    
     // Fetch fails because thumbnail was not created yet, fetch list does not contain the request.
     init();
-    spy = new QSignalSpy(mTestObject, SIGNAL( thumbnailReady(QPixmap, void*, int) ));
+    spy = new QSignalSpy(mTestObject, SIGNAL( thumbnailReady(QPixmap, const TMPXItemId &, int) ));
     error = -1;
     requestId = 5;
     internal = new int(5);
@@ -433,7 +468,7 @@
     requestId = 5;
     mTestObject->mPaused = false;
     mTestObject->mStartedFetchList.insert(requestId+10, new VideoThumbnailFetcher::ThumbnailFetchData());
-    mTestObject->mFetchList.append(new VideoThumbnailFetcher::ThumbnailFetchData());
+    mTestObject->mFetchList.insert(TMPXItemId(0, 0), new VideoThumbnailFetcher::ThumbnailFetchData());
     mTestObject->mThumbnailManager->emitThumbnailReady(pmap, internal, requestId, error);
     QCOMPARE(mTestObject->mStartedFetchList.count(), 1);
     QCOMPARE(mTestObject->mFetchList.count(), 1);
@@ -444,7 +479,7 @@
     internal = 0;
     requestId = 5;
     mTestObject->mPaused = false;
-    mTestObject->mFetchList.append(new VideoThumbnailFetcher::ThumbnailFetchData());
+    mTestObject->mFetchList.insert(TMPXItemId(0, 0), new VideoThumbnailFetcher::ThumbnailFetchData());
     mTestObject->mThumbnailManager->emitThumbnailReady(pmap, internal, requestId, error);
     QCOMPARE(mTestObject->mStartedFetchList.count(), 1);
     QCOMPARE(mTestObject->mFetchList.count(), 0);
@@ -455,7 +490,7 @@
     internal = 0;
     requestId = 5;
     mTestObject->mPaused = true;
-    mTestObject->mFetchList.append(new VideoThumbnailFetcher::ThumbnailFetchData());
+    mTestObject->mFetchList.insert(TMPXItemId(0, 0), new VideoThumbnailFetcher::ThumbnailFetchData());
     mTestObject->mThumbnailManager->emitThumbnailReady(pmap, internal, requestId, error);
     QCOMPARE(mTestObject->mStartedFetchList.count(), 0);
     QCOMPARE(mTestObject->mFetchList.count(), 1);