videocollection/videocollectionview/tsrc/testlistview/src/testlistview.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 VideoListView
*
*/

#include <QtTest/QtTest>
#include <QMap>
#include <hbapplication.h>
#include <hbinstance.h>
#include <qactiongroup.h>
#include <hbmenu.h>
#include <hbtoolbar.h>
#include <hbaction.h>
#include <videocollectioncommon.h>
#include <hbstackedwidget.h>
#include <hbgroupbox.h>

#include "dummyhbmenu.h"
#include "videocollectionwrapper.h"
#include "testlistview.h"
#include "videolistwidget.h"
#include "videocollectionviewutils.h"
#include "videolistselectiondialog.h"
#include "videosortfilterproxymodel.h"
#include "videocollectionwrapper.h"
#include "dummydatamodel.h"
#include "videocollectionuiloader.h"
#include "videohintwidget.h"

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

// ---------------------------------------------------------------------------
// main
// ---------------------------------------------------------------------------
//
int	main(int argc, char	*argv[])
{
	HbApplication app(argc,	argv);
	HbMainWindow window;

	TestListView tv;

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

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

	return res;
}

// ---------------------------------------------------------------------------
// init
// ---------------------------------------------------------------------------
//
void TestListView::init(bool initTestView)
{
    VideoListWidget::mInitializeCount = 0;
    VideoListWidget::mInitializeReturnValue = 0;
    VideoListWidget::mActivateCount = 0;
    VideoListWidget::mActivateReturnValue = 0;
    VideoListWidget::mActive = false;
    VideoListWidget::mDeactivateCount = 0;
	VideoCollectionWrapper::mOpenFails	= false;
	VideoCollectionWrapper::mGetModelFails	= false;
	VideoCollectionViewUtils::mSortRole = -1;
    VideoListSelectionDialog::mSelectionCount =	0;
	VideoListSelectionDialog::mMultiSelectionLaunchCount = 0;
	VideoListSelectionDialog::mMultiSelectionItemSelectionCount	= 0;
	VideoListSelectionDialog::mExecReturnPrimary = false;
	VideoCollectionViewUtils::mSortOrder = Qt::AscendingOrder;
	VideoSortFilterProxyModel::mOpenFails =	0;
	VideoSortFilterProxyModel::mDoSortingCallCount = 0;

	mUiLoader = new VideoCollectionUiLoader();

	mUiLoader->reset();

	bool ok(false);

	QList<QObject *> objects = mUiLoader->load(DOCML_VIDEOCOLLECTIONVIEW_FILE, &ok);

    if (!ok)
    {
    	return;
    }

    mTestView = mUiLoader->findObject<VideoListView>( DOCML_NAME_VIEW );

    QVERIFY(mTestView);
    
    mListWidget = mUiLoader->findWidget<VideoListWidget>(DOCML_NAME_VC_VIDEOLISTWIDGET);

    if(initTestView)
	{
		QVERIFY(mTestView->initializeView()	== 0);
	    VideoSortFilterProxyModel::mDoSortingCallCount = 0;
        VideoSortFilterProxyModel::mSortRole = -1;
        VideoSortFilterProxyModel::mSortOrder = Qt::AscendingOrder;
	}
	mWrapper = VideoCollectionWrapper::instance();
	QVERIFY(mWrapper->open(VideoListWidget::ELevelVideos) != 0);
}

// ---------------------------------------------------------------------------
// cleanup
// ---------------------------------------------------------------------------
//
void TestListView::cleanup()
{
	delete mTestView;
	mTestView =	0;
	if(mWrapper)
	{
	    mWrapper->decreaseReferenceCount();
	    QCOMPARE(mWrapper->mReferenceCount, 0);
    }

	disconnect();
}

// ---------------------------------------------------------------------------
// visibleMenuActions
// ---------------------------------------------------------------------------
//
int	TestListView::visibleMenuActions()
{
	int	visibleActions(0);
	VideoListView::TViewActionIds key;
	HbAction *action(0);
	foreach(key,mTestView->mMenuActions.keys())
	{
		action = dynamic_cast<HbAction*>(mTestView->mMenuActions[key]);
		if(action && action->isVisible())
			visibleActions++;
	}
	return visibleActions;
}

// ---------------------------------------------------------------------------
// testCreateDelete
// ---------------------------------------------------------------------------
//
void TestListView::testCreateDelete()
{
    mWrapper = 0;

    mUiLoader = new VideoCollectionUiLoader();

	mUiLoader->reset();

	bool ok(false);

	QList<QObject *> objects = mUiLoader->load(DOCML_VIDEOCOLLECTIONVIEW_FILE, &ok);

    if (!ok)
    {
    	return;
    }

    mTestView = mUiLoader->findObject<VideoListView>( DOCML_NAME_VIEW );

    delete mTestView;
	mTestView =	0;
}

// ---------------------------------------------------------------------------
// Slot: test initialize view
// ---------------------------------------------------------------------------
//
void TestListView::testInitializeView()
{
	init(false);
	// Test	videolist widget creation failure.
	VideoListWidget::mInitializeReturnValue	= -1;
	QVERIFY( mTestView->initializeView() < 0 );
	QVERIFY( mTestView->mVideoListWidget ==	0 );
	QVERIFY( mTestView->mVideoHintWidget == 0 );
	QVERIFY( mTestView->mToolbarViewsActionGroup == 0 );
	QVERIFY( mTestView->mToolbarCollectionActionGroup == 0 );
	QVERIFY( mTestView->mVideoServices == 0 );
	QVERIFY( mTestView->mIsService == false );

	cleanup();

	// Test	widget creation	succeed.
	init(false);
    VideoCollectionViewUtils::mSortRole = Qt::DisplayRole;
    VideoCollectionViewUtils::mSortOrder = Qt::DescendingOrder;
	QVERIFY( mTestView->initializeView() ==	0 );
	// Verify
	QVERIFY( mTestView->mVideoListWidget !=	0 );
    QVERIFY( mTestView->mVideoHintWidget != 0 );
	QCOMPARE( VideoListWidget::mInitializeCount, 1 );
	QVERIFY( mTestView->mToolbarViewsActionGroup != 0 );
	QVERIFY( mTestView->mToolbarCollectionActionGroup != 0 );
	QCOMPARE( mTestView->mToolbarViewsActionGroup->actions().count(), 3 );
	QCOMPARE( mTestView->mToolbarCollectionActionGroup->actions().count(), 3 );
	QCOMPARE( mTestView->toolBar()->actions().count(), 3 );
	// to my understanding the all videos action should	always be first.
    QCOMPARE( mTestView->mToolbarViewsActionGroup->actions().first()->toolTip(), tr("All videos") );
	QVERIFY( mTestView->mToolbarViewsActionGroup->actions().first()->isChecked()	);
	QCOMPARE( VideoSortFilterProxyModel::mSortRole, (int)Qt::DisplayRole );
	QCOMPARE( VideoSortFilterProxyModel::mSortOrder, Qt::DescendingOrder );
	QVERIFY( VideoSortFilterProxyModel::mSortAsync == false );
	QVERIFY( mTestView->mVideoServices == 0 );
	QVERIFY( mTestView->mIsService == false );
	cleanup();
	cleanup();

	// Test	command	signal.
	init(true);
	connect( this, SIGNAL(testSignal(int)),	mTestView->mVideoListWidget, SIGNAL(command(int)) );
	QSignalSpy spy(mTestView, SIGNAL(command(int)));
	emit testSignal(5);
	QCOMPARE( spy.count(), 1 );
	QList<QVariant>	arguments =	spy.takeFirst();
	QCOMPARE( arguments.at(0).toInt(), 5 );
	disconnect();
	cleanup();

	init(true);
	VideoListWidget* list = mTestView->mVideoListWidget;
	VideoHintWidget* hint = mTestView->mVideoHintWidget;
	QPointer<QActionGroup> toolbar = mTestView->mToolbarViewsActionGroup;
	QPointer<QActionGroup> toolbar2 = mTestView->mToolbarCollectionActionGroup;

	// Test	calling	initializeView again.
	QVERIFY( mTestView->initializeView() ==	0 );

	QVERIFY( toolbar !=	0 );
	QVERIFY( toolbar2 != 0 );
	QVERIFY( mTestView->mVideoListWidget ==	list );
	QVERIFY( mTestView->mVideoHintWidget == hint );
	QVERIFY( mTestView->mToolbarViewsActionGroup == toolbar );
	QVERIFY( mTestView->mToolbarCollectionActionGroup == toolbar2 );

	// Test	view deletion.
	cleanup();
	QVERIFY( toolbar ==	0 );
	QVERIFY( toolbar2 == 0 );

	// Test	get	model failure.
	init(false);
	QVERIFY(mTestView);
	VideoCollectionWrapper::mGetModelFails	= true;
	QVERIFY( mTestView->initializeView() < 0 );
	QVERIFY( mTestView->mVideoListWidget ==	0 );
	QVERIFY( mTestView->mVideoHintWidget	== 0 );
	QVERIFY( mTestView->mToolbarViewsActionGroup	== 0 );
	QVERIFY( mTestView->mToolbarCollectionActionGroup	== 0 );
	cleanup();

	// Test	model open failure.
	init(false);
	QVERIFY(mTestView);
	VideoSortFilterProxyModel::mOpenFails =	true;
	QVERIFY( mTestView->initializeView() < 0 );
	QVERIFY( mTestView->mVideoListWidget ==	0 );
	QVERIFY( mTestView->mVideoHintWidget == 0 );
	QVERIFY( mTestView->mToolbarViewsActionGroup == 0 );
	QVERIFY( mTestView->mToolbarCollectionActionGroup == 0 );
	cleanup();

	// Test sorting value load 'failure'.
	init(false);
    VideoCollectionViewUtils::mSortRole = Qt::DisplayRole;
    VideoCollectionViewUtils::mSortOrder = Qt::DescendingOrder;
    VideoCollectionViewUtils::mLoadSortingValuesFails = true;
    QVERIFY( mTestView->initializeView() == 0 );
    QCOMPARE( VideoSortFilterProxyModel::mSortRole, (int)VideoCollectionCommon::KeyDateTime );
    QCOMPARE( VideoSortFilterProxyModel::mSortOrder, Qt::AscendingOrder );
    QVERIFY( VideoSortFilterProxyModel::mSortAsync == false );
    cleanup();
}

// ---------------------------------------------------------------------------
// Slot: test create menu
// ---------------------------------------------------------------------------
//
void TestListView::testCreateListMenu()
{
	init(false);
	VideoListWidget::mInitializeReturnValue	= -1;
	QVERIFY( mTestView->initializeView() < 0 );
	HbMenu*	menu = mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU);
	QVERIFY( menu );
	QCOMPARE( menu->actions().count(), 4 );

	cleanup();

	init(false);
	VideoListWidget::mInitializeReturnValue	= 0;
	QVERIFY( mTestView->initializeView() ==	0 );
	menu = mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU);
	QVERIFY( menu );
	QCOMPARE( menu->actions().count(), 4 );

	HbAction* sortAction = dynamic_cast<HbAction*>(menu->actions().at(3));
	QVERIFY( sortAction	);
	menu = mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU);
	QVERIFY(menu !=	0);
	QVERIFY( menu->actions().count() ==	4 );

	QVERIFY( mTestView->mMenuActions.count() ==	9 );
	QVERIFY( mTestView->mSortingRoles.count() == 5 );

	cleanup();
}

// ---------------------------------------------------------------------------
// testMenus
// ---------------------------------------------------------------------------
//
void TestListView::testMenus()
{
	init();

	HbAction* action;
	QList<QAction*> tbActions = mTestView->toolBar()->actions();
	QList<QAction*>	tbGroupActions;
	QList<QAction*>	tbGroupActions2;

	// All videos is open for default, verify.
	QVERIFY(mTestView->mToolbarViewsActionGroup != 0);
	QVERIFY(mTestView->mToolbarCollectionActionGroup != 0);
	tbGroupActions = mTestView->mToolbarViewsActionGroup->actions();
	tbGroupActions2 = mTestView->mToolbarCollectionActionGroup->actions();
	QVERIFY(mTestView->mToolbarActions.count() == 6);
	QVERIFY(tbActions.count() == 3);
	QVERIFY(tbGroupActions.count() == 3);
	QVERIFY(tbGroupActions2.count() == 3);
	QVERIFY( tbGroupActions.at(0)->isChecked() ); // First is checked.
	// visible menu items remains constant after init until
	// aboutToShowMainMenuSlot is called
	QVERIFY(visibleMenuActions() == 9);
	// Verify checkable	and	visible	toolbar	actions.
	HbAction* allVideosAction =	mTestView->mToolbarActions[VideoListView::ETBActionAllVideos];
	HbAction* collectionsAction	= mTestView->mToolbarActions[VideoListView::ETBActionCollections];
	HbAction* servicesAction = mTestView->mToolbarActions[VideoListView::ETBActionServices];
	HbAction* addVideosAction =	mTestView->mToolbarActions[VideoListView::ETBActionAddVideos];
	HbAction* removeVideosAction = mTestView->mToolbarActions[VideoListView::ETBActionRemoveVideos];
	HbAction* sortVideosAction = mTestView->mToolbarActions[VideoListView::ETBActionSortVideos];
	QVERIFY( allVideosAction !=	0 && allVideosAction->isCheckable()	&& allVideosAction->isVisible() &&
			tbActions.at(0) == tbGroupActions.at(0));
	QVERIFY( collectionsAction != 0	&& collectionsAction->isCheckable()	&& collectionsAction->isVisible() &&
			tbActions.at(1) == tbGroupActions.at(1));
	QVERIFY( servicesAction	!= 0 &&	servicesAction->isCheckable() && servicesAction->isVisible() &&
			tbActions.at(2) == tbGroupActions.at(2));
	QVERIFY( addVideosAction !=	0 && !addVideosAction->isCheckable() &&
			tbActions.at(0) != tbGroupActions2.at(0));
	QVERIFY( removeVideosAction	!= 0 &&	!removeVideosAction->isCheckable() &&
			tbActions.at(1) != tbGroupActions2.at(1));
	QVERIFY( sortVideosAction != 0 && !sortVideosAction->isCheckable() &&
			tbActions.at(2) != tbGroupActions2.at(2));

	// Open	collections.
	action = dynamic_cast<HbAction*>(tbGroupActions.at(1));
	QVERIFY(action);
	action->setChecked(false);
	action->trigger();

	// Verify.
	QVERIFY(mTestView->mToolbarViewsActionGroup);
	tbGroupActions = mTestView->mToolbarViewsActionGroup->actions();
	QVERIFY(mTestView->mToolbarActions.count() == 6);
	QVERIFY(tbGroupActions.count() == 3);
	QVERIFY(tbGroupActions2.count() == 3);
	QVERIFY( tbGroupActions.at(1)->isChecked() ); // 2nd is	checked.
	// visible menu items remains constant after init until
	// aboutToShowMainMenuSlot is called
	QVERIFY(visibleMenuActions() ==	9);
	// Verify checkable	and	visible	toolbar	actions.
	allVideosAction	= mTestView->mToolbarActions[VideoListView::ETBActionAllVideos];
	collectionsAction =	mTestView->mToolbarActions[VideoListView::ETBActionCollections];
	servicesAction = mTestView->mToolbarActions[VideoListView::ETBActionServices];
	addVideosAction	= mTestView->mToolbarActions[VideoListView::ETBActionAddVideos];
	removeVideosAction = mTestView->mToolbarActions[VideoListView::ETBActionRemoveVideos];
	sortVideosAction = mTestView->mToolbarActions[VideoListView::ETBActionSortVideos];
	QVERIFY( allVideosAction !=	0 && allVideosAction->isCheckable()	&& allVideosAction->isVisible()	&&
			tbActions.at(0) == tbGroupActions.at(0));
	QVERIFY( collectionsAction != 0	&& collectionsAction->isCheckable()	&& collectionsAction->isVisible() &&
			tbActions.at(1) == tbGroupActions.at(1));
	QVERIFY( servicesAction	!= 0 &&	servicesAction->isCheckable() && servicesAction->isVisible() &&
			tbActions.at(2) == tbGroupActions.at(2));
	QVERIFY( addVideosAction !=	0 && !addVideosAction->isCheckable() &&
			tbActions.at(0) != tbGroupActions2.at(0));
	QVERIFY( removeVideosAction	!= 0 &&	!removeVideosAction->isCheckable() &&
			tbActions.at(1) != tbGroupActions2.at(1));
	QVERIFY( sortVideosAction != 0 && !sortVideosAction->isCheckable() &&
			tbActions.at(2) != tbGroupActions2.at(2));

	cleanup();
}

// ---------------------------------------------------------------------------
// Slot: test create toolbar
// ---------------------------------------------------------------------------
//
void TestListView::testCreateAction()
{
	init();

	QVERIFY(mTestView->mToolbarViewsActionGroup != 0);

	QList<QAction*>	actions	= mTestView->mToolbarViewsActionGroup->actions();
	actions.append(mTestView->mToolbarCollectionActionGroup->actions());
	QVERIFY(actions.count()	== 6);

	QCOMPARE( mTestView->toolBar()->actions().count(), 3 );

	HbAction* allVideos	= static_cast<HbAction*>(actions.at(0));
	QVERIFY( allVideos->isCheckable() );
    QCOMPARE( allVideos->toolTip(), tr("All videos") );
	QCOMPARE( allVideos->icon().iconName(),	QString(":/images/qtg_mono_video_all.svg")	);

	HbAction* collections =	static_cast<HbAction*>(actions.at(1));
	QVERIFY( collections->isCheckable()	);
	QCOMPARE( collections->toolTip(), tr("Collections")	);
	QCOMPARE( collections->icon().iconName(), QString(":/images/qtg_mono_video_collection.svg") );

	HbAction* services = static_cast<HbAction*>(actions.at(2));
	QVERIFY( services->isCheckable() );
	QCOMPARE( services->toolTip(), tr("Services") );
	QCOMPARE( services->icon().iconName(), QString(":/images/qtg_mono_video_services.svg") );

	HbAction* addVideos	= static_cast<HbAction*>(actions.at(3));
	QVERIFY( !addVideos->isCheckable() );
    QCOMPARE( addVideos->toolTip(), tr("Add videos") );
	QCOMPARE( addVideos->icon().iconName(),	QString(":/images/mono_video_addvideos.svg") );

	HbAction* removeVideos = static_cast<HbAction*>(actions.at(4));
	QVERIFY( !removeVideos->isCheckable() );
	QCOMPARE( removeVideos->toolTip(), tr("Remove videos") );
	QCOMPARE( removeVideos->icon().iconName(), QString(":/images/mono_video_removevideos.svg") );

	HbAction* sortVideos = static_cast<HbAction*>(actions.at(5));
	QVERIFY( !sortVideos->isCheckable()	);
	QCOMPARE( sortVideos->toolTip(), tr("Sort by") );
	QCOMPARE( sortVideos->icon().iconName(), QString(":/images/mono_video_sortvideos.svg") );

	cleanup();
}

// ---------------------------------------------------------------------------
// Slot: test activate view
// ---------------------------------------------------------------------------
//
void TestListView::testActivateView()
{
	init();

	VideoListWidget* list = mTestView->mVideoListWidget;
	mTestView->mVideoListWidget = 0;

	QCOMPARE( mTestView->activateView(), -1	);
	QVERIFY( mTestView->mVideoListWidget->mActive == false );
	QCOMPARE( mTestView->mVideoListWidget->mActivateCount, 0 );
	QCOMPARE( mTestView->mVideoListWidget->mDeactivateCount, 0 );
	QVERIFY( mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->isEnabled() == false );
	
	mTestView->mVideoListWidget = list;

	VideoListWidget::mActivateReturnValue =	-1;

	QCOMPARE( mTestView->activateView(), -1	);
	QVERIFY( mTestView->mVideoListWidget->mActive == false );
	QCOMPARE( mTestView->mVideoListWidget->mActivateCount, 1 );
	QCOMPARE( mTestView->mVideoListWidget->mDeactivateCount, 1 );
	QVERIFY( mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->isEnabled() == false );

	VideoListWidget::mActivateReturnValue =	0;
	
	QCOMPARE( mTestView->activateView(), 0 );
	QVERIFY( mTestView->mVideoListWidget->mActive );
	QCOMPARE( mTestView->mVideoListWidget->mActivateCount, 2 );
	QCOMPARE( mTestView->mVideoListWidget->mDeactivateCount, 1 );
	QVERIFY( mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->isEnabled() );

	QCOMPARE( mTestView->activateView(), 0 );
	QVERIFY( mTestView->mVideoListWidget->mActive );
	QCOMPARE( mTestView->mVideoListWidget->mActivateCount, 3 );
	QCOMPARE( mTestView->mVideoListWidget->mDeactivateCount, 1 );
	QVERIFY( mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->isEnabled() );

	cleanup();
}

// ---------------------------------------------------------------------------
// Slot: test deactivate view
// ---------------------------------------------------------------------------
//
void TestListView::testDeactivateView()
{
	init();

    VideoListWidget* list = mTestView->mVideoListWidget;
    mTestView->mVideoListWidget = 0;

	mTestView->deactivateView();
	QVERIFY( mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->isVisible() == false );
	QVERIFY( mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->isEnabled() == false );
	QCOMPARE( mTestView->mVideoListWidget->mDeactivateCount, 0 );

    mTestView->mVideoListWidget = list;

	mTestView->deactivateView();
	QVERIFY( mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->isVisible() == false );
	QVERIFY( mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->isEnabled() == false );
	QCOMPARE( mTestView->mVideoListWidget->mDeactivateCount, 1 );

	VideoListWidget::mActivateReturnValue =	0;
	mTestView->activateView();
	mTestView->deactivateView();
	QVERIFY( mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->isVisible() == false );
	QVERIFY( mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->isEnabled() == false );
	QCOMPARE( mTestView->mVideoListWidget->mActivateCount, 1 );
	QCOMPARE( mTestView->mVideoListWidget->mDeactivateCount, 2 );

	cleanup();
}

// ---------------------------------------------------------------------------
// testBack
// ---------------------------------------------------------------------------
//
void TestListView::testBack()
{
	init();

	mTestView->back();

	cleanup();
}

// ---------------------------------------------------------------------------
// Slot: test open all videos slot
// ---------------------------------------------------------------------------
//
void TestListView::testOpenAllVideosViewSlot()
{
	init();

	QList<QAction*>	actions	= mTestView->mToolbarViewsActionGroup->actions();
	HbAction* action = static_cast<HbAction*>(actions.at(0));
	
	mTestView->mVideoListWidget->mType = VideoListWidget::EAllVideos;
	mTestView->mVideoListWidget->mCurrentLevel = VideoListWidget::ELevelCategory;
	mTestView->mSubLabel->setHeading("invalid");
	mTestView->mModel->mLevel = -1;
	
	// action wont emit	if it's	already	checked.
	action->setChecked(false);
	action->trigger();
	QCOMPARE( mTestView->mVideoListWidget->mCurrentLevel, VideoListWidget::ELevelVideos );
	QVERIFY( mTestView->mVideoListWidget->mActive == true );
	QCOMPARE( mTestView->mVideoListWidget->mActivateCount, 1 );
	QCOMPARE( mTestView->mVideoListWidget->mDeactivateCount, 0 );
	QCOMPARE( mTestView->mSubLabel->heading(), tr("%1 videos").arg(mTestView->mModel->rowCount()) );
	QCOMPARE( mTestView->mModel->mLevel, (int)VideoListWidget::ELevelVideos );

	mTestView->activateView();
	
	mTestView->mVideoListWidget->mActivateCount = 0;
    mTestView->mVideoListWidget->mType = VideoListWidget::EAllVideos;
    mTestView->mVideoListWidget->mCurrentLevel = VideoListWidget::ELevelCategory;
    mTestView->mSubLabel->setHeading("invalid");
    mTestView->mModel->mLevel = -1;
    
    // action wont emit	if it's	already	checked.
	action->setChecked(false);
	action->trigger();
    QCOMPARE( mTestView->mVideoListWidget->mCurrentLevel, VideoListWidget::ELevelVideos );
    QVERIFY( mTestView->mVideoListWidget->mActive == true );
	QCOMPARE( mTestView->mVideoListWidget->mActivateCount, 1 );
	QCOMPARE( mTestView->mVideoListWidget->mDeactivateCount, 0 );
    QCOMPARE( mTestView->mSubLabel->heading(), tr("%1 videos").arg(mTestView->mModel->rowCount()) );
    QCOMPARE( mTestView->mModel->mLevel, (int)VideoListWidget::ELevelVideos );

	cleanup();
}

// ---------------------------------------------------------------------------
// Slot: test open collections view	slot
// ---------------------------------------------------------------------------
//
void TestListView::testOpenCollectionViewSlot()
{
	init();

	QList<QAction*>	actions	= mTestView->mToolbarViewsActionGroup->actions();
	HbAction* action = static_cast<HbAction*>(actions.at(1));

    mTestView->mVideoListWidget->mType = VideoListWidget::ECollections;
    mTestView->mVideoListWidget->mCurrentLevel = VideoListWidget::ELevelVideos;
    mTestView->mSubLabel->setHeading("invalid");
    mTestView->mModel->mLevel = -1;

	// action wont emit	if it's	already	checked.
	action->setChecked(false);
	action->trigger();
    QCOMPARE( mTestView->mVideoListWidget->mCurrentLevel, VideoListWidget::ELevelCategory );
    QVERIFY( mTestView->mVideoListWidget->mActive == true );
    QCOMPARE( mTestView->mVideoListWidget->mActivateCount, 1 );
    QCOMPARE( mTestView->mVideoListWidget->mDeactivateCount, 0 );
    QCOMPARE( mTestView->mSubLabel->heading(), tr("%1 collections").arg(mTestView->mModel->rowCount()) );
    QCOMPARE( mTestView->mModel->mLevel, (int)VideoListWidget::ELevelCategory );

	mTestView->activateView();

    mTestView->mVideoListWidget->mActivateCount = 0;
    mTestView->mVideoListWidget->mType = VideoListWidget::ECollections;
    mTestView->mVideoListWidget->mCurrentLevel = VideoListWidget::ELevelVideos;
    mTestView->mSubLabel->setHeading("invalid");
    mTestView->mModel->mLevel = -1;
    
    // action wont emit	if it's	already	checked.
	action->setChecked(false);
	action->trigger();
    QCOMPARE( mTestView->mVideoListWidget->mCurrentLevel, VideoListWidget::ELevelCategory );
    QVERIFY( mTestView->mVideoListWidget->mActive == true );
    QCOMPARE( mTestView->mVideoListWidget->mActivateCount, 1 );
    QCOMPARE( mTestView->mVideoListWidget->mDeactivateCount, 0 );
    QCOMPARE( mTestView->mSubLabel->heading(), tr("%1 collections").arg(mTestView->mModel->rowCount()) );
    QCOMPARE( mTestView->mModel->mLevel, (int)VideoListWidget::ELevelCategory );

	cleanup();
}
// ---------------------------------------------------------------------------
// Slot: test open services	view slot
// ---------------------------------------------------------------------------
//
void TestListView::testOpenServicesViewSlot()
{
	init();

	QList<QAction*>	actions	= mTestView->mToolbarViewsActionGroup->actions();
	HbAction* action = static_cast<HbAction*>(actions.at(2));

	// action wont emit	if it's	already	checked.
	action->setChecked(false);
	action->trigger();
	
	cleanup();
}

// ---------------------------------------------------------------------------
// testStartSorting
// ---------------------------------------------------------------------------
//
void TestListView::testStartSortingSlot()
{
	HbAction *action(0);

	// Active action is	not	sort by.
	init(true);
	action = mTestView->mMenuActions[VideoListView::EActionDelete];
	QVERIFY(action != 0);
	mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->setActiveAction(action);
	connect(this, SIGNAL(testSignal(int)), mTestView, SLOT(startSorting()));
	emit testSignal(0);
	QCOMPARE(VideoSortFilterProxyModel::mDoSortingCallCount, 0);
	QCOMPARE(VideoSortFilterProxyModel::mSortRole, -1);
	cleanup();

	// Sort	by action has no menu.
	init(true);

	// Change sort by action to	delete action which	has	no menu.
	HbAction *sortByAction = mTestView->mMenuActions[VideoListView::EActionSortBy];
	HbAction *deleteAction = mTestView->mMenuActions[VideoListView::EActionDelete];
	mTestView->mMenuActions[VideoListView::EActionSortBy] =	deleteAction;
	mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->setActiveAction(deleteAction);

	connect(this, SIGNAL(testSignal(int)), mTestView, SLOT(startSorting()));
	emit testSignal(0);
    QCOMPARE(VideoSortFilterProxyModel::mDoSortingCallCount, 0);
    QCOMPARE(VideoSortFilterProxyModel::mSortRole, -1);

	// Change the action back.
	mTestView->mMenuActions[VideoListView::EActionSortBy] =	sortByAction;

	cleanup();

	// View	is not initialized.
	init(false);
	connect(this, SIGNAL(testSignal(int)), mTestView, SLOT(startSorting()));
	emit testSignal(0);
    QCOMPARE(VideoSortFilterProxyModel::mDoSortingCallCount, 0);
    QCOMPARE(VideoSortFilterProxyModel::mSortRole, -1);
	cleanup();

	// Good	case.
	init();
	action = mTestView->mMenuActions[VideoListView::EActionSortBy];
	QVERIFY(action != 0);
	mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->setActiveAction(action);
	HbAction* sortAction = mTestView->mMenuActions[VideoListView::EActionSortByName];
	QVERIFY(sortAction != 0);
	action->menu()->setActiveAction(sortAction);

	connect(this, SIGNAL(testSignal(int)), mTestView, SLOT(startSorting()));
	emit testSignal(0);
	QCOMPARE(VideoSortFilterProxyModel::mDoSortingCallCount, 1);
	QCOMPARE(VideoSortFilterProxyModel::mSortRole, (int)Qt::DisplayRole);
	QCOMPARE(VideoSortFilterProxyModel::mSortOrder, Qt::AscendingOrder);
    QVERIFY(VideoSortFilterProxyModel::mSortAsync);

    // emit test signal again, with same parameters. Sorting should be switched to
    // descending order.
    emit testSignal(0);
    QCOMPARE(VideoSortFilterProxyModel::mDoSortingCallCount, 2);
    QCOMPARE(VideoSortFilterProxyModel::mSortRole, (int)Qt::DisplayRole);
    QCOMPARE(VideoSortFilterProxyModel::mSortOrder, Qt::DescendingOrder);
    QVERIFY(VideoSortFilterProxyModel::mSortAsync);

    // on third emit, sorting should be switched back to ascending
    emit testSignal(0);
    QCOMPARE(VideoSortFilterProxyModel::mDoSortingCallCount, 3);
    QCOMPARE(VideoSortFilterProxyModel::mSortRole, (int)Qt::DisplayRole);
    QCOMPARE(VideoSortFilterProxyModel::mSortOrder, Qt::AscendingOrder);
    QVERIFY(VideoSortFilterProxyModel::mSortAsync);

    // test that after changing the sort role, the order is also switched to ascending.
    VideoSortFilterProxyModel::mSortOrder = Qt::DescendingOrder;
    sortAction = mTestView->mMenuActions[VideoListView::EActionSortByDate];
    QVERIFY(sortAction != 0);
    action->menu()->setActiveAction(sortAction);

    emit testSignal(0);
    QCOMPARE(VideoSortFilterProxyModel::mDoSortingCallCount, 4);
    QCOMPARE(VideoSortFilterProxyModel::mSortRole, (int)VideoCollectionCommon::KeyDateTime);
    QCOMPARE(VideoSortFilterProxyModel::mSortOrder, Qt::AscendingOrder);
    QVERIFY(VideoSortFilterProxyModel::mSortAsync);

	cleanup();
}

// ---------------------------------------------------------------------------
// Slot: test orientation related slots
// ---------------------------------------------------------------------------
//
void TestListView::testOrientationSlots()
{
	init();

    HbMainWindow *mainWnd = hbInstance->allMainWindows().value(0);
	mainWnd->addView(mTestView);
	mainWnd->setOrientation(Qt::Horizontal);
	mainWnd->setOrientation(Qt::Vertical);
	
	cleanup();
}

// ---------------------------------------------------------------------------
// testModelReadySlot
// ---------------------------------------------------------------------------
//
void TestListView::testModelReadySlot()
{
    init();
    mTestView->mModelReady = false;
    connect( this, SIGNAL(testSignal()), mTestView, SLOT(modelReadySlot()) );
    emit testSignal();
    QVERIFY(mTestView->mModelReady);
    cleanup();
}

// ---------------------------------------------------------------------------
// testDeleteItemsSlot
// ---------------------------------------------------------------------------
//
void TestListView::testDeleteItemsSlot()
{
    init();
    connect( this, SIGNAL(testSignal()), mTestView, SLOT(deleteItemsSlot()) );
    ////////////
    // no model
    ////////////
    VideoSortFilterProxyModel *tmpModel = mTestView->mModel;
    mTestView->mModel = 0;
    emit testSignal();
    QVERIFY(VideoListSelectionDialog::mMultiSelectionLaunchCount == 0);
    QVERIFY(VideoListSelectionDialog::mMultiSelectionItemSelectionCount == 0);
    mTestView->mModel = tmpModel;

    cleanup();
    init();
    connect( this, SIGNAL(testSignal()), mTestView, SLOT(deleteItemsSlot()) );

    ////////////
    // no selection dialog
    ////////////
    emit testSignal();
    QVERIFY(VideoListSelectionDialog::mMultiSelectionLaunchCount == 1);
    QVERIFY(VideoListSelectionDialog::mMultiSelectionItemSelectionCount == 0);

    cleanup();
    init();
    connect( this, SIGNAL(testSignal()), mTestView, SLOT(deleteItemsSlot()) );

    ////////////
    // dialog loading fails
    ////////////
    VideoCollectionUiLoader::mFailDialogLoad = true;
    emit testSignal();
    QVERIFY(VideoListSelectionDialog::mMultiSelectionLaunchCount == 0);
    QVERIFY(VideoListSelectionDialog::mMultiSelectionItemSelectionCount == 0);
    VideoCollectionUiLoader::mFailDialogLoad = false;
    //////////
    // document loader deletes all objects in case of error, so we cannot cleanup all
    if(mWrapper)
    {
        mWrapper->decreaseReferenceCount();
        QCOMPARE(mWrapper->mReferenceCount, 0);
    }
    disconnect();
    ///////////////
    init();
    connect( this, SIGNAL(testSignal()), mTestView, SLOT(deleteItemsSlot()) );

    ////////////
    // selection dialog exists
    ////////////
    emit testSignal();
    QVERIFY(VideoListSelectionDialog::mMultiSelectionLaunchCount == 1);
    QVERIFY(VideoListSelectionDialog::mMultiSelectionItemSelectionCount == 0);
    emit testSignal();
    QVERIFY(VideoListSelectionDialog::mMultiSelectionLaunchCount == 2);
    QVERIFY(VideoListSelectionDialog::mMultiSelectionItemSelectionCount == 0);

    cleanup();
    init();
    connect( this, SIGNAL(testSignal()), mTestView, SLOT(deleteItemsSlot()) );

    ////////////
    // exec returns primary key (just for the coverity's sake)
    ////////////
    VideoListSelectionDialog:: mExecReturnPrimary = true;
    VideoListSelectionDialog::mSelectionCount = 5;
    emit testSignal();
    QVERIFY(VideoListSelectionDialog::mMultiSelectionLaunchCount == 1);
    QVERIFY(VideoListSelectionDialog::mMultiSelectionItemSelectionCount == 5);

    cleanup();
}

// ---------------------------------------------------------------------------
// testAboutToShowMainMenuSlot
// ---------------------------------------------------------------------------
//
void TestListView::testAboutToShowMainMenuSlot()
{
	// All ok.
	init();
	mWrapper->getDataModel()->setRowCount(1);
	mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->show();
	QVERIFY(visibleMenuActions() ==	6);
	cleanup();

	// View	is not initialized.
	init(false);
	mWrapper->getDataModel()->setRowCount(1);
	connect( this, SIGNAL(testSignal(int)),	mTestView, SLOT(aboutToShowMainMenuSlot()) );
	emit testSignal(0);
	cleanup();

	HbAction *action(0);

	// Collections is triggered	from toolbar.
	init();
	mWrapper->getDataModel()->setRowCount(1);
	action = mTestView->mToolbarActions[VideoListView::ETBActionCollections];
	QVERIFY(action != 0);
	action->setChecked(false);
	action->trigger();
	mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->show();
	int visible = visibleMenuActions();
	QCOMPARE(visible,	5);
	cleanup();

	// All videos is triggered from	toolbar.
	init();
	mWrapper->getDataModel()->setRowCount(1);
	action = mTestView->mToolbarActions[VideoListView::ETBActionAllVideos];
	QVERIFY(action != 0);
	action->setChecked(false);
	action->trigger();
	mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->show();
	visible = visibleMenuActions();
	QCOMPARE(visible,	6);
	cleanup();

	// Services	is triggered from toolbar.
	init();
	mWrapper->getDataModel()->setRowCount(1);
	action = mTestView->mToolbarActions[VideoListView::ETBActionServices];
	QVERIFY(action != 0);
	action->setChecked(false);
	action->trigger();
	mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->show();
	visible = visibleMenuActions();
	QCOMPARE(visible,	0);
	cleanup();

	// Add videos action is	visible.
	init();
	mTestView->toolBar()->clearActions();
	mTestView->toolBar()->addActions( mTestView->mToolbarCollectionActionGroup->actions() );

	mWrapper->getDataModel()->setRowCount(1);
	QVERIFY(action != 0);
	mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->show();
	visible = visibleMenuActions();
	QCOMPARE(visible,	1);
	cleanup();

	// Menu	action is null
	init();
	mWrapper->getDataModel()->setRowCount(1);
	action = mTestView->mMenuActions.take(VideoListView::EActionSortBy);
	delete action;
	action = NULL;
	mTestView->mMenuActions[VideoListView::EActionSortBy] =	action;
	mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->show();
	visible = visibleMenuActions();
	QCOMPARE(visible,	0);
	cleanup();

	// No menu actions.
	init();
	mWrapper->getDataModel()->setRowCount(1);
	QMap<VideoListView::TViewActionIds,	HbAction*> backupActions =
		QMap<VideoListView::TViewActionIds,	HbAction*>(mTestView->mMenuActions);
	mTestView->mMenuActions.clear();
	mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->show();
	mTestView->mMenuActions.unite(backupActions);
	cleanup();

	// Model has no	items.
	init();
	mWrapper->getDataModel()->setRowCount(0);
	mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->show();
	visible = visibleMenuActions();
	QCOMPARE(visible,	0);
	cleanup();

	// Toolbar action group	is null
	init();
	mWrapper->getDataModel()->setRowCount(1);
	QActionGroup* actionGroup =	mTestView->mToolbarViewsActionGroup;
	mTestView->mToolbarViewsActionGroup = NULL;
	mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->show();
	mTestView->mToolbarViewsActionGroup = actionGroup;
	cleanup();
}

// ---------------------------------------------------------------------------
// testOpenSortByMenuSlot
// ---------------------------------------------------------------------------
//
void TestListView::testOpenSortByMenuSlot()
{
    DummyHbMenu *dummyMenu = new DummyHbMenu;
    HbMenu *tmpMenu;

    // All ok.
    init();
    tmpMenu =  mTestView->mSortMenu;
    mTestView->mSortMenu = dummyMenu;
    connect( this, SIGNAL(testSignal(int)), mTestView, SLOT(openSortByMenuSlot()) );
    mWrapper->getDataModel()->setRowCount(1);
    mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->hide();
    emit testSignal(0);
    // sorting menu should be visible
    QVERIFY(visibleMenuActions() == 4);
    mTestView->mSortMenu = tmpMenu;
    cleanup();

    // View is not initialized.
    init(false);
    tmpMenu =  mTestView->mSortMenu;
    mTestView->mSortMenu = dummyMenu;
    connect( this, SIGNAL(testSignal(int)), mTestView, SLOT(openSortByMenuSlot()) );
    mWrapper->getDataModel()->setRowCount(1);
    mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->hide();
    emit testSignal(0);
    QCOMPARE(visibleMenuActions(),   0);
    mTestView->mSortMenu = tmpMenu;
    cleanup();

    // no items
    init();
    tmpMenu =  mTestView->mSortMenu;
    mTestView->mSortMenu = dummyMenu;
    connect( this, SIGNAL(testSignal(int)), mTestView, SLOT(openSortByMenuSlot()) );
    mWrapper->getDataModel()->setRowCount(0);
    mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->hide();
    emit testSignal(0);
    QCOMPARE(visibleMenuActions(),   0);
    mTestView->mSortMenu = tmpMenu;
    cleanup();

    delete dummyMenu;

}

// ---------------------------------------------------------------------------
// testHandleErrorSlot
// ---------------------------------------------------------------------------
//
void TestListView::testHandleStatusSlot()
{
	QVariant *variant =	new	QVariant();

	// Unknown error code.
	init();
	connect(this, SIGNAL(testStatusSignal(int, QVariant&)), mTestView, SLOT(handleAsyncStatusSlot(int, QVariant&)));
	emit testStatusSignal(0, *variant);
	QVERIFY(VideoCollectionViewUtils::mLastError ==	0);
	cleanup();

	// Multiple	deletion error.
	init();
	connect(this, SIGNAL(testStatusSignal(int, QVariant&)), mTestView, SLOT(handleAsyncStatusSlot(int, QVariant&)));
	emit testStatusSignal(VideoCollectionCommon::statusMultipleDeleteFail, *variant);
	QVERIFY(VideoCollectionViewUtils::mLastError ==	VideoCollectionCommon::statusMultipleDeleteFail);
	cleanup();

	// Deletion	error.
	init();
	connect(this, SIGNAL(testStatusSignal(int, QVariant&)), mTestView, SLOT(handleAsyncStatusSlot(int, QVariant&)));
	emit testStatusSignal(VideoCollectionCommon::statusSingleDeleteFail, *variant);
	QVERIFY(VideoCollectionViewUtils::mLastError ==	VideoCollectionCommon::statusSingleDeleteFail);
	cleanup();

	// status multidelete succeed
    init();
    connect(this, SIGNAL(testStatusSignal(int, QVariant&)), mTestView, SLOT(handleAsyncStatusSlot(int, QVariant&)));
    emit testStatusSignal(VideoCollectionCommon::statusMultipleDeleteSucceed, *variant);
    QVERIFY(VideoCollectionViewUtils::mLastError == VideoCollectionCommon::statusMultipleDeleteSucceed);
    cleanup();

	// No model.
	init(false);
	connect(this, SIGNAL(testStatusSignal(int, QVariant&)), mTestView, SLOT(handleAsyncStatusSlot(int, QVariant&)));
	emit testStatusSignal(1,	*variant);
	QVERIFY(VideoCollectionViewUtils::mLastError ==	1);
	cleanup();

	delete variant;
}

// ---------------------------------------------------------------------------
// testCollectionOpenedSlot
// ---------------------------------------------------------------------------
//
void TestListView::testCollectionOpenedSlot()
{
	HbAction* removeVideosAction;
	HbAction* allVideosAction;
	HbAction* collectionsAction;
	HbAction* servicesAction;
	HbAction* addVideosAction;
	HbAction* sortVideosAction;

	QString testString;

	// View	is not initialized.
	init(false);
	connect(this, SIGNAL(testCollectionOpenedSignal(bool, const QString&)),	mTestView, SLOT(collectionOpenedSlot(bool, const QString&)));
	emit testCollectionOpenedSignal(false, testString);
	cleanup();

	// No toolbar actions.
	init(true);
	// Clear actions.
	QMap<VideoListView::TViewActionIds,	HbAction*> backupActions =
		QMap<VideoListView::TViewActionIds,	HbAction*>(mTestView->mToolbarActions);
	mTestView->mToolbarActions.clear();
	connect(this, SIGNAL(testCollectionOpenedSignal(bool, const QString&)),	mTestView, SLOT(collectionOpenedSlot(bool, const QString&)));
	emit testCollectionOpenedSignal(true, testString);
	mTestView->mToolbarActions.unite(backupActions);
	cleanup();

	// One of the toolbar actions is null.
	init();
	removeVideosAction = mTestView->mToolbarActions[VideoListView::ETBActionRemoveVideos];
	mTestView->mToolbarActions[VideoListView::ETBActionRemoveVideos] = NULL;
	connect(this, SIGNAL(testCollectionOpenedSignal(bool, const QString&)),	mTestView, SLOT(collectionOpenedSlot(bool, const QString&)));
	emit testCollectionOpenedSignal(true, testString);
	// Verify checkable	and	visible	toolbar	actions.
	mTestView->mToolbarActions[VideoListView::ETBActionRemoveVideos] = removeVideosAction;
	allVideosAction	= mTestView->mToolbarActions[VideoListView::ETBActionAllVideos];
	collectionsAction =	mTestView->mToolbarActions[VideoListView::ETBActionCollections];
	servicesAction = mTestView->mToolbarActions[VideoListView::ETBActionServices];
	addVideosAction	= mTestView->mToolbarActions[VideoListView::ETBActionAddVideos];
	sortVideosAction = mTestView->mToolbarActions[VideoListView::ETBActionSortVideos];
	// Remove videos is	not	checked	because	it was used	as null	action.
	QCOMPARE( mTestView->mCollectionName, testString );
	QCOMPARE( mTestView->toolBar()->actions().count(), 3 );
	QVERIFY( allVideosAction !=	0 && allVideosAction->isCheckable());
	QVERIFY( collectionsAction != 0	&& collectionsAction->isCheckable());
	QVERIFY( servicesAction	!= 0 &&	servicesAction->isCheckable());
	QVERIFY( addVideosAction !=	0 && !addVideosAction->isCheckable() );
	QVERIFY( sortVideosAction != 0 && !sortVideosAction->isCheckable() );
	cleanup();


	testString = "Test text string";

	// Collection opened.
	init();
	connect(this, SIGNAL(testCollectionOpenedSignal(bool, const QString&)),	mTestView, SLOT(collectionOpenedSlot(bool, const QString&)));
	emit testCollectionOpenedSignal(true, testString);
	// Verify checkable	and	visible	toolbar	actions.
	allVideosAction	= mTestView->mToolbarActions[VideoListView::ETBActionAllVideos];
	collectionsAction =	mTestView->mToolbarActions[VideoListView::ETBActionCollections];
	servicesAction = mTestView->mToolbarActions[VideoListView::ETBActionServices];
	addVideosAction	= mTestView->mToolbarActions[VideoListView::ETBActionAddVideos];
	removeVideosAction = mTestView->mToolbarActions[VideoListView::ETBActionRemoveVideos];
	sortVideosAction = mTestView->mToolbarActions[VideoListView::ETBActionSortVideos];
	QCOMPARE(mTestView->mCollectionName, testString);
	QCOMPARE( mTestView->toolBar()->actions().count(), 3 );
	QVERIFY( allVideosAction !=	0 && allVideosAction->isCheckable());
	QVERIFY( collectionsAction != 0	&& collectionsAction->isCheckable());
	QVERIFY( servicesAction	!= 0 &&	servicesAction->isCheckable());
	QVERIFY( addVideosAction !=	0 && !addVideosAction->isCheckable() );
	QVERIFY( removeVideosAction	!= 0 &&	!removeVideosAction->isCheckable() );
	QVERIFY( sortVideosAction != 0 && !sortVideosAction->isCheckable() );
	cleanup();

	testString = "Test text string 2";

	// Collection not opened.
	init();
	connect(this, SIGNAL(testCollectionOpenedSignal(bool, const QString&)),	mTestView, SLOT(collectionOpenedSlot(bool, const QString&)));
	emit testCollectionOpenedSignal(false, testString);
	// Verify checkable	and	visible	toolbar	actions.
	allVideosAction	= mTestView->mToolbarActions[VideoListView::ETBActionAllVideos];
	collectionsAction =	mTestView->mToolbarActions[VideoListView::ETBActionCollections];
	servicesAction = mTestView->mToolbarActions[VideoListView::ETBActionServices];
	addVideosAction	= mTestView->mToolbarActions[VideoListView::ETBActionAddVideos];
	removeVideosAction = mTestView->mToolbarActions[VideoListView::ETBActionRemoveVideos];
	sortVideosAction = mTestView->mToolbarActions[VideoListView::ETBActionSortVideos];
	QCOMPARE(mTestView->mCollectionName, testString);
	QCOMPARE( mTestView->toolBar()->actions().count(), 3 );
	QVERIFY( allVideosAction !=	0 && allVideosAction->isCheckable());
	QVERIFY( collectionsAction != 0	&& collectionsAction->isCheckable());
	QVERIFY( servicesAction	!= 0 &&	servicesAction->isCheckable());
	QVERIFY( addVideosAction !=	0 && !addVideosAction->isCheckable() );
	QVERIFY( removeVideosAction	!= 0 &&	!removeVideosAction->isCheckable() );
	QVERIFY( sortVideosAction != 0 && !sortVideosAction->isCheckable() );
	cleanup();
}

// ---------------------------------------------------------------------------
// testUpdateSubLabel
// ---------------------------------------------------------------------------
//
void TestListView::testUpdateSubLabel()
{
	init(true);
	connect(this, SIGNAL(testLayoutChangedSignal()), mTestView, SLOT(layoutChangedSlot()));
	connect(this, SIGNAL(testCollectionOpenedSignal(bool, const QString&)), mTestView, SLOT(collectionOpenedSlot(bool, const QString&)));
	mWrapper->getDataModel()->setRowCount(1);

	mTestView->mVideoListWidget->mType = VideoListWidget::EAllVideos;
	
	emit testLayoutChangedSignal();

	HbGroupBox* label = mUiLoader->findWidget<HbGroupBox>(DOCML_NAME_VC_HEADINGBANNER);

	QString returnString = label->heading();
	QString expectedString = "1 videos";

	QCOMPARE(returnString, expectedString);

	mTestView->mVideoListWidget->mType = VideoListWidget::EUnknown;

	emit testLayoutChangedSignal();

	returnString = label->heading();
	expectedString = "1 videos";

	QCOMPARE(returnString, expectedString);

	mTestView->mVideoListWidget->mType = VideoListWidget::ECollections;

	emit testLayoutChangedSignal();

	returnString = label->heading();
	expectedString = "1 collections";

	QCOMPARE(returnString, expectedString);

	mTestView->mVideoListWidget->mType = VideoListWidget::EUnknown;

	emit testLayoutChangedSignal();

	returnString = label->heading();
	expectedString = "1 collections";

	QCOMPARE(returnString, expectedString);

	mTestView->mVideoListWidget->mType = VideoListWidget::EDefaultColItems;

	emit testLayoutChangedSignal();

	returnString = label->heading();
	expectedString = " (1)";

	QCOMPARE(returnString, expectedString);

	mTestView->mVideoListWidget->mType = VideoListWidget::EUnknown;
	expectedString = " (1)";

	emit testLayoutChangedSignal();

	returnString = label->heading();

	QCOMPARE(returnString, expectedString);

	mTestView->mVideoListWidget->mType = VideoListWidget::EUserColItems;

	emit testCollectionOpenedSignal(true, QString("NAME"));
	emit testLayoutChangedSignal();

	returnString = label->heading();
	expectedString = "NAME (1)";

	QCOMPARE(returnString, expectedString);
	
    mTestView->mVideoListWidget->mType = VideoListWidget::EAllVideos;
    VideoSortFilterProxyModel* model = mTestView->mModel;
    mTestView->mModel = 0;
    expectedString = "testtesttesttest";
    label->setHeading(expectedString);
    
    // should not crash.
    emit testLayoutChangedSignal();
    
    // make sure that the heading has not changed.
    QCOMPARE(label->heading(), expectedString);
}

// ---------------------------------------------------------------------------
// testShowHint
// ---------------------------------------------------------------------------
//
void TestListView::testShowHint()
{
    init(true);
    connect(this, SIGNAL(testLayoutChangedSignal()), mTestView, SLOT(layoutChangedSlot()));
    mWrapper->getDataModel()->setRowCount(1);
    
    mTestView->mModelReady = false;
    // tests that the showhint is not called, and currently only way of doing that
    // is to set hint widget visible and check that it is not hidden.
    mTestView->mVideoHintWidget->setVisible(true);
    
    emit testLayoutChangedSignal();

    QVERIFY(mTestView->mVideoHintWidget->isVisible());
    
    VideoSortFilterProxyModel* model = mTestView->mModel;
    mTestView->mModel = 0;
    mTestView->mModelReady = true;
    
    emit testLayoutChangedSignal();

    QVERIFY(mTestView->mVideoHintWidget->isVisible() == false);
    
    mTestView->mModel = model;
    mWrapper->getDataModel()->setRowCount(0);
    mTestView->mVideoHintWidget->setVisible(true);
    VideoHintWidget* hint = mTestView->mVideoHintWidget;
    mTestView->mVideoHintWidget = 0;
    
    // should not crash. No other verification possible.
    emit testLayoutChangedSignal();
    
    mTestView->mVideoHintWidget = hint;
    mTestView->mVideoHintWidget->setVisible(false);
    
    emit testLayoutChangedSignal();
    
    QVERIFY(mTestView->mVideoHintWidget->isVisible());
    
    mWrapper->getDataModel()->setRowCount(1);
    mTestView->mVideoHintWidget->setVisible(true);
    
    emit testLayoutChangedSignal();

    QVERIFY(mTestView->mVideoHintWidget->isVisible() == false);
}

// End of file