videocollection/videocollectionview/tsrc/testlistmenu/src/testlistmenu.cpp
changeset 65 a9d57bd8d7b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/videocollectionview/tsrc/testlistmenu/src/testlistmenu.cpp	Mon Oct 04 00:19:07 2010 +0300
@@ -0,0 +1,663 @@
+/**
+* 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
+*
+*/
+
+// Version : %version: 1 %
+
+
+#include <qdebug.h>
+#include <xqserviceutil.h>
+#include <QtTest/QtTest>
+#include "hbapplication.h"
+#include "hbinstance.h"
+#include "hbmenu.h"
+#include "hbmenudata.h"
+#include "hbtoolbar.h"
+#include "hbaction.h"
+#include "hbstackedwidget.h"
+#include "hbgroupbox.h"
+#include "hbdocumentloader.h"
+#include "hbview.h"
+#include "hblistview.h"
+#include <videocollectioncommon.h>
+#include <qhash.h>
+#include <qmap.h>
+
+#include "testlistmenu.h"
+
+#define private public
+#include "videolistmenu.h"
+#include "videolistwidget.h"
+#include "videolistview.h"
+#include "videoproxymodelgeneric.h"
+#undef private
+
+#include "videolistwidgetdata.h"
+#include "videocollectionuiloaderdata.h"
+#include "videoproxymodeldata.h"
+#include "videolistselectiondialog.h"
+#include "videolistselectiondialogdata.h"
+#include "videocollectionviewutils.h"
+#include "videocollectionviewutilsdata.h"
+#include "videocollectioncommon.h"
+#include "videocollectionuiloader.h"
+#include "videolistdatamodel.h"
+#include "videolistdatamodeldata.h"
+#include "videocollectiontrace.h"
+
+// ---------------------------------------------------------------------------
+// main
+// ---------------------------------------------------------------------------
+//
+int	main(int argc, char	*argv[])
+{
+	HbApplication app(argc,	argv);
+	HbMainWindow window;
+	hbInstance->mWindowses.append(&window);
+
+	TestListMenu tv;
+
+    int res;
+    if(argc > 1)
+    {   
+        res = QTest::qExec(&tv, argc, argv);
+    }
+    else
+    {
+    	char *pass[3];
+    	pass[0]	= argv[0];
+    	pass[1]	= "-o";
+    	pass[2]	= "c:\\data\\testlistmenu.txt";
+        res = QTest::qExec(&tv, 3, pass);
+    }
+
+	return res;
+}
+
+// ---------------------------------------------------------------------------
+// init
+// ---------------------------------------------------------------------------
+//
+void TestListMenu::init()
+{
+    mUiLoader = new VideoCollectionUiLoader();
+    mUiLoader->reset();
+
+    bool ok(false);
+    mUiLoader->load(DOCML_VIDEOCOLLECTIONVIEW_FILE, &ok);
+    if (!ok)
+    {
+        return;
+    }
+
+    mListView = mUiLoader->findWidget<VideoListView>( DOCML_NAME_VIEW );
+    QVERIFY(mListView);
+    
+    mDataModel = new VideoListDataModel();
+    
+    mModel = new VideoProxyModelGeneric();
+    mModel->setSourceModel(mDataModel);
+    
+    mListWidget = new VideoListWidget(mUiLoader, 0);
+    mListWidget->initialize(*mModel, false, VideoCollectionCommon::ELevelVideos);
+    
+    mListView->mCurrentList = mListWidget;
+
+    mTestObject = new VideoListMenu(mUiLoader, mListView);
+}
+
+// ---------------------------------------------------------------------------
+// cleanup
+// ---------------------------------------------------------------------------
+//
+void TestListMenu::cleanup()
+{
+    delete mUiLoader;
+    mUiLoader = 0;
+    
+    delete mListWidget;
+    mListWidget = 0;
+    
+    delete mModel;
+    mModel = 0;
+    
+    mListView = 0;
+
+    disconnect();
+    
+    VideoListWidgetData::reset();
+    VideoProxyModelData::reset();
+    VideoCollectionViewUtilsData::reset();
+    HbDocumentLoader::cleanup();
+}
+
+// ---------------------------------------------------------------------------
+// testInitializeMenu
+// ---------------------------------------------------------------------------
+//
+void TestListMenu::testInitializeMenu()
+{
+    // Good case
+    init();
+    QVERIFY(mTestObject->initializeMenu() == 0);
+    QVERIFY(VideoCollectionUiLoaderData::mAddDataCallCount == 1);
+    cleanup();
+
+    // Test null ui loader.
+    mTestObject = new VideoListMenu(0, 0);
+    QVERIFY(mTestObject->initializeMenu() == -1);
+    QVERIFY(VideoCollectionUiLoaderData::mAddDataCallCount == 0);
+    cleanup();
+    
+    // Is service
+    init();
+    VideoCollectionViewUtilsData::mIsServiceValue = true;
+    VideoCollectionViewUtils::instance().setIsService();
+    QVERIFY(mTestObject->initializeMenu() == 0);
+    QVERIFY(VideoCollectionUiLoaderData::mAddDataCallCount == 1);
+    // Call again, now mVideoServices is set already.
+    QVERIFY(mTestObject->initializeMenu() == 0);
+    QVERIFY(VideoCollectionUiLoaderData::mAddDataCallCount == 2);
+    cleanup();
+}
+
+// ---------------------------------------------------------------------------
+// testInitializeMenu
+// ---------------------------------------------------------------------------
+//
+void TestListMenu::testStartSorting()
+{
+    HbAction *action(0);
+    HbMenu *sortMenu(0);
+    HbMenu *optionsMenu(0);
+    HbAction *sortMenuAction = new HbAction("test");
+    
+    init();
+    
+    // No current list.
+    connect(this, SIGNAL(testSignal()), mTestObject, SLOT(startSorting()));
+    mListView->mCurrentList = 0;
+    emit testSignal();
+    QCOMPARE(VideoProxyModelData::mDoSortingCallCount, 0);
+    mListView->mCurrentList = mListWidget;
+    
+    // Action is not sort menu
+    action = mUiLoader->findObject<HbAction>(DOCML_NAME_DELETE_MULTIPLE);
+    optionsMenu = mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU);
+    sortMenu = mUiLoader->findWidget<HbMenu>(DOCML_NAME_SORT_MENU);
+    QVERIFY(action != 0);
+    optionsMenu->setActiveAction(action);
+    sortMenuAction->setMenu(sortMenu);
+    HbMenuData::mMenuAction = sortMenuAction;
+    emit testSignal();
+    QCOMPARE(VideoProxyModelData::mDoSortingCallCount, 0);
+
+    // Sort menu has no active action.
+    action = mUiLoader->findObject<HbAction>(DOCML_NAME_DELETE_MULTIPLE);
+    optionsMenu = mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU);
+    sortMenu = mUiLoader->findWidget<HbMenu>(DOCML_NAME_SORT_MENU);
+    QVERIFY(action != 0);
+    optionsMenu->setActiveAction(action);
+    sortMenuAction->setMenu(sortMenu);
+    HbMenuData::mMenuAction = action;
+    sortMenu->setActiveAction(0);
+    emit testSignal();
+    QCOMPARE(VideoProxyModelData::mDoSortingCallCount, 0);
+
+    // Good cases
+    
+    cleanup();
+    
+    TMPXItemId invalidId = TMPXItemId::InvalidId();
+    
+    init();
+    mListView->activateView(invalidId);
+    sortMenu = mUiLoader->findWidget<HbMenu>(DOCML_NAME_SORT_MENU);
+    sortMenuAction->setMenu(sortMenu);
+    HbMenuData::mMenuAction = sortMenuAction;
+    VideoProxyModelGeneric* model = mListView->mCurrentList->getModel();
+    QVERIFY(action != 0);
+    mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->setActiveAction(sortMenuAction);
+    HbAction *sortAction = mUiLoader->findObject<HbAction>(DOCML_NAME_SORT_BY_NAME);
+    QVERIFY(sortAction != 0);
+    sortMenu->setActiveAction(sortAction);
+    model->setSortRole(1);
+    connect(this, SIGNAL(testObjectReadySignal(QObject*, const QString)), mTestObject, SLOT(objectReadySlot(QObject*, const QString)));
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_DATE), DOCML_NAME_SORT_BY_DATE);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_NAME), DOCML_NAME_SORT_BY_NAME);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_NUMBER_OF_ITEMS), DOCML_NAME_SORT_BY_NUMBER_OF_ITEMS);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_SIZE), DOCML_NAME_SORT_BY_SIZE);
+    disconnect(this, SIGNAL(testObjectReadySignal(QObject*, const QString)), mTestObject, SLOT(objectReadySlot(QObject*, const QString)));
+
+    connect(this, SIGNAL(testSignal()), mTestObject, SLOT(startSorting()));
+    
+    // No model.
+    mListView->mCurrentList->mModel = 0;
+    emit testSignal();
+    QCOMPARE(VideoProxyModelData::mDoSortingCallCount, 0);
+    
+    // First ok case. 
+    mListView->mCurrentList->mModel = mModel;
+    emit testSignal();
+    
+    // since current list is videolist, sorting count is 2 because both all videos and collection content are sorted
+    QCOMPARE(VideoProxyModelData::mDoSortingCallCount, 2);
+    QCOMPARE(VideoProxyModelData::mSortRole, (int)VideoCollectionCommon::KeyTitle);
+    QCOMPARE(VideoProxyModelData::mSortOrder, Qt::AscendingOrder);
+    QVERIFY(VideoProxyModelData::mSortAsync);
+
+    VideoProxyModelData::mDoSortingCallCount = 0;
+    // emit test signal again, with same parameters. Sorting should be switched to
+    // descending order.
+    emit testSignal();
+    // since current list is videolist, sorting count is 2 because both all videos and collection content are sorted
+    QCOMPARE(VideoProxyModelData::mDoSortingCallCount, 2);
+    QCOMPARE(VideoProxyModelData::mSortRole, (int)VideoCollectionCommon::KeyTitle);
+    QCOMPARE(VideoProxyModelData::mSortOrder, Qt::DescendingOrder);
+    QVERIFY(VideoProxyModelData::mSortAsync);
+
+    VideoProxyModelData::mDoSortingCallCount = 0;
+    // on third emit, sorting should be switched back to ascending
+    emit testSignal();
+    // since current list is videolist, sorting count is 2 because both all videos and collection content are sorted
+    QCOMPARE(VideoProxyModelData::mDoSortingCallCount, 2);
+    QCOMPARE(VideoProxyModelData::mSortRole, (int)VideoCollectionCommon::KeyTitle);
+    QCOMPARE(VideoProxyModelData::mSortOrder, Qt::AscendingOrder);
+    QVERIFY(VideoProxyModelData::mSortAsync);
+
+    // test that after changing the sort role, the order is also switched to ascending.
+    model->doSorting(model->sortRole(), Qt::DescendingOrder);
+    sortAction = mUiLoader->findObject<HbAction>(DOCML_NAME_SORT_BY_DATE);
+    QVERIFY(sortAction != 0);
+    sortMenu->setActiveAction(sortAction);
+    VideoProxyModelData::mDoSortingCallCount = 0;
+    emit testSignal();
+    // since current list is videolist, sorting count is 2 because both all videos and collection content are sorted
+    QCOMPARE(VideoProxyModelData::mDoSortingCallCount, 2);
+    QCOMPARE(VideoProxyModelData::mSortRole, (int)VideoCollectionCommon::KeyDateTime);
+    QCOMPARE(VideoProxyModelData::mSortOrder, Qt::AscendingOrder);
+    QVERIFY(VideoProxyModelData::mSortAsync);
+    cleanup();
+    
+    // start sorting slot:
+    // -is service
+    init();
+    connect(this, SIGNAL(testSignal()), mTestObject, SLOT(startSorting()));
+    sortMenu = mUiLoader->findWidget<HbMenu>(DOCML_NAME_SORT_MENU);
+    sortMenuAction->setMenu(sortMenu);
+    HbMenuData::mMenuAction = sortMenuAction;
+    mUiLoader->findWidget<HbMenu>(DOCML_NAME_OPTIONS_MENU)->setActiveAction(sortMenuAction);
+    sortAction = mUiLoader->findObject<HbAction>(DOCML_NAME_SORT_BY_NAME);
+    QVERIFY(sortAction != 0);
+    sortMenu->setActiveAction(sortAction);
+    mTestObject->mVideoServices = VideoServices::instance();
+    int sortRole = VideoCollectionViewUtilsData::mVideoSortRole;
+    emit testSignal();
+    QCOMPARE(sortRole, VideoCollectionViewUtilsData::mVideoSortRole);
+    cleanup();    
+}
+
+/**
+ * Tests testDeleteItemsSlot
+ */
+void TestListMenu::testDeleteItemsSlot()
+{
+    init();
+    connect( this, SIGNAL(testSignal()), mTestObject, SLOT(deleteItemsSlot()) );
+    
+    // dialog loading fails
+    VideoCollectionUiLoaderData::mFailDialogLoad = true;
+    emit testSignal();
+    QCOMPARE(VideoListSelectionDialogData::mMultiSelectionLaunchCount, 0);
+
+    // selection dialog exists
+    VideoCollectionUiLoaderData::mFailDialogLoad = false;
+    VideoProxyModelData::mOpenedItemId = TMPXItemId(2, 3);
+    emit testSignal();
+    QCOMPARE(VideoListSelectionDialogData::mMultiSelectionLaunchCount, 1);
+    QCOMPARE(VideoListSelectionDialogData::mSelectionType, (int)VideoListSelectionDialog::EDeleteVideos);
+    QVERIFY(VideoListSelectionDialogData::mSettedMpxId == VideoProxyModelData::mOpenedItemId);
+    
+    // test second successful activation.
+    VideoProxyModelData::mOpenedItemId = TMPXItemId(3, 2);
+    emit testSignal();
+    QCOMPARE(VideoListSelectionDialogData::mMultiSelectionLaunchCount, 2);
+    QCOMPARE(VideoListSelectionDialogData::mSelectionType, (int)VideoListSelectionDialog::EDeleteVideos);
+    QVERIFY(VideoListSelectionDialogData::mSettedMpxId == VideoProxyModelData::mOpenedItemId);
+
+    cleanup();
+}
+
+// ---------------------------------------------------------------------------
+// testCreateCollectionSlot
+// ---------------------------------------------------------------------------
+//
+void TestListMenu::testCreateCollectionSlot()
+{
+    init();
+    QVERIFY(connect(this, SIGNAL(testSignal()), mTestObject, SLOT(createCollectionSlot())));
+  
+    // dialog finding fails
+    VideoCollectionUiLoaderData::mFailDialogLoad = true;
+    emit testSignal();
+    QCOMPARE(VideoListSelectionDialogData::mMultiSelectionLaunchCount, 0);
+    QCOMPARE(VideoListSelectionDialogData::mSelectionType, -1);
+    // dialog finding succeeds
+    VideoCollectionUiLoaderData::mFailDialogLoad = false;
+    emit testSignal();    
+    QVERIFY(VideoListSelectionDialogData::mSettedMpxId == TMPXItemId::InvalidId());
+    QCOMPARE(VideoListSelectionDialogData::mSelectionType, (int)VideoListSelectionDialog::ECreateCollection);
+    QCOMPARE(VideoListSelectionDialogData::mMultiSelectionLaunchCount, 1);
+ 
+    disconnect(this, SIGNAL(testSignal()), mTestObject, SLOT(createCollectionSlot()));
+    cleanup();
+}
+
+// ---------------------------------------------------------------------------
+// testAddVideosToCollectionSlot
+// ---------------------------------------------------------------------------
+//
+void TestListMenu::testAddVideosToCollectionSlot()
+{
+    init();
+    QVERIFY(connect(this, SIGNAL(testSignal()), mTestObject, SLOT(addVideosToCollectionSlot())));
+
+    // No current list.
+    mListView->mCurrentList = 0;
+    emit testSignal();
+    QCOMPARE(VideoListSelectionDialogData::mMultiSelectionLaunchCount, 0);
+    mListView->mCurrentList = mListWidget;
+    
+    // Current list has no model.
+    mListView->mCurrentList->mModel = 0;
+    emit testSignal();
+    QCOMPARE(VideoListSelectionDialogData::mMultiSelectionLaunchCount, 0);
+    mListView->mCurrentList->mModel = mModel;
+    
+    // dialog finding fails
+    VideoCollectionUiLoaderData::mFailDialogLoad = true;
+    emit testSignal();
+    QCOMPARE(VideoListSelectionDialogData::mMultiSelectionLaunchCount, 0);
+    QCOMPARE(VideoListSelectionDialogData::mSelectionType, -1);
+
+    // dialog finding succeeds
+    VideoCollectionUiLoaderData::mFailDialogLoad = false;
+    emit testSignal();    
+    QVERIFY(VideoListSelectionDialogData::mSettedMpxId == TMPXItemId::InvalidId());
+    QCOMPARE(VideoListSelectionDialogData::mSelectionType, (int)VideoListSelectionDialog::EAddToCollection);
+    QCOMPARE(VideoListSelectionDialogData::mMultiSelectionLaunchCount, 1);
+    
+    cleanup();
+}
+
+// ---------------------------------------------------------------------------
+// testAboutToShowMainMenuSlot
+// ---------------------------------------------------------------------------
+//
+void TestListMenu::testAboutToShowMainMenuSlot()
+{
+    init();
+    
+    VideoServices *videoServices = VideoServices::instance();
+
+    // Setup menu objects.
+    connect(this, SIGNAL(testObjectReadySignal(QObject*, const QString)), mTestObject, SLOT(objectReadySlot(QObject*, const QString)));
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_OPTIONS_MENU), DOCML_NAME_OPTIONS_MENU);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_DATE), DOCML_NAME_SORT_BY_DATE);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_NAME), DOCML_NAME_SORT_BY_NAME);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_NUMBER_OF_ITEMS), DOCML_NAME_SORT_BY_NUMBER_OF_ITEMS);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_ADD_TO_COLLECTION), DOCML_NAME_ADD_TO_COLLECTION);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_CREATE_COLLECTION), DOCML_NAME_CREATE_COLLECTION);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_DELETE_MULTIPLE), DOCML_NAME_DELETE_MULTIPLE);
+    disconnect(this, SIGNAL(testObjectReadySignal(QObject*, const QString)), mTestObject, SLOT(objectReadySlot(QObject*, const QString)));
+    
+    // No current list.
+    setVisibilityForMenuActions(false);
+    VideoListDataModelData::setRowCount(*mDataModel, 5);
+    QVERIFY(connect(this, SIGNAL(testSignal()), mTestObject, SLOT(aboutToShowMainMenuSlot())));
+    mListView->mCurrentList = 0;
+    emit testSignal();
+    int visible = visibleMenuActions();
+    QCOMPARE(visible, 0);
+    
+    // No model, current list is category
+    mListView->mCurrentList = mListWidget;
+    mListWidget->mCurrentLevel = VideoCollectionCommon::ELevelCategory;
+    mListWidget->mModel = 0;
+    setVisibilityForMenuActions(true);
+    VideoListDataModelData::setRowCount(*mDataModel, 0);
+    emit testSignal();
+    visible = visibleMenuActions();
+    QCOMPARE(visible, 1);
+
+    // No model, current list is not category
+    mListWidget->mCurrentLevel = VideoCollectionCommon::ELevelVideos;
+    mListWidget->mModel = 0;
+    setVisibilityForMenuActions(true);
+    VideoListDataModelData::setRowCount(*mDataModel, 0);
+    emit testSignal();
+    visible = visibleMenuActions();
+    QCOMPARE(visible, 0);
+    
+    // Empty model.
+    mListView->mCurrentList->mModel = mModel;
+    setVisibilityForMenuActions(true);
+    VideoListDataModelData::setRowCount(*mDataModel, 0);
+    emit testSignal();
+    visible = visibleMenuActions();
+    QCOMPARE(visible, 0);
+    
+    VideoProxyModelData::mSortRole = VideoCollectionCommon::KeyDateTime;
+    VideoProxyModelData::mSortOrder = Qt::AscendingOrder; 
+
+    // Level videos
+    VideoListDataModelData::setRowCount(*mDataModel, 10);
+    mListWidget->mCurrentLevel = VideoCollectionCommon::ELevelVideos;
+    mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->setChecked(false);
+    mTestObject->mVideoServices = 0;
+    emit testSignal();
+    visible = visibleMenuActions();
+    QCOMPARE(visible, 5);
+    QVERIFY(mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->isChecked());
+
+    // Level videos and is service.
+    VideoListDataModelData::setRowCount(*mDataModel, 10);
+    mListWidget->mCurrentLevel = VideoCollectionCommon::ELevelVideos;
+    mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->setChecked(false);
+    mTestObject->mVideoServices = videoServices;
+    emit testSignal();
+    visible = visibleMenuActions();
+    QCOMPARE(visible, 3);
+    QVERIFY(mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->isChecked());
+
+    // Level category
+    VideoListDataModelData::setRowCount(*mDataModel, 10);
+    mListWidget->mCurrentLevel = VideoCollectionCommon::ELevelCategory;
+    mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->setChecked(false);
+    mTestObject->mVideoServices = 0;
+    emit testSignal();
+    visible = visibleMenuActions();
+    QCOMPARE(visible, 3);
+    QVERIFY(mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->isChecked());
+
+    // Level ELevelDefaultColl
+    VideoListDataModelData::setRowCount(*mDataModel, 10);
+    mListWidget->mCurrentLevel = VideoCollectionCommon::ELevelDefaultColl;
+    mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->setChecked(false);
+    mTestObject->mVideoServices = 0;
+    emit testSignal();
+    visible = visibleMenuActions();
+    QCOMPARE(visible, 4);
+    QVERIFY(mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->isChecked());
+
+    // Level ELevelDefaultColl and is service
+    VideoListDataModelData::setRowCount(*mDataModel, 10);
+    mListWidget->mCurrentLevel = VideoCollectionCommon::ELevelDefaultColl;
+    mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->setChecked(false);
+    mTestObject->mVideoServices = videoServices;
+    emit testSignal();
+    visible = visibleMenuActions();
+    QCOMPARE(visible, 3);
+    QVERIFY(mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->isChecked());    
+
+    VideoProxyModelData::mSortRole = VideoCollectionCommon::KeyDateTime;
+    VideoProxyModelData::mSortOrder = Qt::AscendingOrder; 
+    // Level ELevelAlbum
+    VideoListDataModelData::setRowCount(*mDataModel, 10);
+    mListWidget->mCurrentLevel = VideoCollectionCommon::ELevelAlbum;
+    mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->setChecked(false);
+    mTestObject->mVideoServices = 0;
+    emit testSignal();
+    visible = visibleMenuActions();
+    QCOMPARE(visible, 4);
+    QVERIFY(mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->isChecked());
+    
+    cleanup();
+}
+
+// ---------------------------------------------------------------------------
+// testPrepareBrowseServiceMenu
+// ---------------------------------------------------------------------------
+//
+void TestListMenu::testPrepareBrowseServiceMenu()
+{
+    init();
+    
+    VideoServices *videoServices = VideoServices::instance();
+    videoServices->mCurrentService = VideoServices::EBrowse;
+    mTestObject->mVideoServices = videoServices;
+
+    // Setup menu objects.
+    connect(this, SIGNAL(testObjectReadySignal(QObject*, const QString)), 
+            mTestObject, SLOT(objectReadySlot(QObject*, const QString)));
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_OPTIONS_MENU), DOCML_NAME_OPTIONS_MENU);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_DATE), DOCML_NAME_SORT_BY_DATE);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_NAME), DOCML_NAME_SORT_BY_NAME);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_SORT_BY_NUMBER_OF_ITEMS), DOCML_NAME_SORT_BY_NUMBER_OF_ITEMS);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_ADD_TO_COLLECTION), DOCML_NAME_ADD_TO_COLLECTION);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_CREATE_COLLECTION), DOCML_NAME_CREATE_COLLECTION);
+    emit testObjectReadySignal(mUiLoader->findObject<QObject>(DOCML_NAME_DELETE_MULTIPLE), DOCML_NAME_DELETE_MULTIPLE);
+    
+    disconnect(this, SIGNAL(testObjectReadySignal(QObject*, const QString)), mTestObject, SLOT(objectReadySlot(QObject*, const QString)));
+    
+    // No current list.
+    setVisibilityForMenuActions(false);
+    VideoListDataModelData::setRowCount(*mDataModel, 5);
+    QVERIFY(connect(this, SIGNAL(testSignal()), mTestObject, SLOT(aboutToShowMainMenuSlot())));
+    mListView->mCurrentList = 0;
+    emit testSignal();
+    int visible = visibleMenuActions();
+    QCOMPARE(visible, 0);
+    
+    // No model
+    mListView->mCurrentList = mListWidget;
+    mListWidget->mModel = 0;
+    setVisibilityForMenuActions(true);
+    VideoListDataModelData::setRowCount(*mDataModel, 0);
+    emit testSignal();
+    visible = visibleMenuActions();
+    QCOMPARE(visible, 0);
+
+    // Empty model.
+    mListView->mCurrentList->mModel = mModel;
+    setVisibilityForMenuActions(true);
+    VideoListDataModelData::setRowCount(*mDataModel, 0);
+    emit testSignal();
+    visible = visibleMenuActions();
+    QCOMPARE(visible, 0);
+    
+    VideoProxyModelData::mSortRole = VideoCollectionCommon::KeyDateTime;
+    VideoProxyModelData::mSortOrder = Qt::AscendingOrder; 
+    
+    // Good case.
+    mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->setChecked(false);
+    setVisibilityForMenuActions(true);
+    VideoListDataModelData::setRowCount(*mDataModel, 10);
+    emit testSignal();
+    visible = visibleMenuActions();
+    QCOMPARE(visible, 4);
+    QVERIFY(mTestObject->mSortingRoles.key(VideoCollectionCommon::KeyDateTime)->isChecked());
+    
+    cleanup();
+}
+
+// ---------------------------------------------------------------------------
+// testObjectReadySlot
+// ---------------------------------------------------------------------------
+//
+void TestListMenu::testObjectReadySlot()
+{
+    init();
+    
+    // Ok cases have been tested earlier.
+    connect(this, SIGNAL(testObjectReadySignal(QObject*, const QString)), 
+            mTestObject, SLOT(objectReadySlot(QObject*, const QString)));
+    
+    // Null objects, qobject cast fails and sorting roles array should be empty.
+    emit testObjectReadySignal(0, "notknown");
+    emit testObjectReadySignal(0, DOCML_NAME_SORT_BY_DATE);
+    emit testObjectReadySignal(0, DOCML_NAME_SORT_BY_NAME);
+    emit testObjectReadySignal(0, DOCML_NAME_SORT_BY_NUMBER_OF_ITEMS);
+    emit testObjectReadySignal(0, DOCML_NAME_SORT_BY_SIZE);
+    emit testObjectReadySignal(0, DOCML_NAME_ADD_TO_COLLECTION);
+    emit testObjectReadySignal(0, DOCML_NAME_CREATE_COLLECTION);
+    emit testObjectReadySignal(0, DOCML_NAME_DELETE_MULTIPLE);
+    QCOMPARE(mTestObject->mSortingRoles.count(), 0);
+    
+    disconnect(this, SIGNAL(testObjectReadySignal(QObject*, const QString)), mTestObject, SLOT(objectReadySlot(QObject*, const QString)));
+    
+    cleanup();
+}
+
+// ---------------------------------------------------------------------------
+// visibleMenuActions
+// ---------------------------------------------------------------------------
+//
+int TestListMenu::visibleMenuActions()
+{
+    int visibleActions(0);
+    VideoCollectionUiLoader::ActionIds key;
+    HbAction *action(0);
+    foreach (key, VideoCollectionUiLoaderData::mMenuActions.keys())
+    {
+        action = dynamic_cast<HbAction*>(VideoCollectionUiLoaderData::mMenuActions[key]);
+        if (action && action->isVisible())
+        {
+            visibleActions++;
+        }
+    }
+    return visibleActions;
+}
+
+// ---------------------------------------------------------------------------
+// setVisibilityForMenuActions
+// ---------------------------------------------------------------------------
+//
+void TestListMenu::setVisibilityForMenuActions(bool visible)
+{
+    VideoCollectionUiLoader::ActionIds key;
+    HbAction *action(0);
+    foreach (key, VideoCollectionUiLoaderData::mMenuActions.keys())
+    {
+        action = dynamic_cast<HbAction*>(VideoCollectionUiLoaderData::mMenuActions[key]);
+        if (action)
+        {
+            action->setVisible(visible);
+        }
+    }
+}
+
+// End of file.