diff -r dec420019252 -r cf5481c2bc0b videocollection/videocollectionview/tsrc/testhintwidget/src/testhintwidget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videocollection/videocollectionview/tsrc/testhintwidget/src/testhintwidget.cpp Fri Apr 16 14:59:52 2010 +0300 @@ -0,0 +1,382 @@ +/** +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: tester for methods in VideoListWidget +* +*/ + +#include +#include +#include +#include +#include +#include + +#include "videocollectionuiloader.h" +#include "videocollectionviewutils.h" +#include "videocollectionviewutilsdata.h" +#include "videocollectionuiloaderdata.h" +#include "testhintwidget.h" + +#define private public +#include "videohintwidget.h" +#undef private + +// --------------------------------------------------------------------------- +// main +// --------------------------------------------------------------------------- +// +int main(int argc, char *argv[]) +{ + HbApplication app(argc, argv); + HbApplication::setKeypadNavigationEnabled(false); + HbMainWindow mainWnd; + hbInstance->mWindowses.append(&mainWnd); + + TestHintWidget 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\\testhintwidget.txt"; + res = QTest::qExec(&tv, 3, pass); + } + + return res; +} + +// --------------------------------------------------------------------------- +// constructor +// --------------------------------------------------------------------------- +// +TestHintWidget::TestHintWidget(): + mTestObject(0), + mUiLoader(0) +{ + // nop +} + +// --------------------------------------------------------------------------- +// destructor +// --------------------------------------------------------------------------- +// +TestHintWidget::~TestHintWidget() +{ + cleanup(); +} + +// --------------------------------------------------------------------------- +// init +// --------------------------------------------------------------------------- +// +void TestHintWidget::init(bool callInitialize) +{ + mUiLoader = new VideoCollectionUiLoader; + + HbDocumentLoader::mFindWidgetFails = false; + bool ok(false); + mUiLoader->load(DOCML_VIDEOCOLLECTIONVIEW_FILE, &ok); + if(!ok) + { + cleanup(); + QFAIL("docml loading failed!"); + } + + mTestObject = mUiLoader->findObject(DOCML_NAME_VC_VIDEOHINTWIDGET); + if(!mTestObject) + { + mTestObject = new VideoHintWidget(mUiLoader); + } + + if (callInitialize) + { + QVERIFY(mTestObject->initialize() == 0); + } +} + +// --------------------------------------------------------------------------- +// cleanup +// --------------------------------------------------------------------------- +// +void TestHintWidget::cleanup() +{ + if (mUiLoader) + { + VideoHintWidget* temp = mUiLoader->findObject(DOCML_NAME_VC_VIDEOHINTWIDGET); + if (!temp) + { + // need to delete mTestObject as it is not owned by uiloader. + delete mTestObject; + mTestObject = 0; + } + mTestObject = 0; + + delete mUiLoader; + mUiLoader = 0; + } + + VideoCollectionViewUtilsData::reset(); + VideoCollectionUiLoaderData::reset(); +} + +// --------------------------------------------------------------------------- +// testInitialize +// --------------------------------------------------------------------------- +// +void TestHintWidget::testInitialize() +{ + // getServiceIconStrings fails and returns -1; + init(false); + VideoCollectionViewUtilsData::mGetServiceIconStringsFails = true; + QCOMPARE(mTestObject->initialize(), -1); + cleanup(); + + // succeed + init(false); + VideoCollectionViewUtilsData::mGetServiceIconStringsFails = false; + VideoCollectionViewUtilsData::mIconString = "test"; + VideoCollectionViewUtilsData::mPressedString = "test2"; + QCOMPARE(mTestObject->initialize(), 0); + QCOMPARE(mTestObject->mServiceIconString, VideoCollectionViewUtilsData::mIconString); + QCOMPARE(mTestObject->mServiceIconPressedString, VideoCollectionViewUtilsData::mPressedString); + + // second call to initialize. + VideoCollectionViewUtilsData::mIconString = "test3"; + VideoCollectionViewUtilsData::mPressedString = "test4"; + QCOMPARE(mTestObject->initialize(), 0); + QCOMPARE(mTestObject->mServiceIconString, VideoCollectionViewUtilsData::mIconString); + QCOMPARE(mTestObject->mServiceIconPressedString, VideoCollectionViewUtilsData::mPressedString); + cleanup(); +} + +// --------------------------------------------------------------------------- +// testSetLevel +// --------------------------------------------------------------------------- +// +void TestHintWidget::testSetLevel() +{ + init(true); + mTestObject->setVisible(false); + + mTestObject->setLevel(VideoHintWidget::Collection); + QCOMPARE(mTestObject->mCurrentLevel, VideoHintWidget::Collection); + + mTestObject->setLevel(VideoHintWidget::AllVideos); + QCOMPARE(mTestObject->mCurrentLevel, VideoHintWidget::AllVideos); + + mTestObject->setLevel(VideoHintWidget::AllVideos); + QCOMPARE(mTestObject->mCurrentLevel, VideoHintWidget::AllVideos); + + mTestObject->setLevel(VideoHintWidget::Collection); + QCOMPARE(mTestObject->mCurrentLevel, VideoHintWidget::Collection); + cleanup(); +} + +// --------------------------------------------------------------------------- +// testActivate +// --------------------------------------------------------------------------- +// +void TestHintWidget::testActivate() +{ + init(true); + + mTestObject->setVisible(false); + + // mServiceIconString empty. + mTestObject->mServiceIconString = QString(); + mTestObject->activate(); + QVERIFY(mTestObject->mServiceIcon == 0); + QVERIFY(mTestObject->isVisible() == false); + QVERIFY(mTestObject->mActivated == false); + + // mServiceIconPressedString empty. + mTestObject->mServiceIconString = "test"; + mTestObject->mServiceIconPressedString = QString(); + mTestObject->activate(); + QVERIFY(mTestObject->mServiceIcon == 0); + QVERIFY(mTestObject->isVisible() == false); + QVERIFY(mTestObject->mActivated == false); + + // successful case. + mTestObject->mServiceIconPressedString = "test2"; + HbLabel *noVideosLabel = mUiLoader->findWidget(DOCML_NAME_NO_VIDEOS_LABEL); + QVERIFY(noVideosLabel); + noVideosLabel->setVisible(false); + + mTestObject->activate(); + QVERIFY(mTestObject->isVisible()); + QVERIFY(mTestObject->mServiceIcon != 0); + QCOMPARE(mTestObject->mServiceIcon->iconName(), mTestObject->mServiceIconString); + QCOMPARE(mTestObject->mServiceIcon->iconName(QIcon::Normal, QIcon::On), + mTestObject->mServiceIconPressedString); + QVERIFY(noVideosLabel->isVisible()); // checks that updateUiComponents() has been called. + QVERIFY(mTestObject->mActivated == true); + + cleanup(); +} + +// --------------------------------------------------------------------------- +// testDeactivate +// --------------------------------------------------------------------------- +// +void TestHintWidget::testDeactivate() +{ + init(true); + + mTestObject->setVisible(true); + mTestObject->mActivated = true; + + // when serviceButton does not exist + mTestObject->mServiceIcon = 0; + mTestObject->mAddVideosIcon = 0; + HbDocumentLoader::mFindWidgetFails = true; + mTestObject->deactivate(); + QVERIFY(mTestObject->mActivated == false); + QVERIFY(mTestObject->isVisible() == false); + + // when icons are null, but servicebutton has non-null icon. + mTestObject->mActivated = true; + mTestObject->setVisible(true); + HbDocumentLoader::mFindWidgetFails = false; + HbPushButton *serviceButton = mUiLoader->findWidget(DOCML_NAME_HINT_BUTTON); + QVERIFY(serviceButton); + serviceButton->setIcon(HbIcon(QIcon(QPixmap(QSize(100,100))))); + QVERIFY(serviceButton->icon().isNull() == false); // make sure test is valid. + mTestObject->deactivate(); + QVERIFY(serviceButton->icon().isNull()); + QVERIFY(mTestObject->isVisible() == false); + + // when icons are non-null, but widget is not activated. + mTestObject->setVisible(true); + mTestObject->mServiceIcon = new HbIcon; + mTestObject->mAddVideosIcon = new HbIcon; + mTestObject->deactivate(); + QVERIFY(mTestObject->mServiceIcon != 0); + QVERIFY(mTestObject->mAddVideosIcon != 0); + QVERIFY(mTestObject->isVisible() == true); + + // when icons are non-null and widget is activated. + mTestObject->mActivated = true; + mTestObject->deactivate(); + QVERIFY(mTestObject->mServiceIcon == 0); + QVERIFY(mTestObject->mAddVideosIcon == 0); + QVERIFY(mTestObject->isVisible() == false); + + cleanup(); +} + +// --------------------------------------------------------------------------- +// testUpdateUiComponents +// --------------------------------------------------------------------------- +// +void TestHintWidget::testUpdateUiComponents() +{ + HbMainWindow *mainWnd = hbInstance->allMainWindows()[0]; + mainWnd->setOrientation(Qt::Horizontal); + + init(true); + + mTestObject->mServiceIcon = new HbIcon(QIcon(QPixmap(QSize(100,100)))); + mTestObject->mAddVideosIcon = new HbIcon(QIcon(QPixmap(QSize(50,50)))); + mTestObject->mActivated = true; + + HbDocumentLoader::mFindWidgetFails = true; + // when a widget cannot be found. + mTestObject->setLevel(VideoHintWidget::AllVideos); + // no verification possible except that it doesn't crash? + + HbDocumentLoader::mFindWidgetFails = false; + HbLabel *hintLabel = mUiLoader->findWidget(DOCML_NAME_HINT_LABEL); + QVERIFY(hintLabel); + HbPushButton *serviceButton = mUiLoader->findWidget(DOCML_NAME_HINT_BUTTON); + QVERIFY(serviceButton); + + mainWnd->setOrientation(Qt::Vertical); + mTestObject->setLevel(VideoHintWidget::AllVideos); + QVERIFY(serviceButton->isVisible() == false); + QVERIFY(serviceButton->icon().isNull() == false); + QVERIFY(serviceButton->icon().qicon().cacheKey() == mTestObject->mServiceIcon->qicon().cacheKey()); + QVERIFY(hintLabel->isVisible()); + + mainWnd->setOrientation(Qt::Horizontal); + mTestObject->mButtonShown = true; + mTestObject->setLevel(VideoHintWidget::Collection); + QVERIFY(serviceButton->isVisible()); + QVERIFY(serviceButton->icon().isNull() == false); + QVERIFY(serviceButton->icon().qicon().cacheKey() == mTestObject->mAddVideosIcon->qicon().cacheKey()); + QVERIFY(hintLabel->isVisible() == false); + + mTestObject->mButtonShown = false; + mTestObject->setLevel(VideoHintWidget::Collection); + QVERIFY(serviceButton->isVisible() == false); + + cleanup(); +} + +// --------------------------------------------------------------------------- +// testOrientationChangedSlot +// --------------------------------------------------------------------------- +// +void TestHintWidget::testOrientationChangedSlot() +{ + // NOTE: This also checks that the signals are connected and + // disconnected correctly. + + HbMainWindow *mainWnd = hbInstance->allMainWindows()[0]; + mainWnd->setOrientation(Qt::Horizontal); + connect(this, SIGNAL(testSignal(Qt::Orientation)), mainWnd, SIGNAL(orientationChanged(Qt::Orientation))); + + init(true); + + HbLabel *noVideosLabel = mUiLoader->findWidget(DOCML_NAME_NO_VIDEOS_LABEL); + QVERIFY(noVideosLabel); + + mTestObject->mServiceIconString = "dummy"; + mTestObject->mServiceIconPressedString = "dummy2"; + + // test that updateUiComponents is not called when only initialize has been called, + // ie that no activate calls have been made yet. + // mTestObject->setVisible is needed because othervise childs cannot be set visible, ie the + // serviceButton->setVisible does not work as expected. + mTestObject->setVisible(true); + noVideosLabel->setVisible(true); + emit testSignal(Qt::Vertical); + QVERIFY(noVideosLabel->isVisible()); + mTestObject->setVisible(false); + + // tests that updateUiComponents is called when widget is visible. + mTestObject->activate(); + noVideosLabel->setVisible(false); + emit testSignal(Qt::Horizontal); + QVERIFY(noVideosLabel->isVisible()); + mTestObject->deactivate(); + + // tests that updateUiComponents is not called when widget is not visible: + // mTestObject->setVisible is needed because othervise childs cannot be set visible, ie the + // serviceButton->setVisible does not work as expected. + mTestObject->setVisible(true); + noVideosLabel->setVisible(true); + emit testSignal(Qt::Vertical); + QVERIFY(noVideosLabel->isVisible()); + + cleanup(); +} + +// end of file