videocollection/videocollectionview/tsrc/testhintwidget/src/testhintwidget.cpp
changeset 15 cf5481c2bc0b
child 47 45e72b57a2fd
--- /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 <hbicon.h>
+#include <hbmainwindow.h>
+#include <hbinstance.h>
+#include <hblabel.h>
+#include <hbpushbutton.h>
+#include <hbapplication.h>
+
+#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<VideoHintWidget>(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<VideoHintWidget>(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<HbLabel>(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<HbPushButton>(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<HbLabel>(DOCML_NAME_HINT_LABEL);
+    QVERIFY(hintLabel);
+    HbPushButton *serviceButton = mUiLoader->findWidget<HbPushButton>(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<HbLabel>(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