logsui/logsapp/tsrc/ut_logsapp/src/ut_logsbaseview.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 14 May 2010 15:52:41 +0300
changeset 2 7119b73b84d6
parent 0 4a5361db8937
child 6 41c0a814d878
permissions -rw-r--r--
Revision: 201017 Kit: 201019

/*
* 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:
*
*/

//USER
#include "logsbaseview.h"
#include "ut_logsbaseview.h"
#include "logscomponentrepository.h"
#include "qthighway_stub_helper.h"
#include "logscall.h"
#include "logsmessage.h"
#include "logscontact.h"
#include "hbstubs_helper.h"
#include "logsrecentcallsview.h"
#include "logsdetailsmodel.h"

//SYSTEM
#include <QtTest/QtTest>
#include <hbmainwindow.h>
#include <hbaction.h>
#include <hbinstance.h>
#include <hbmenu.h>
#include <dialpad.h>
#include <hblineedit.h>
#include <hblistviewitem.h>
#include <hblistview.h>
#include <QStringListModel>

void UT_LogsBaseView::initTestCase()
{
    mMainWindow = new HbMainWindow();
    mViewManager = new LogsViewManagerStub(*mMainWindow);
}

void UT_LogsBaseView::cleanupTestCase()
{
    delete mMainWindow;
    delete mViewManager;
}

void UT_LogsBaseView::init()
{
    mRepository = new LogsComponentRepository( *mViewManager );
    mBaseView = new LogsBaseView( LogsRecentViewId, *mRepository, *mViewManager );
    HbStubHelper::reset();
}

void UT_LogsBaseView::cleanup()
{
    delete mBaseView;
    mBaseView = 0;
    delete mRepository;
    mRepository = 0;
}

void UT_LogsBaseView::testConstructor()
{
    QVERIFY( mBaseView );
    QVERIFY( mBaseView->mSoftKeyBackAction );
    QVERIFY( !mBaseView->mShowFilterMenu );
    QVERIFY( !mBaseView->mInitialized );
    QVERIFY( mBaseView->mActionMap.isEmpty() );
    QVERIFY( mBaseView->viewId() == LogsRecentViewId );
    QVERIFY( mBaseView->mDialpad );
    QVERIFY( !mBaseView->mCall );
    QVERIFY( !mBaseView->mMessage );
    QVERIFY( !mBaseView->mContact );
    QVERIFY( !mBaseView->mCallTypeMapper );
}

void UT_LogsBaseView::testActivated()
{
    mBaseView->activated(false, QVariant());
    QVERIFY( !mBaseView->mDialpad->isVisible() );
    QVERIFY( mBaseView->mInitialized );
    QVERIFY( !mBaseView->mShowFilterMenu );
    QVERIFY( mBaseView->mActionMap.count() == 4 );

    mBaseView->activated(true, QVariant());
    QVERIFY( mBaseView->mDialpad->isOpen() );
}

void UT_LogsBaseView::testDeactivated()
{
    mBaseView->deactivated(); // NOP
}

void UT_LogsBaseView::testResetView()
{
    // Opened dialpad is closed and text in it is cleared
    mBaseView->mDialpad->mIsOpen = true;
    mBaseView->mDialpad->mLineEdit->setText("testing");
    mBaseView->resetView();
    QVERIFY( !mBaseView->mDialpad->mIsOpen );
    QVERIFY( mBaseView->mDialpad->mLineEdit->text() == "" );
    
    // Text is cleared even if dialpad would be closed
    mBaseView->mDialpad->mLineEdit->setText("testingagain");
    mBaseView->resetView();
    QVERIFY( !mBaseView->mDialpad->mIsOpen );
    QVERIFY( mBaseView->mDialpad->mLineEdit->text() == "" );
}

void UT_LogsBaseView::testShowFilterMenu()
{
    HbStubHelper::reset();
    //no context menu
    QVERIFY( !mBaseView->mShowFilterMenu );
    mBaseView->showFilterMenu();
    QVERIFY( !HbStubHelper::menuShown() );
    
    //contect menu exists
    mBaseView->mShowFilterMenu = new HbMenu();
    QVERIFY( mBaseView->mShowFilterMenu );
    mBaseView->showFilterMenu();
    QVERIFY( HbStubHelper::menuShown() );
    delete mBaseView->mShowFilterMenu;
    mBaseView->mShowFilterMenu = 0;
}

void  UT_LogsBaseView::testOpenDialpad()
{
    QVERIFY( !mBaseView->mDialpad->isOpen() );
    mBaseView->openDialpad();
    QVERIFY( mBaseView->mDialpad->isOpen() );    
}

void  UT_LogsBaseView::testSetDialpadPostion()
{
    QPointF pos = mBaseView->mDialpad->pos();
    HbMainWindow& window = mBaseView->mViewManager.mainWindow();
    
    window.setOrientation( Qt::Horizontal );
    mBaseView->setDialpadPosition();
    QVERIFY( pos != mBaseView->mDialpad->pos() );
    pos = mBaseView->mDialpad->pos();
    
    window.setOrientation( Qt::Vertical );
    mBaseView->setDialpadPosition();
    QVERIFY( pos != mBaseView->mDialpad->pos() );
}

void  UT_LogsBaseView::testDialpadClosed()
{
    mBaseView->mDialpad->editor().setText( QString("hello") );
    mBaseView->dialpadClosed();
    QVERIFY( !mBaseView->mDialpad->editor().text().isEmpty() );
}

void  UT_LogsBaseView::testDialpadOpened()
{
    // Base view impl never goes to matches view as logsModel is null
    //
    
    mBaseView->mRepository.model()->setPredictiveSearch(false);
    mBaseView->mDialpad->editor().setText( QString("hello") );
    mBaseView->dialpadOpened();
    QVERIFY( mViewManager->mViewId == LogsUnknownViewId );
    
    mBaseView->mRepository.model()->setPredictiveSearch(true);
    mBaseView->dialpadOpened();
    QVERIFY( mViewManager->mViewId == LogsUnknownViewId );

    mViewManager->reset();
    mBaseView->mDialpad->editor().setText( "" );
    mBaseView->dialpadOpened();
    QVERIFY( mViewManager->mViewId == LogsUnknownViewId );
}

void  UT_LogsBaseView::testDialpadEditorTextChanged()
{      
    // View does not change if contact search is off
    mViewManager->reset();
    mBaseView->mDialpad->editor().setText( QString("2") );
    mBaseView->mRepository.model()->setPredictiveSearch(false);
    mBaseView->dialpadEditorTextChanged();
    QVERIFY( mViewManager->mViewId == LogsUnknownViewId );
    QVERIFY( mBaseView->mDialpad->mIsCallButtonEnabled );
}

void  UT_LogsBaseView::testChangeFilter()
{
    QVERIFY( mViewManager->mViewId == LogsUnknownViewId );
    HbAction*  action = new HbAction();
    action->setObjectName(logsShowFilterMissedMenuActionId);
    mBaseView->changeFilter(action);
    QVERIFY( mViewManager->mViewId == LogsRecentViewId );
}

void UT_LogsBaseView::testModel()
{
    QVERIFY( !mBaseView->model() );
}

void UT_LogsBaseView::testOpenContactsApp()
{
    QtHighwayStubHelper::reset();
    mBaseView->openContactsApp();
    QVERIFY( QtHighwayStubHelper::service() == "com.nokia.services.phonebookappservices.Launch" );
    QVERIFY( QtHighwayStubHelper::message() == "launch()" );
}


void UT_LogsBaseView::testInitiateCallback()
{
    LogsCall::resetTestData();
    //call can't be created
    QVERIFY( !mBaseView->mCall );
    mBaseView->initiateCallback(QModelIndex());
    QVERIFY( LogsCall::lastCalledFunction().isEmpty() );
    
    //call can be created should be tested in derived class    
}

void UT_LogsBaseView::testInitiateCall()
{
    LogsCall::resetTestData();
    //no call
    QVERIFY( !mBaseView->mCall );
    mBaseView->initiateCall(LogsCall::TypeLogsVoiceCall);
    QVERIFY( LogsCall::lastCalledFunction().isEmpty() );
    
    //call exists
    mBaseView->mCall = new LogsCall();
    mBaseView->initiateCall(LogsCall::TypeLogsVideoCall);
    QVERIFY( LogsCall::lastCalledFunction() == QString("call") );
    QVERIFY( mBaseView->mCall->mTestLastCallType == LogsCall::TypeLogsVideoCall );
}

void UT_LogsBaseView::testShowListItemMenu()
{
    HbStubHelper::reset();

    mBaseView->mDialpad->openDialpad();
    //menu doen't have any actions
    HbListViewItem* item = new HbListViewItem();
    mBaseView->showListItemMenu( item, QPointF() );
    QVERIFY( HbStubHelper::widgetActionsCount() == 0 );
    QVERIFY( !HbStubHelper::menuShown() );
    //check that dialpad has closed
    QVERIFY( !mBaseView->mDialpad->isVisible() );
    
    //menu has actions and can be executed should be tested in derived class
 }

void UT_LogsBaseView::testPopulateListItemMenu()
{
    HbStubHelper::reset();
    //no call/message/contact, menu has not actions
    HbMenu menu;
    mBaseView->populateListItemMenu(menu);
    QVERIFY( HbStubHelper::widgetActionsCount() == 0 );
    
    //call, message and contact exist, menu has actions
    mBaseView->mCall = new LogsCall();
    mBaseView->mMessage = new LogsMessage();
    mBaseView->mContact = new LogsContact();
    mBaseView->populateListItemMenu(menu);
    QVERIFY( HbStubHelper::widgetActionsCount() == 5 );
}



void UT_LogsBaseView::testCloseEmptyMenu()
{
    LogsRecentCallsView* view = mRepository->recentCallsView();
    
    //visible actions exist
    QVERIFY( view->menu()->actions().count() > 0 );
    HbStubHelper::setWidgetOpen(true);
    view->closeEmptyMenu();
    QVERIFY(HbStubHelper::isWidgetOpen());
    
    //no visible actions
    foreach (QAction* action, view->menu()->actions()) {
        action->setVisible(false);
    }
    view->closeEmptyMenu();
    QVERIFY(!HbStubHelper::isWidgetOpen());
    
    //no actions
    HbStubHelper::setWidgetOpen(true);
    view->menu()->actions().clear();
    view->closeEmptyMenu();
    QVERIFY(!HbStubHelper::isWidgetOpen());
}

void UT_LogsBaseView::testSaveContact()
{
    //no contact, no actions
    mBaseView->saveContact();
    
    //contact exists, popup would be shown
    mBaseView->mContact = new LogsContact();
    mBaseView->saveContact();    
}

void UT_LogsBaseView::testUpdateCall()
{
    mBaseView->mCall = new LogsCall();
    mBaseView->updateCall( QModelIndex() );
    QVERIFY( !mBaseView->mCall );
}

void UT_LogsBaseView::testUpdateMessage()
{    
    mBaseView->mMessage = new LogsMessage();
    mBaseView->updateMessage( QModelIndex() );
    QVERIFY( !mBaseView->mMessage );
}

void UT_LogsBaseView::testUpdateContact()
{
    mBaseView->mContact = new LogsContact();
    mBaseView->updateContact( QModelIndex() );
    QVERIFY( !mBaseView->mContact );
}

void UT_LogsBaseView::testActivateEmptyListIndicator()
{
    QStringListModel model;
    
    // Label not in repository
    QVERIFY( !mBaseView->mEmptyListLabel );
    mBaseView->activateEmptyListIndicator(&model);
    QVERIFY( !mBaseView->mEmptyListLabel );
    
    // Empty model, label is set visible
    mRepository->recentCallsView();
    QVERIFY( !mBaseView->mEmptyListLabel );
    mBaseView->activateEmptyListIndicator(&model);
    QVERIFY( mBaseView->mEmptyListLabel );
    
    // Label exists already, situation does not change
    mBaseView->activateEmptyListIndicator(&model);
    QVERIFY( mBaseView->mEmptyListLabel );
    
    // Null list does nothing
    mBaseView->activateEmptyListIndicator(0);
    QVERIFY( mBaseView->mEmptyListLabel );
}

void UT_LogsBaseView::testDeactivateEmptyListIndicator()
{
    QVERIFY( !mBaseView->mEmptyListLabel );
    mBaseView->deactivateEmptyListIndicator(0);
    HbLabel label;
    mBaseView->mEmptyListLabel = &label;
    mBaseView->deactivateEmptyListIndicator(0);
    QVERIFY( mBaseView->mEmptyListLabel ); // Label not removed at deactivation
}

void UT_LogsBaseView::testUpdateEmptyListLabelVisibility()
{
     // Base view does not have model, nothing happens
    mBaseView->updateEmptyListLabelVisibility();
}

void UT_LogsBaseView::testUpdateListLayoutName()
{
    mBaseView->mViewManager.mainWindow().setOrientation( Qt::Vertical );
    HbListView list;

    //default layout
    list.setLayoutName("dummy");
    mBaseView->updateListLayoutName(list);
    QVERIFY( list.layoutName() == logsListDefaultLayout );
    
    //same layout, not updated
    mBaseView->updateListLayoutName(list);
    QVERIFY( list.layoutName() == logsListDefaultLayout );
    
    //landscape without dialpad
    mBaseView->mViewManager.mainWindow().setOrientation( Qt::Horizontal );
    mBaseView->updateListLayoutName(list);
    QVERIFY( list.layoutName() == logsListLandscapeLayout );
    
    //landscape with dialpad
    mBaseView->mDialpad->openDialpad();
    mBaseView->updateListLayoutName(list);
    QVERIFY( list.layoutName() == logsListLandscapeDialpadLayout );
    
    //landscape with dialpad, ignoreDialpad is true
    mBaseView->updateListLayoutName(list, true);
    QVERIFY( list.layoutName() == logsListDefaultLayout );

    //landscape without dialpad, ignoreDialpad is true
    mBaseView->mDialpad->closeDialpad();
    mBaseView->updateListLayoutName(list, true);
    QVERIFY( list.layoutName() == logsListLandscapeLayout );
}

void UT_LogsBaseView::testUpdateListSize()
{
    mBaseView->mLayoutSectionName = "dummy";
    
    //default section is loaded
    mBaseView->mViewManager.mainWindow().setOrientation( Qt::Vertical );
    mBaseView->mDialpad->closeDialpad();
    mBaseView->updateListSize();
    QVERIFY( mBaseView->mLayoutSectionName == logsViewDefaultSection );
    
    //same section again, not loaded
    mBaseView->updateListSize();
    QVERIFY( mBaseView->mLayoutSectionName == logsViewDefaultSection );

    //portrait with dialpad
    mBaseView->mDialpad->openDialpad();
    mBaseView->updateListSize();
    QVERIFY( mBaseView->mLayoutSectionName == logsViewPortraitDialpadSection );
    
    //landscape with dialpad
    mBaseView->mViewManager.mainWindow().setOrientation( Qt::Horizontal );
    mBaseView->updateListSize();
    QVERIFY( mBaseView->mLayoutSectionName == logsViewLandscapeDialpadSection );
}

void UT_LogsBaseView::testHandleOrientationChanged()
{
    //dialpad position recalculated
    QPointF pos;
    mBaseView->mDialpad->setPos(pos);    
    mBaseView->mViewManager.mainWindow().setOrientation( Qt::Horizontal );
    mBaseView->handleOrientationChanged();
    QVERIFY( pos != mBaseView->mDialpad->pos() );
}

void UT_LogsBaseView::testHandleExit()
{
    mViewManager->reset();
    mBaseView->handleExit();
    QVERIFY( mViewManager->mExitCalled );
}

void UT_LogsBaseView::testIsExitAllowed()
{
    QVERIFY( mBaseView->isExitAllowed() );
}

void UT_LogsBaseView::testAddToContacts()
{
    // Has dialpad input, contact is saved with that num
    mBaseView->mDialpad->mIsOpen = true;
    mBaseView->mDialpad->mLineEdit->setText("3344");
    mBaseView->addToContacts();
    QVERIFY( mBaseView->mContact->mNumber == "3344" );
    
    // No dialpad input, contact saved using list item if such exists
    mBaseView->mDialpad->mIsOpen = false;
    mBaseView->mContact->mNumber = "1234";
    mBaseView->addToContacts();
    QVERIFY( mBaseView->mContact->mNumber == "1234" );
    
    // No contact at all
    delete mBaseView->mContact;
    mBaseView->mContact = 0;
    mBaseView->addToContacts();
    QVERIFY( !mBaseView->mContact );
}

void UT_LogsBaseView::testSendMessageToCurrentNum()
{
    // No input
    LogsMessage::resetTestData();
    mBaseView->mDialpad->mIsOpen = false;
    mBaseView->mDialpad->mLineEdit->setText("");
    mBaseView->sendMessageToCurrentNum();
    QVERIFY( !LogsMessage::isMessageSent() );
    
    // Input
    mBaseView->mDialpad->mIsOpen = true;
    mBaseView->mDialpad->mLineEdit->setText("4546626262");
    mBaseView->sendMessageToCurrentNum();
    QVERIFY( LogsMessage::isMessageSent() );
}

void UT_LogsBaseView::testDeleteEvent()
{
    // No model, nothing happens
    QVERIFY( !HbStubHelper::dialogShown() );
    QVERIFY( !mBaseView->mDetailsModel );
    mBaseView->deleteEvent();
    QVERIFY( !HbStubHelper::dialogShown() );

    // Model exists, confirmation dialog is shown
    mViewManager->reset();
    LogsDetailsModel* model = new LogsDetailsModel();
    mBaseView->mDetailsModel = model;
    mBaseView->deleteEvent();
    QVERIFY( HbStubHelper::dialogShown() );
}

void UT_LogsBaseView::testDeleteEventOkAnswer()
{
    // No model, nothing happens
    QVERIFY( LogsDetailsModel::mLastCallName.isEmpty() );
    QVERIFY( !mBaseView->mDetailsModel );
    mBaseView->deleteEventOkAnswer();
    QVERIFY( LogsDetailsModel::mLastCallName.isEmpty() );

    // Model exists, call to delete event made and view is closed
    mViewManager->reset();
    LogsDetailsModel* model = new LogsDetailsModel();
    mBaseView->mDetailsModel = model;
    mBaseView->deleteEventOkAnswer();
    QVERIFY( LogsDetailsModel::mLastCallName == QLatin1String("clearEvent") );
    QVERIFY( !mViewManager->mPreviousActivated );    
}

void UT_LogsBaseView::testAskConfirmation()
{
    // No receiver and slots specified
    mBaseView->askConfirmation(QLatin1String("heading"), QLatin1String("text"), 0);
    QVERIFY( HbStubHelper::dialogShown() );
    
    // Receiver and slots specified
    HbStubHelper::reset();
    mBaseView->askConfirmation(QLatin1String("heading"), QLatin1String("text"), this,
            SLOT(""), SLOT(""));
    QVERIFY( HbStubHelper::dialogShown() );
}