videocollection/videocollectionview/tsrc/testlistwidget/src/testlistwidget.cpp
author hgs
Thu, 01 Apr 2010 22:38:49 +0300
changeset 30 4f111d64a341
child 34 bbb98528c666
permissions -rw-r--r--
201005

/**
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:   tester for methods in VideoListWidget
*
*/

#include <QMap>
#include "hblistview.h"
#include "hbview.h"

#include "videoservices.h"
#include "videosortfilterproxymodel.h"
#include "dummydatamodel.h"
#include "hbscrollbar.h"
#include "hbmenu.h"
#include "hbmessagebox.h"
#include "hbinstance.h"
#include "hbmainwindow.h"
#include "mpxhbvideocommondefs.h"
#include "videothumbnaildata.h"
#include "videocollectioncommon.h"

#include "testlistwidget.h"

#define private public
#include "videolistwidget.h"
#undef private

static const int CONTEXT_MENU_COUNT = 8;

/**
 * helper class to run protected member of the test object
 */
class ListWidgetTester : public VideoListWidget
{
public:
    /**
     * constructor
     */
    ListWidgetTester(HbView *parent) :
            VideoListWidget(parent)
    {
        
    }
    
    /**
     * calls emitActivated
     */
    void callEmiteActivated(QModelIndex index)
    {
        VideoListWidget::emitActivated(index);
    }
    
    /**
     * calls longPressGesture
     */
    void callLongPressGesture(const QPointF &point)
    {
        VideoListWidget::longPressGesture (point);
    }
};

// ---------------------------------------------------------------------------
// main
// ---------------------------------------------------------------------------
//
int main(int /*argc*/, char *argv[])
{
        
    TestListWidget tv;

    char *pass[3];
    pass[0] = argv[0];
    pass[1] = "-o";
    pass[2] = "c:\\data\\testlistwidget.txt";

    int res = QTest::qExec(&tv, 3, pass);

    return res;
}

// ---------------------------------------------------------------------------
// init
// ---------------------------------------------------------------------------
//
void TestListWidget::init()
{
    mDummyMainWnd = new HbMainWindow;
    mTempView = new HbView;
    mDummyModel = new DummyDataModel();
    mDummyProxyModel = new VideoSortFilterProxyModel();
    mDummyProxyModel->setSourceModel(mDummyModel);
    
    mTestWidget = new ListWidgetTester(mTempView);
}

// ---------------------------------------------------------------------------
// cleanup
// ---------------------------------------------------------------------------
//
void TestListWidget::cleanup()
{
    delete mTestWidget;
    mTestWidget = 0;
    
    delete mDummyProxyModel;
    mDummyProxyModel = 0;
    
    delete mDummyModel;
    mDummyModel = 0;
    
    delete mTempView;
    mTempView = 0;
    
    delete mDummyMainWnd;
    mDummyMainWnd = 0;
    
    hbInstance->mWindowses.clear();
}
 
// ---------------------------------------------------------------------------
// testInitialize
// ---------------------------------------------------------------------------
//
void TestListWidget::testInitialize()
{
    // no prototype
    HbListView::mReturnNullPrototype = true;
    QVERIFY(mTestWidget->initialize(*mDummyProxyModel) == -1);
    HbListView::mReturnNullPrototype = false;
    
    // no scroll bar
    HbListView::mVScrollBarIsNull = true;
    QVERIFY(mTestWidget->initialize(*mDummyProxyModel) == -1);

    // succeed case ( new operator cannot be stubbed)
    HbListView::mVScrollBarIsNull = false;
    HbListView::mReturnNullPrototype = false;
    QVERIFY(mTestWidget->initialize(*mDummyProxyModel) == 0);
    QCOMPARE(HbListView::mLatestrecycling, true);
    QCOMPARE(HbListView::mLatestClamping, HbScrollArea::BounceBackClamping);
    QCOMPARE(HbListView::mLatestScrolling, HbScrollArea::PanOrFlick);
    QCOMPARE(HbListView::mLatestFrictionEnabled, true);
    QCOMPARE(HbListView::mLatestUniformItemSizes, true);
    QCOMPARE(HbListView::mLatestVisibility, false);
    QCOMPARE(HbListView::mLatestEnableValue, false);    
    QCOMPARE(HbScrollBar::mInteractive, true);    
	QVERIFY(mTestWidget->mModel == mDummyProxyModel);  
	QVERIFY(mTestWidget->mVideoServices == 0);
	QVERIFY(mTestWidget->mIsService == false);
}
 
// ---------------------------------------------------------------------------
// testActivate
// ---------------------------------------------------------------------------
//
void TestListWidget::testActivate()
{
    // no  model: fails
    VideoSortFilterProxyModel *nullModel = 0;
    QVERIFY(mTestWidget->activate() == -1);
    QCOMPARE(HbMenu::mEnabledSetted, false);
    QCOMPARE(HbListView::mLatestVisibility, false);
    QCOMPARE(HbListView::mLatestModel, nullModel);
    QCOMPARE(VideoThumbnailData::mBackgroundThumbnailFetchingEnabled, 1);
    
    // no context menu, model exist: succeeds
    QVERIFY(mTestWidget->initialize(*mDummyProxyModel) == 0);
    QVERIFY(mTestWidget->activate() == 0);
    QCOMPARE(HbMenu::mEnabledSetted, false);
    QCOMPARE(HbListView::mLatestVisibility, true);
    QCOMPARE(HbListView::mLatestModel, mDummyProxyModel);
    QCOMPARE(VideoThumbnailData::mBackgroundThumbnailFetchingEnabled, 1);
    
    HbMenu::mEnabledSetted = true;
    HbListView::mLatestVisibility = false;
    HbListView::mLatestEnableValue = false;
    HbListView::mLatestModel = 0;
    VideoThumbnailData::mBackgroundThumbnailFetchingEnabled = 0;
    
    // context menu exists, succeed (signal connecting failure cannot be tested here)
    mTestWidget->mContextMenu = new HbMenu;
    QVERIFY(mTestWidget->activate() == 0);
    QCOMPARE(HbMenu::mEnabledSetted, true);
    QCOMPARE(HbListView::mLatestVisibility, true);
    QCOMPARE(HbListView::mLatestModel, mDummyProxyModel);
    QCOMPARE(VideoThumbnailData::mBackgroundThumbnailFetchingEnabled, 1);
}
 
// ---------------------------------------------------------------------------
// testDeactivate
// ---------------------------------------------------------------------------
//
void TestListWidget::testDeactivate()
{
    HbMenu::mEnabledSetted = false;
    HbListView::mLatestVisibility = false;
    HbListView::mLatestEnableValue = false;
    HbListView::mLatestModel = 0;
    VideoThumbnailData::mBackgroundThumbnailFetchingEnabled = 0;
    VideoSortFilterProxyModel *nullModel = 0;
    
    mTestWidget->activate();
    
    // no context menu and activated without model
    mTestWidget->deactivate();
    QCOMPARE(HbListView::mLatestVisibility, false);
    QCOMPARE(HbListView::mLatestModel, nullModel);
    QCOMPARE(VideoThumbnailData::mBackgroundThumbnailFetchingEnabled, 0);
    
    // context menu exists and activated with model
    mTestWidget->mContextMenu = new HbMenu;
    QVERIFY(mTestWidget->initialize(*mDummyProxyModel) == 0);
    mTestWidget->activate();
    mTestWidget->deactivate();
    QCOMPARE(HbListView::mLatestVisibility, true);
    QCOMPARE(HbListView::mLatestModel, mDummyProxyModel);
    QCOMPARE(VideoThumbnailData::mBackgroundThumbnailFetchingEnabled, 0);
   
}

// ---------------------------------------------------------------------------
// testGetLevel
// ---------------------------------------------------------------------------
//
void TestListWidget::testGetType()
{
    mTestWidget->initialize(*mDummyProxyModel);
    
    
    // level != ELevelVideos and role != ELevelCategory
    mTestWidget->mCurrentLevel = (VideoListWidget::TVideoListLevel)0;
    QCOMPARE(mTestWidget->getType(), VideoListWidget::EUnknown);
    
    // level == ELevelVideos
    mTestWidget->mCurrentLevel = VideoListWidget::ELevelVideos;
    QCOMPARE(mTestWidget->getType(), VideoListWidget::EAllVideos);
    
    // level == ELevelCategory and mLastOpenItemId == TMPXItemId::InvalidId
    mTestWidget->mCurrentLevel = VideoListWidget::ELevelCategory;
    mTestWidget->mLastOpenItemId = TMPXItemId::InvalidId();
    QCOMPARE(mTestWidget->getType(), VideoListWidget::ECollections);
    
    // level == ELevelCategory and mLastOpenItemId.iId2 == KVcxMvcCategoryIdDownloads  
    mTestWidget->mLastOpenItemId.iId2 = KVcxMvcCategoryIdDownloads;
    mTestWidget->mCurrentLevel = VideoListWidget::ELevelCategory;
    mDummyMainWnd->mSoftKeyAction = mTestWidget->mSecSkAction;
    QCOMPARE(mTestWidget->getType(), VideoListWidget::EDefaultColItems);
    
    // level == ELevelCategory and  mLastOpenItemId.iId2 == KVcxMvcCategoryIdCaptured
    mTestWidget->mLastOpenItemId.iId2 = KVcxMvcCategoryIdDownloads;
    mTestWidget->mCurrentLevel = VideoListWidget::ELevelCategory;
    mDummyMainWnd->mSoftKeyAction = mTestWidget->mSecSkAction;
    QCOMPARE(mTestWidget->getType(), VideoListWidget::EDefaultColItems);
    
    
    // level == ELevelCategory and mLastOpenItemId.iId2 is neither above
    mTestWidget->mLastOpenItemId.iId2 = 0;
    mTestWidget->mCurrentLevel = VideoListWidget::ELevelCategory;
    mDummyMainWnd->mSoftKeyAction = mTestWidget->mSecSkAction;
    QCOMPARE(mTestWidget->getType(), VideoListWidget::EUserColItems);
    

    
}
   
// ---------------------------------------------------------------------------
// testGetModel
// ---------------------------------------------------------------------------
//
void TestListWidget::testGetModel()
{
    QVERIFY(&(mTestWidget->getModel()) == 0);
    
    HbListView::mVScrollBarIsNull = false;
    HbListView::mReturnNullPrototype = false;
    mTestWidget->initialize(*mDummyProxyModel);
    
    QVERIFY(&(mTestWidget->getModel()) == mDummyProxyModel);
}
 
// ---------------------------------------------------------------------------
// testEmitActivated
// ---------------------------------------------------------------------------
//
void TestListWidget::testEmitActivated()
{
    QSignalSpy spysignal(mTestWidget, SIGNAL(collectionOpened(bool, const QString&)));
    mTestWidget->initialize(*mDummyProxyModel);
    mTestWidget->activate();
    hbInstance->mWindowses.append(mDummyMainWnd);
    
    QVariant data = QString("test");
    // correct data to index 0
    mDummyModel->setData( Qt::DisplayRole, data);
    mDummyModel->setRowCount(1);
    mDummyProxyModel->mItemIds.append(TMPXItemId(0,0));
    
    QModelIndex fetchIndex = mDummyProxyModel->index(0, 0, QModelIndex());
    
    // selection mode == HbAbstractItemView::MultiSelection
    HbListView::mSelectionMode = HbAbstractItemView::MultiSelection;
    mTestWidget->callEmiteActivated(fetchIndex);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(mDummyMainWnd->mSoftKeyAction == 0);
    QVERIFY(!VideoSortFilterProxyModel::mLastIndex.isValid());
    
    // modelIndex is not valid
    HbListView::mSelectionMode = HbAbstractItemView::NoSelection;
    fetchIndex = QModelIndex();
    mTestWidget->callEmiteActivated(fetchIndex);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(mDummyMainWnd->mSoftKeyAction == 0);
    QVERIFY(!VideoSortFilterProxyModel::mLastIndex.isValid());
    QVERIFY(mTestWidget->mLastOpenItemId == TMPXItemId::InvalidId());
    
    // current level is not ELevelCategory
    fetchIndex = mDummyProxyModel->index(0, 0, QModelIndex());
    mTestWidget->callEmiteActivated(fetchIndex);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(VideoSortFilterProxyModel::mLastIndex.row() == 0);
    QVERIFY(mTestWidget->mLastOpenItemId == TMPXItemId::InvalidId());
    VideoSortFilterProxyModel::mLastIndex = QModelIndex();
    
    // current level is ELevelCategory
    mTestWidget->mCurrentLevel= VideoListWidget::ELevelCategory;
    mTestWidget->mLastOpenItemId = TMPXItemId();
    
    // -> getType() != ECollections
    mTestWidget->mLastOpenItemId.iId2 = 0;
    mTestWidget->callEmiteActivated(fetchIndex);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(mDummyMainWnd->mSoftKeyAction == 0);
    QVERIFY(VideoSortFilterProxyModel::mLastIndex.row() == 0);
    QVERIFY(mTestWidget->mLastOpenItemId != TMPXItemId::InvalidId());
    VideoSortFilterProxyModel::mLastIndex = QModelIndex();
    
    // -> getType() == ECollections
    mTestWidget->mLastOpenItemId = TMPXItemId::InvalidId();
    
    // --> variant is not valid (invalid data at row index 1)
    fetchIndex = mDummyProxyModel->index(1, 0, QModelIndex());
    mTestWidget->callEmiteActivated(fetchIndex);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(mDummyMainWnd->mSoftKeyAction == 0);
    QVERIFY(VideoSortFilterProxyModel::mLastIndex.row() == 1);
    QVERIFY(mTestWidget->mLastOpenItemId == TMPXItemId::InvalidId());
    VideoSortFilterProxyModel::mLastIndex = QModelIndex();
    
    // --> variant is valid (correct data at index 0),5 collectionOpened -signal should be emitted
    mDummyMainWnd->mSoftKeyAction = 0;
    fetchIndex = mDummyProxyModel->index(0, 0, QModelIndex());
    mTestWidget->callEmiteActivated(fetchIndex);
    QVERIFY(spysignal.count() == 1);
    QVERIFY(mDummyMainWnd->mSoftKeyAction == mTestWidget->mSecSkAction);
    QVERIFY(VideoSortFilterProxyModel::mLastIndex.row() == 0);
    QVERIFY(mTestWidget->mLastOpenItemId != TMPXItemId::InvalidId());
    VideoSortFilterProxyModel::mLastIndex = QModelIndex();
  
    hbInstance->mWindowses.clear();
}
 

// ---------------------------------------------------------------------------
// testLongPressGesture
// ---------------------------------------------------------------------------
//
void TestListWidget::testLongPressGesture()
{
    QVariant data = QString("test");
    // correct data to index 0
    mDummyModel->setData( Qt::DisplayRole, data);
    mDummyModel->setRowCount(1);
    
    QPointF point(1,1);

    QSignalSpy spysignal(mTestWidget, SIGNAL(command(int)));
    mTestWidget->initialize(*mDummyProxyModel);
    hbInstance->mWindowses.append(mDummyMainWnd);
    
    HbListView::mSelectionMode = HbAbstractItemView::MultiSelection;
    // mDetailsReady is false
    mTestWidget->callLongPressGesture(point);
    QVERIFY(spysignal.count() == 1);
    QVERIFY(HbMenu::mExecPoint != point);
    QVERIFY(HbListView::mLongPressedPoint != point);
    spysignal.clear();
    
    // multiselection is on
    mTestWidget->callLongPressGesture(point);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(HbMenu::mExecPoint != point);
        
    // current index is invalid
    HbListView::mSelectionMode = HbAbstractItemView::NoSelection;
    HbListView::mCurrentIndex = QModelIndex();    
    mTestWidget->callLongPressGesture(point);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(HbMenu::mExecPoint != point);
    QVERIFY(HbListView::mLongPressedPoint == point);
    
    // current index is valid
    HbListView::mCurrentIndex = mDummyProxyModel->index(0, 0, QModelIndex());            
    
    // model is == 0
    VideoSortFilterProxyModel *tmp = mTestWidget->mModel;
    mTestWidget->mModel = 0;
    mTestWidget->callLongPressGesture(point);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(HbMenu::mExecPoint != point);
    QVERIFY(HbListView::mLongPressedPoint == point);
    mTestWidget->mModel = tmp;
    
    // mCurrentLevel != ELevelCategory
    mTestWidget->mCurrentLevel = VideoListWidget::ELevelVideos;
    mTestWidget->callLongPressGesture(point);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(HbMenu::mExecPoint == point);
    QVERIFY(HbListView::mLongPressedPoint == point);
    HbMenu::mExecPoint = QPointF();
    
    // mCurrentLevel == ELevelCategory
    mTestWidget->mCurrentLevel = VideoListWidget::ELevelCategory;
    
    // --> mpxId.iId2 != 1
    TMPXItemId itemId;
    itemId.iId2 = 0;
    mDummyProxyModel->mItemIds.append(itemId);
    mTestWidget->callLongPressGesture(point);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(HbMenu::mExecPoint == point);
    QVERIFY(HbListView::mLongPressedPoint == point);
    HbMenu::mExecPoint = QPointF();
    mDummyProxyModel->mItemIds.clear();
    
    // --> mpxId.iId2 == 1
    itemId.iId2 = 1;
    
    // ---> mpxId.iId1 == KVcxMvcCategoryIdDownloads
    itemId.iId1 = KVcxMvcCategoryIdDownloads;
    mDummyProxyModel->mItemIds.append(itemId);
    mTestWidget->callLongPressGesture(point);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(HbMenu::mExecPoint == point);
    QVERIFY(HbListView::mLongPressedPoint == point);
    HbMenu::mExecPoint = QPointF();
    mDummyProxyModel->mItemIds.clear();
    
    // ---> mpxId.iId1 == KVcxMvcCategoryIdCaptured
    itemId.iId1 = KVcxMvcCategoryIdCaptured;
    mDummyProxyModel->mItemIds.append(itemId);
    mTestWidget->callLongPressGesture(point);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(HbMenu::mExecPoint == point);
    QVERIFY(HbListView::mLongPressedPoint == point);
    HbMenu::mExecPoint = QPointF();
    mDummyProxyModel->mItemIds.clear();
    
    // ---> mpxId.iId1 != KVcxMvcCategoryIdDownloads and mpxId.iId1 != KVcxMvcCategoryIdCaptured
    itemId.iId1 = KVcxMvcCategoryIdAll;
    mDummyProxyModel->mItemIds.append(itemId);
    mTestWidget->callLongPressGesture(point);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(HbMenu::mExecPoint == point);
    QVERIFY(HbListView::mLongPressedPoint == point);
    HbMenu::mExecPoint = QPointF();  
    
    // context menu setup fails, due invalid amount of correct actions
    QMap<VideoListWidget::TContextActionIds, HbAction*>::iterator iter = mTestWidget->mContextMenuActions.begin();
    iter++;
    HbAction *nullAction = 0;
    iter.value() = nullAction;
    mTestWidget->callLongPressGesture(point);
    QVERIFY(spysignal.count() == 0);
    QVERIFY(HbMenu::mExecPoint != point);
    QVERIFY(HbListView::mLongPressedPoint == point);
   
}

// ---------------------------------------------------------------------------
// testSetContextMenu
// ---------------------------------------------------------------------------
//
void TestListWidget::testSetContextMenu()
{
    mDummyProxyModel->mItemIds.clear();
    mTestWidget->initialize(*mDummyProxyModel);
    hbInstance->mWindowses.append(mDummyMainWnd);
    
    TMPXItemId itemId;
    QPointF point(1,1);
    itemId.iId2 = 0;
    mDummyProxyModel->mItemIds.append(itemId);

    // no context menu
    delete mTestWidget->mContextMenu;
    mTestWidget->mContextMenu = 0;   
    
    // mCurrentLevel == ELevelVideos
    int visibleCount = 0;
    mTestWidget->mCurrentLevel = VideoListWidget::ELevelVideos;
    mTestWidget->callLongPressGesture(point);
    
    QMap<VideoListWidget::TContextActionIds, HbAction*>::iterator iter = mTestWidget->mContextMenuActions.begin();    
    QVERIFY(iter != mTestWidget->mContextMenuActions.end());
    
    while(iter != mTestWidget->mContextMenuActions.end())
    {
        if(iter.value()->mVisible)
        {
            visibleCount++;   
        }
        ++iter;
    }
    QVERIFY(visibleCount == 4);
    
    // invalid amount of actions -> invalid items gets removed
    HbAction *nullAction = 0;
    iter = mTestWidget->mContextMenuActions.begin();
    iter++;
    iter.value() = nullAction;
    mTestWidget->callLongPressGesture(point);
    QVERIFY(!mTestWidget->mContextMenu);
    QVERIFY(mTestWidget->mContextMenuActions.count() == 0);            
    
    // mCurrentLevel == ELevelCategory
    mTestWidget->mCurrentLevel = VideoListWidget::ELevelCategory;
    // --> getType returns ECollections
    // ---> default collection flag is on
    mTestWidget->callLongPressGesture(point);
    iter = mTestWidget->mContextMenuActions.begin();
    QVERIFY(iter != mTestWidget->mContextMenuActions.end());
    visibleCount = 0;
    while(iter != mTestWidget->mContextMenuActions.end())
    {
        if(iter.value()->mVisible)
        {
            visibleCount++;   
         }
         ++iter;
     }
     QVERIFY(visibleCount == 0);
    
     // ---> default collection flag is off
     mDummyProxyModel->mItemIds.clear();
     itemId.iId2 = 1;
     itemId.iId1 = KVcxMvcCategoryIdAll;
     mDummyProxyModel->mItemIds.append(itemId);
     mTestWidget->callLongPressGesture(point);
     iter = mTestWidget->mContextMenuActions.begin();
     QVERIFY(iter != mTestWidget->mContextMenuActions.end());
     visibleCount = 0;
     while(iter != mTestWidget->mContextMenuActions.end())
     {
         if(iter.value()->mVisible)
         {
             visibleCount++;   
         }
         ++iter;
     }
     QVERIFY(visibleCount == 4);
    
    // --> getType returns EUserColItems
     mTestWidget->mLastOpenItemId.iId2 = 0;
     mTestWidget->callLongPressGesture(point);
     iter = mTestWidget->mContextMenuActions.begin();
     QVERIFY(iter != mTestWidget->mContextMenuActions.end());
     visibleCount = 0;
     while(iter != mTestWidget->mContextMenuActions.end())
     {
         if(iter.value()->mVisible)
         {
             visibleCount++;   
         }
         ++iter;
     }
     QVERIFY(visibleCount == 4);    
     
     // --> getType returns EUnknow
     mTestWidget->mCurrentLevel = (VideoListWidget::TVideoListLevel)0;
     mTestWidget->callLongPressGesture(point);
      iter = mTestWidget->mContextMenuActions.begin();
      QVERIFY(iter != mTestWidget->mContextMenuActions.end());
      visibleCount = 0;
      while(iter != mTestWidget->mContextMenuActions.end())
      {
          if(iter.value()->mVisible)
          {
              visibleCount++;   
          }
          ++iter;
      }
      QVERIFY(visibleCount == 0);    
}
  
// ---------------------------------------------------------------------------
// testShareItemSlot
// ---------------------------------------------------------------------------
//
void TestListWidget::testShareItemSlot()
{
    // nothing to test yet
    HbMessageBox::mLatestTxt = "";
    mTestWidget->initialize(*mDummyProxyModel);
    connect(this, SIGNAL(testSignal()), mTestWidget, SLOT(shareItemSlot()));
    emit testSignal();
    QVERIFY(!HbMessageBox::mLatestTxt.isEmpty());
    disconnect(this, SIGNAL(testSignal()), mTestWidget, SLOT(shareItemSlot()));
    
}
 
// ---------------------------------------------------------------------------
// testDeleteItemSlot
// ---------------------------------------------------------------------------
//
void TestListWidget::testDeleteItemSlot()
{
    HbMessageBox::mLatestTxt = "";
    VideoSortFilterProxyModel::mLastIndex = QModelIndex();
    mDummyModel->reset(); 
    mTestWidget->initialize(*mDummyProxyModel);    
    connect(this, SIGNAL(testSignal()), mTestWidget, SLOT(deleteItemSlot()));    
    
    // no model
    VideoSortFilterProxyModel *tmp = mTestWidget->mModel;
    mTestWidget->mModel = 0;
    emit testSignal();
    QVERIFY(mDummyModel->dataAccessCount() == 0);
    QVERIFY(HbMessageBox::mLatestTxt.isEmpty());
    QVERIFY(!VideoSortFilterProxyModel::mLastIndex.isValid());
    mDummyModel->reset();
    mTestWidget->mModel = tmp;
    
    // current index is invalid
    mTestWidget->mCurrentIndex = QModelIndex();
    emit testSignal();
    QVERIFY(mDummyModel->dataAccessCount() == 1);
    QVERIFY(HbMessageBox::mLatestTxt.isEmpty());
    QVERIFY(!VideoSortFilterProxyModel::mLastIndex.isValid());
    mDummyModel->reset();
    
    // data fetched from item is invalid
    mDummyModel->setRowCount(1);
    mTestWidget->mCurrentIndex = mDummyProxyModel->index(0, 0, QModelIndex()); 
    emit testSignal();
    QVERIFY(mDummyModel->dataAccessCount() == 1);
    QVERIFY(HbMessageBox::mLatestTxt.isEmpty());
    QVERIFY(!VideoSortFilterProxyModel::mLastIndex.isValid());
    mDummyModel->reset(); 
    
    // data is valid
    mDummyModel->setRowCount(1);
    QVariant data = QString("test");
    mDummyModel->setData( Qt::DisplayRole, data);
    mTestWidget->mCurrentIndex = mDummyProxyModel->index(0, 0, QModelIndex());
    
    // messagebox question returns false
    HbMessageBox::mQuestionReturnValue = false;
    emit testSignal();
    QVERIFY(mDummyModel->dataAccessCount() == 1);
    QVERIFY(!HbMessageBox::mLatestTxt.isEmpty());
    QVERIFY(!VideoSortFilterProxyModel::mLastIndex.isValid());;
    HbMessageBox::mLatestTxt = "";
    mDummyModel->reset(); 
    mDummyModel->setRowCount(1);
    data = QString("test");
    mDummyModel->setData( Qt::DisplayRole, data);
    
    // messagebox question returns true
    HbMessageBox::mQuestionReturnValue = true;
    emit testSignal();
    QVERIFY(mDummyModel->dataAccessCount() == 1);
    QVERIFY(!HbMessageBox::mLatestTxt.isEmpty());
    QVERIFY(VideoSortFilterProxyModel::mLastIndex.row() == 0);
    
    disconnect(this, SIGNAL(testSignal()), mTestWidget, SLOT(deleteItemSlot()));
}
 
// ---------------------------------------------------------------------------
// testRenameSlot
// ---------------------------------------------------------------------------
//
void TestListWidget::testRenameSlot()
{
    // nothing to test yet
    HbMessageBox::mLatestTxt = "";
    mTestWidget->initialize(*mDummyProxyModel);
    connect(this, SIGNAL(testSignal()), mTestWidget, SLOT(renameSlot()));
    emit testSignal();
    QVERIFY(!HbMessageBox::mLatestTxt.isEmpty());
    disconnect(this, SIGNAL(testSignal()), mTestWidget, SLOT(renameSlot()));
}
  
// ---------------------------------------------------------------------------
// testPlayAllSlot
// ---------------------------------------------------------------------------
//
void TestListWidget::testPlayAllSlot()
{
    // nothing to test yet
    HbMessageBox::mLatestTxt = "";
    mTestWidget->initialize(*mDummyProxyModel);
    connect(this, SIGNAL(testSignal()), mTestWidget, SLOT(playAllSlot()));
    emit testSignal();
    QVERIFY(!HbMessageBox::mLatestTxt.isEmpty());
    disconnect(this, SIGNAL(testSignal()), mTestWidget, SLOT(playAllSlot()));    
}
 
// ---------------------------------------------------------------------------
// testAddItemSlot
// ---------------------------------------------------------------------------
//
void TestListWidget::testAddItemSlot()
{
    // nothing to test yet
    HbMessageBox::mLatestTxt = "";
    mTestWidget->initialize(*mDummyProxyModel);
    connect(this, SIGNAL(testSignal()), mTestWidget, SLOT(addItemSlot()));
    emit testSignal();
    QVERIFY(!HbMessageBox::mLatestTxt.isEmpty());
    disconnect(this, SIGNAL(testSignal()), mTestWidget, SLOT(addItemSlot()));    
}
  
// ---------------------------------------------------------------------------
// testAddToCollectionSlot
// ---------------------------------------------------------------------------
//
void TestListWidget::testAddToCollectionSlot()
{
    // nothing to test yet
    HbMessageBox::mLatestTxt = "";
    mTestWidget->initialize(*mDummyProxyModel);
    connect(this, SIGNAL(testSignal()), mTestWidget, SLOT(addToCollectionSlot()));
    emit testSignal();
    QVERIFY(!HbMessageBox::mLatestTxt.isEmpty());
    disconnect(this, SIGNAL(testSignal()), mTestWidget, SLOT(addToCollectionSlot()));    
}
 
// ---------------------------------------------------------------------------
// testOpenDetailsSlot
// ---------------------------------------------------------------------------
//
void TestListWidget::testOpenDetailsSlot()
{
    QSignalSpy spysignal(mTestWidget, SIGNAL(command(int)));
    HbMessageBox::mLatestTxt = "";
    VideoSortFilterProxyModel::mLastIndex = QModelIndex();
    mDummyModel->reset(); 
    mTestWidget->initialize(*mDummyProxyModel);    
    connect(this, SIGNAL(testSignal()), mTestWidget, SLOT(openDetailsSlot())); 

    // no model
    VideoSortFilterProxyModel *tmp = mTestWidget->mModel;
    mTestWidget->mModel = 0;
    emit testSignal();
    QVERIFY(spysignal.count() == 0);
    QVERIFY(!VideoSortFilterProxyModel::mLastIndex.isValid());
    mTestWidget->mModel = tmp;
    
    // detail fetch fails
    mDummyModel->setRowCount(1);
    QVariant data = QString("test");
    mDummyModel->setData( Qt::DisplayRole, data);
    mTestWidget->mCurrentIndex = mDummyProxyModel->index(0, 0, QModelIndex());
    VideoSortFilterProxyModel::mDetailsReturnValue = -1;
    
    emit testSignal();
    QVERIFY(spysignal.count() == 0);
    QVERIFY(VideoSortFilterProxyModel::mLastIndex.row() == 0);
    
    // detail fetch succeeds
    VideoSortFilterProxyModel::mDetailsReturnValue = 0;
    VideoSortFilterProxyModel::mLastIndex = QModelIndex();
    emit testSignal();
    QVERIFY(spysignal.count() == 1);
    QVERIFY(spysignal.at(0).at(0).isValid());
    QVERIFY(spysignal.at(0).at(0).toInt() == MpxHbVideoCommon::ActivateVideoDetailsView);
    QVERIFY(VideoSortFilterProxyModel::mLastIndex.row() == 0);
    
    disconnect(this, SIGNAL(testSignal()), mTestWidget, SLOT(openDetailsSlot())); 
}
 
// ---------------------------------------------------------------------------
// testBack
// ---------------------------------------------------------------------------
//
void TestListWidget::testBack()
{
    QSignalSpy spysignal(mTestWidget, SIGNAL(collectionOpened(bool, const QString&)));
    connect(this, SIGNAL(testSignal()), mTestWidget, SLOT(back()));
    // no model
    hbInstance->mWindowses.append(mDummyMainWnd);
    emit testSignal();        
    QVERIFY(spysignal.count() == 0);
        
    // model exist
    mTestWidget->initialize(*mDummyProxyModel);   
    emit testSignal();    
    QVERIFY(spysignal.count() == 1);
    QVERIFY(spysignal.value(0).at(0).isValid());
    QVERIFY(spysignal.value(0).at(0).toBool() == false);   
    QVERIFY(spysignal.value(0).at(1).isValid());
    QVERIFY(spysignal.value(0).at(1).toString().isEmpty());   
    
    disconnect(this, SIGNAL(testSignal()), mTestWidget, SLOT(back()));
}
  
// ---------------------------------------------------------------------------
// testScrollingEndedSlot
// ---------------------------------------------------------------------------
// 
void TestListWidget::testScrollingEndedSlot()
{
    mTestWidget->initialize(*mDummyProxyModel);
    connect(this, SIGNAL(testSignal()), mTestWidget, SLOT(scrollingEndedSlot()));
    
    // no visible items
    HbListView::mVisibleItems.clear();
    emit testSignal();
    QVERIFY(VideoThumbnailData::mStartBackgroundFetchingCallCount == 0);
    QVERIFY(!mTestWidget->mScrollPositionTimer->isActive());
    
    // setup few "visible" items and make sure item count match at thumbnail data
    int count = 10;
    mDummyModel->setRowCount(count);
    HbAbstractViewItem *item = 0;
    for(int i = 0; i < count; ++i)
    {
        item = new HbAbstractViewItem();
        item->mModelIndex = mDummyModel->index(i, 0, QModelIndex());
        HbListView::mVisibleItems.append(item);
    }
    
    // Test
    emit testSignal();
    QVERIFY(VideoThumbnailData::mStartBackgroundFetchingCallCount == 1);
    QVERIFY(!mTestWidget->mScrollPositionTimer->isActive());

    // Test again when timer is null.
    VideoThumbnailData::mStartBackgroundFetchingCallCount = 0;
    QTimer *backup = mTestWidget->mScrollPositionTimer;
    mTestWidget->mScrollPositionTimer = 0;
    VideoThumbnailData::mStartFetchingThumbnailsThumbnailCount = 0;
    emit testSignal();
    QVERIFY(VideoThumbnailData::mStartBackgroundFetchingCallCount == 1);
    mTestWidget->mScrollPositionTimer = backup;
    backup = 0;
    
    disconnect(this, SIGNAL(testSignal()), mTestWidget, SLOT(scrollingEndedSlot()));
}

// ---------------------------------------------------------------------------
// testScrollingEndedSlot
// ---------------------------------------------------------------------------
// 
void TestListWidget::testScrollPositionChangedSlot()
{
    mTestWidget->initialize(*mDummyProxyModel);
    const QPointF point;
    
    connect(this, SIGNAL(testSignal(const QPointF&)), mTestWidget, SLOT(scrollPositionChangedSlot(const QPointF&)));
    
    // Test
    emit testSignal(point);
    
    // Test again when timer is running.
    mTestWidget->mScrollPositionTimer->start(1000*30);
    emit testSignal(point);
    
    // Test when timer is null.
    QTimer *backup = mTestWidget->mScrollPositionTimer;
    mTestWidget->mScrollPositionTimer = 0;
    emit testSignal(point);
    mTestWidget->mScrollPositionTimer = backup;
    backup = 0;
    
    disconnect(this, SIGNAL(testSignal(const QPointF&)), mTestWidget, SLOT(scrollPositionChangedSlot(const QPointF&)));
}

// end of file