videocollection/videocollectionview/tsrc/testvideolistselectiondialog/src/testvideolistselectiondialog.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 VideoListSelectionDialog
* 
*/
#include "testvideolistselectiondialog.h"
#include <qapplication.h>
#include "hbaction.h"
#include "videocollectionuiloader.h"
#include "videolistwidget.h"
#include "dummydatamodel.h"
#include "videosortfilterproxymodel.h"

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

const int DEFAULT_ROW_COUNT = 10;

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

    char *pass[3];
    pass[0] = argv[0];
    pass[1] = "-o";
    pass[2] = "c:\\data\\testvideolistselectiondialog.txt";
    
    int res = QTest::qExec(&tv, 3, pass);
    
    return res;
}

// ---------------------------------------------------------------------------
// init
// ---------------------------------------------------------------------------
//
void TestVideoListSelectionDialog::init()
{
    mTestUiLoader = new VideoCollectionUiLoader();
    mTestObject = new VideoListSelectionDialog(mTestUiLoader);
    
    mSourceModel = new DummyDataModel();
    mSourceModel->setRowCount(DEFAULT_ROW_COUNT);
    
    mModel = new VideoSortFilterProxyModel();
    mModel->setSourceModel(mSourceModel);
    
    mTestWidget = new VideoListWidget(*mModel);
    
}
 
// ---------------------------------------------------------------------------
// cleanup
// ---------------------------------------------------------------------------
//
void TestVideoListSelectionDialog::cleanup()
{
    delete mTestObject; 
    mTestObject = 0;
    
    delete mTestUiLoader;
    mTestUiLoader = 0;  
    
    delete mTestWidget;
    mTestWidget = 0;
    
    delete mSourceModel;
    mSourceModel = 0;
    
    delete mModel;
    mModel = 0;
}

// ---------------------------------------------------------------------------
// testSetContentEmptyTitle
// ---------------------------------------------------------------------------
//
void TestVideoListSelectionDialog::testSetContentEmptyTitle()
{
    QVERIFY(mTestObject != 0);
    
    QString title = "";
    mTestObject->setContent(title, mTestWidget);
    // at first invalid setContent, all 
    // members remain null
    QVERIFY(mTestObject->mVideoList == 0);
    QVERIFY(mTestObject->mHeading == 0);
    QVERIFY(mTestObject->mItemCount == 0);
    QVERIFY(mTestObject->mCheckBox == 0);
    QVERIFY(mTestObject->mListContainer == 0);
    
    title = "test"; 
    mTestObject->setContent(title, mTestWidget);
    // succeed setContent. All members are initialized
    QVERIFY(mTestObject->mVideoList != 0);
    QVERIFY(mTestObject->mHeading != 0);
    QVERIFY(mTestObject->mItemCount != 0);
    QVERIFY(mTestObject->mCheckBox != 0);
    // list container gets initialized at exec
    QVERIFY(mTestObject->mListContainer == 0);
    
    title = ""; 
    mTestObject->setContent(title, mTestWidget);
    // invalid setContent after one or more succeed one:
    // videolist is nul indicating invalid state, whereas
    // UI components have been fetched from ui loader
    QVERIFY(mTestObject->mVideoList == 0);
    QVERIFY(mTestObject->mHeading != 0);
    QVERIFY(mTestObject->mItemCount != 0);
    QVERIFY(mTestObject->mCheckBox != 0);
    // list container gets initialized at exec
    QVERIFY(mTestObject->mListContainer == 0);
}
    
// ---------------------------------------------------------------------------
// testSetContentNullcontent
// ---------------------------------------------------------------------------
//
void TestVideoListSelectionDialog::testSetContentNullcontent()
{
    QVERIFY(mTestObject != 0);
        
    QString title = "test";
    mTestObject->setContent(title, 0);
    // at first invalid setContent, all 
    // members remain null
    QVERIFY(mTestObject->mVideoList == 0);
    QVERIFY(mTestObject->mHeading == 0);
    QVERIFY(mTestObject->mItemCount == 0);
    QVERIFY(mTestObject->mCheckBox == 0);
    QVERIFY(mTestObject->mListContainer == 0);
    
    mTestObject->setContent(title, mTestWidget);
    // succeed setContent. All members are initialized
    QVERIFY(mTestObject->mVideoList != 0);
    QVERIFY(mTestObject->mHeading != 0);
    QVERIFY(mTestObject->mItemCount != 0);
    QVERIFY(mTestObject->mCheckBox != 0);
    // list container gets initialized at exec
    QVERIFY(mTestObject->mListContainer == 0);
    
    title = ""; 
    mTestObject->setContent(title, 0);
    // invalid setContent after one or more succeed one:
    // videolist is nul indicating invalid state, whereas
    // UI components have been fetched from ui loader
    QVERIFY(mTestObject->mVideoList == 0);
    QVERIFY(mTestObject->mHeading != 0);
    QVERIFY(mTestObject->mItemCount != 0);
    QVERIFY(mTestObject->mCheckBox != 0);
    // list container gets initialized at exec
    QVERIFY(mTestObject->mListContainer == 0);
}
    
// ---------------------------------------------------------------------------
// tesSetContentItemFinding
// ---------------------------------------------------------------------------
//
void TestVideoListSelectionDialog::tesSetContentItemFinding()
{
    // all items are not yet created -> they are to be created
    QString title = "test";
    mTestObject->setContent(title, mTestWidget);
    QVERIFY(mTestObject->mVideoList != 0);
    QVERIFY(mTestObject->mHeading != 0);
    QVERIFY(mTestObject->mItemCount != 0);
    QVERIFY(mTestObject->mCheckBox != 0);
    // list container gets initialized at exec
    QVERIFY(mTestObject->mListContainer == 0);
    QVERIFY(mTestObject->primaryAction());
    QVERIFY(mTestObject->secondaryAction());
    QVERIFY(mTestObject->mHeading->mPlainTxt == title); 
    QVERIFY(mTestObject->mItemCount->mAlignment == Qt::AlignRight);
    QVERIFY(mTestObject->mItemCount->mPlainTxt == "0/" + QString::number(DEFAULT_ROW_COUNT));
    QVERIFY(mTestObject->mCheckBox->mChecked == false);  
    QVERIFY(mTestObject->primaryAction()->mTxt == "OK");
    QVERIFY(mTestObject->secondaryAction()->mTxt == "Cancel");
        
    // all items exists beforehand 
    title = "test2";
    mTestObject->setContent(title, mTestWidget);
    QVERIFY(mTestObject->mVideoList != 0);
    QVERIFY(mTestObject->mHeading != 0);
    QVERIFY(mTestObject->mItemCount != 0);
    QVERIFY(mTestObject->mCheckBox != 0);
    // list container gets initialized at exec
    QVERIFY(mTestObject->mListContainer == 0);
    QVERIFY(mTestObject->primaryAction());
    QVERIFY(mTestObject->secondaryAction());
    QVERIFY(mTestObject->mHeading->mPlainTxt == title); 
    QVERIFY(mTestObject->mItemCount->mAlignment == Qt::AlignRight);
    QVERIFY(mTestObject->mItemCount->mPlainTxt == "0/" + QString::number(DEFAULT_ROW_COUNT));
    QVERIFY(mTestObject->mCheckBox->mChecked == false);  
    QVERIFY(mTestObject->primaryAction()->mTxt == "OK");
    QVERIFY(mTestObject->secondaryAction()->mTxt == "Cancel");
    
}

// ---------------------------------------------------------------------------
// testExec
// ---------------------------------------------------------------------------
//
void TestVideoListSelectionDialog::testExec()
{
    // no videolist
    mTestObject->exec();
    QVERIFY(mTestObject->mVideoList == 0);
    QVERIFY(mTestObject->mHeading == 0);
    QVERIFY(mTestObject->mItemCount == 0);
    QVERIFY(mTestObject->mCheckBox == 0);
    QVERIFY(mTestObject->mListContainer == 0);
    QVERIFY(mTestObject->mSelection.count() ==  0);
    
    QString title = "test";
    mTestObject->setContent(title, mTestWidget);
    
    // mListContainer not yet loaded
    HbDialog::execReturnPrimary = false;
    mTestObject->exec();
    QVERIFY(mTestObject->mVideoList != 0);    
    QVERIFY(mTestObject->mHeading != 0);
    QVERIFY(mTestObject->mItemCount != 0);
    QVERIFY(mTestObject->mCheckBox != 0);
    QVERIFY(mTestObject->mListContainer != 0);
    QVERIFY(mTestObject->mSelection.count() ==  0);
    QVERIFY(mTestObject->mVideoList->mVisibility = true);
    QVERIFY(mTestObject->mVideoList->mEndSelModelStartedCount == 1);
    QVERIFY(mTestObject->mVideoList->mStartSelModeStartedCount == 1);
    QVERIFY(mTestObject->mVideoList->mSelectionMode == HbAbstractItemView::NoSelection);
    
    // mListContainer loaded
    mTestObject->mVideoList->mVisibility = false;
    mTestObject->mVideoList->mEndSelModelStartedCount = 0;
    mTestObject->mVideoList->mStartSelModeStartedCount = 0;
    
    HbDialog::execReturnPrimary = false;
    mTestObject->exec();
    QVERIFY(mTestObject->mVideoList != 0);    
    QVERIFY(mTestObject->mHeading != 0);
    QVERIFY(mTestObject->mItemCount != 0);
    QVERIFY(mTestObject->mCheckBox != 0);
    QVERIFY(mTestObject->mListContainer != 0);
    QVERIFY(mTestObject->mSelection.count() ==  0);
    
    QVERIFY(mTestObject->mVideoList->mVisibility = true);
    QVERIFY(mTestObject->mVideoList->mEndSelModelStartedCount == 1);
    QVERIFY(mTestObject->mVideoList->mStartSelModeStartedCount == 1);
    QVERIFY(mTestObject->mVideoList->mSelectionMode == HbAbstractItemView::NoSelection);
    
    mTestObject->mVideoList->mVisibility = false;
    mTestObject->mVideoList->mEndSelModelStartedCount = 0;
    mTestObject->mVideoList->mStartSelModeStartedCount = 0;
    // not accepted
    HbDialog::execReturnPrimary = true;
    mTestObject->exec();
    QVERIFY(mTestObject->mVideoList != 0);    
    QVERIFY(mTestObject->mHeading != 0);
    QVERIFY(mTestObject->mItemCount != 0);
    QVERIFY(mTestObject->mCheckBox != 0);
    QVERIFY(mTestObject->mListContainer != 0);
    QVERIFY(mTestObject->mSelection.count() ==  0);
    
    QVERIFY(mTestObject->mVideoList->mVisibility = true);
    QVERIFY(mTestObject->mVideoList->mEndSelModelStartedCount == 1);
    QVERIFY(mTestObject->mVideoList->mStartSelModeStartedCount == 1);
    QVERIFY(mTestObject->mVideoList->mSelectionMode == HbAbstractItemView::NoSelection);
}

// ---------------------------------------------------------------------------
// testmMarkAllStateChangedSlot
// ---------------------------------------------------------------------------
//
void TestVideoListSelectionDialog::testmMarkAllStateChangedSlot()
{   
    connect(this, SIGNAL(signalTestMarkAll(int)), mTestObject, SLOT(markAllStateChangedSlot(int)));
    // without videolist
    emit signalTestMarkAll(Qt::Checked);
    QVERIFY(mTestWidget->mInitiallySelected.indexes().count() == 0);

    QString title = "test";
    mTestObject->setContent(title, mTestWidget);   
    mTestObject->mForcedCheck = true;
    // with forcedcheck
    emit signalTestMarkAll(Qt::Checked);
    QVERIFY(mTestWidget->mInitiallySelected.indexes().count() == 0);
    
    mTestObject->mForcedCheck = false;
    // checked
    emit signalTestMarkAll(Qt::Checked);
    QVERIFY(mTestWidget->mInitiallySelected.indexes().count() == DEFAULT_ROW_COUNT);
    
    // not checked (== everything else than Qt::Checked
    emit signalTestMarkAll(Qt::Checked + 1);
    QVERIFY(mTestWidget->mInitiallySelected.indexes().count() == 0);
    disconnect(this, SIGNAL(signalTestMarkAll(int)), mTestObject, SLOT(markAllStateChangedSlot(int)));
}

// ---------------------------------------------------------------------------
// testSelectionChangedSlot
// ---------------------------------------------------------------------------
//
void TestVideoListSelectionDialog::testSelectionChangedSlot()
{
    connect(this, SIGNAL(signalTestSelectionChanged(const QItemSelection&, const QItemSelection&)), 
            mTestObject, SLOT(selectionChangedSlot(const QItemSelection&, const QItemSelection &)));
    ////////////////
    // no primary
    ////////////////
    emit signalTestSelectionChanged(QItemSelection (), QItemSelection ());
    QVERIFY(mTestObject->mSelection.count() == 0);
    
    ////////////////
    // selected == 0 and deselected == 0
    ////////////////
    QString title = "test";
    mTestObject->setContent(title, mTestWidget);           
    emit signalTestSelectionChanged(QItemSelection (), QItemSelection ());
    QVERIFY(mTestObject->getSelection().indexes().count() == 0);
    QVERIFY(mTestObject->primaryAction()->mDisable == true);
    QVERIFY(mTestObject->mCheckBox->mChecked == false);

    ////////////////
    // deselected > 0
    ////////////////
    // "deselect" items from 0 to DEFAULT_ROW_COUNT / 2
    QItemSelection deselection(mSourceModel->index(0, 0, QModelIndex()), mSourceModel->index(DEFAULT_ROW_COUNT / 2, 0, QModelIndex())); 
    
    emit signalTestSelectionChanged(QItemSelection (), deselection);
    QVERIFY(mTestObject->getSelection().indexes().count() == 0);
    QVERIFY(mTestObject->primaryAction()->mDisable == true);
    QVERIFY(mTestObject->mItemCount->mPlainTxt == "0/" + QString::number(DEFAULT_ROW_COUNT));
    QVERIFY(mTestObject->mCheckBox->mChecked == false);
    
    ////////////////
    // selected > 0
    ////////////////
    mTestObject->mSelection.clear();
    // "select" items from (DEFAULT_ROW_COUNT / 2) + 1 to DEFAULT_ROW_COUNT - 1
    QItemSelection selection(mSourceModel->index((DEFAULT_ROW_COUNT / 2) + 1, 0, QModelIndex()), 
                                mSourceModel->index(DEFAULT_ROW_COUNT - 1, 0, QModelIndex()));
   
    int count = 1 + ((DEFAULT_ROW_COUNT - 1) - ((DEFAULT_ROW_COUNT / 2) + 1));
    
    ///////////////
    // selected > 0
    ///////////////
    emit signalTestSelectionChanged(selection, deselection);
    QVERIFY(mTestObject->getSelection().indexes().count() == count);
    QVERIFY(mTestObject->primaryAction()->mDisable == false);
    QVERIFY(mTestObject->mItemCount->mPlainTxt == QString::number(count) + "/" + QString::number(DEFAULT_ROW_COUNT));
    QVERIFY(mTestObject->mCheckBox->mChecked == false);
    
    //////////////////
    // without videolist
    ///////////////
    mTestObject->mVideoList = 0;
    selection.clear();
    deselection.clear();
    mTestObject->mSelection.clear();
    
    // "select" 2 items
    selection.select(mSourceModel->index(DEFAULT_ROW_COUNT - 2, 0, QModelIndex()),
                        mSourceModel->index(DEFAULT_ROW_COUNT - 1, 0, QModelIndex()));
    deselection.select( mSourceModel->index(0, 0, QModelIndex()),
                        mSourceModel->index(DEFAULT_ROW_COUNT - 3, 0, QModelIndex()));
   
    emit signalTestSelectionChanged(selection, deselection);
    QVERIFY(mTestObject->getSelection().indexes().count() == 2);
    QVERIFY(mTestObject->primaryAction()->mDisable == false);
    QVERIFY(mTestObject->mCheckBox->mChecked == false);
    // count should have not changed
    QVERIFY(mTestObject->mItemCount->mPlainTxt == QString::number(count) + "/" + QString::number(DEFAULT_ROW_COUNT));
    
    ///////////////
    // wihtout mItemCount
    ///////////////
    mTestObject->mVideoList = mTestWidget;
    HbLabel *tmpLabel = mTestObject->mItemCount;
    mTestObject->mItemCount = 0;
    selection.clear();
    deselection.clear();
    mTestObject->mSelection.clear();
    
    // "select" 2 items
    selection.select(mSourceModel->index(DEFAULT_ROW_COUNT - 2, 0, QModelIndex()),
                        mSourceModel->index(DEFAULT_ROW_COUNT - 1, 0, QModelIndex()));   
    deselection.select( mSourceModel->index(0, 0, QModelIndex()),
                           mSourceModel->index(DEFAULT_ROW_COUNT - 3, 0, QModelIndex()));
    
    emit signalTestSelectionChanged(selection, deselection);
    QVERIFY(mTestObject->getSelection().indexes().count() == 2);
    QVERIFY(mTestObject->primaryAction()->mDisable == false);
    QVERIFY(mTestObject->mCheckBox->mChecked == false);
    mTestObject->mItemCount = tmpLabel;
    
    ///////////////
    // selectionCount == rowCount and rowcount == 0
    ///////////////
    mSourceModel->setRowCount(0);
    selection.clear();
    deselection.clear();
    mTestObject->mSelection.clear();

    emit signalTestSelectionChanged(selection, deselection);
    QVERIFY(mTestObject->getSelection().indexes().count() == 0);
    QVERIFY(mTestObject->primaryAction()->mDisable == true);
    QVERIFY(mTestObject->mItemCount->mPlainTxt == "0/0");
    QVERIFY(mTestObject->mCheckBox->mChecked == false);
    
    mSourceModel->setRowCount(DEFAULT_ROW_COUNT);
    
    ///////////////
   // selectionCount == rowCount and rowcount > 0
   ///////////////
    selection.clear();
    deselection.clear();
    selection.select(mSourceModel->index(0, 0, QModelIndex()),
                            mSourceModel->index(DEFAULT_ROW_COUNT - 1, 0, QModelIndex()));
    
    emit signalTestSelectionChanged(selection, deselection);
    QVERIFY(mTestObject->getSelection().indexes().count() == DEFAULT_ROW_COUNT);
    QVERIFY(mTestObject->primaryAction()->mDisable == false);
    QVERIFY(mTestObject->mCheckBox->mChecked == true);
    QVERIFY(mTestObject->mItemCount->mPlainTxt == QString::number(DEFAULT_ROW_COUNT) + "/" + QString::number(DEFAULT_ROW_COUNT));
    
    disconnect(this, SIGNAL(signalTestSelectionChanged(const QItemSelection&, const QItemSelection&)), 
                mTestObject, SLOT(selectionChangedSlot(const QItemSelection&, const QItemSelection &)));
}
// End of file