homescreensrv_plat/taskswitcher_api/tsrc/t_tstasksettings/src/t_tstasksettings.cpp
changeset 125 26079c1bb561
child 127 7b66bc3c6dc9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreensrv_plat/taskswitcher_api/tsrc/t_tstasksettings/src/t_tstasksettings.cpp	Wed Oct 06 16:00:22 2010 +0300
@@ -0,0 +1,225 @@
+/*
+* 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:
+*
+*/
+
+#include "t_tstasksettings.h"
+
+#include <s32mem.h>
+
+#include <QtTest/QtTest>
+#include <QDesktopWidget>
+#include <QPainter>
+
+#include <QDebug>
+#include <XQConversions>
+
+#if defined (Q_OS_SYMBIAN)
+#include <coecntrl.h>
+#include "tstaskmonitorclient.h"
+#include "tsscreenshotclient.h"
+#include "tsutils.h"
+using TaskSwitcher::CleanupResetAndDestroyPushL;
+#endif
+
+#include "tstask.h"
+#include "tstaskchangeinfo.h"
+#include "tstestutils.h"
+
+void T_TsTaskSettings::initTestCase()
+{
+    while (!unitTestTask().data())
+        QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+}
+
+void T_TsTaskSettings::testRegisteringScreenshotTriggersTaskListChangeSignal()
+{    
+    QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle()));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+}
+
+void T_TsTaskSettings::testUnregisteringScreenshotTriggersTaskListChangeSignal()
+{    
+    QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle()));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    
+    QVERIFY(mTaskSettings.unregisterScreenshot());
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+}
+
+void T_TsTaskSettings::testIconIsReturnedAfterUnregisteringScreenshot()
+{    
+    // get icon
+    QSharedPointer<TsTask> taskBefore = unitTestTask();
+    QVERIFY(taskBefore.data());
+    QPixmap icon = taskBefore->screenshot();
+    QVERIFY(!icon.isNull());
+    
+    // register and unregister screenshot
+    QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle()));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));    
+    QVERIFY(mTaskSettings.unregisterScreenshot());
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    
+    // compare pixmap returned after register/unregister with icon
+    QSharedPointer<TsTask> taskAfter = unitTestTask();
+    QVERIFY(taskAfter.data());
+    QVERIFY(taskAfter->screenshot().toImage() == icon.toImage());
+}
+
+void T_TsTaskSettings::testRegisteringEmptyPixmapReturnsFalse()
+{
+    QVERIFY(!mTaskSettings.registerScreenshot(QPixmap()));
+}
+
+void T_TsTaskSettings::testRegisteringTheSameScreenshotTwiceTriggersTaskListChangeSignal()
+{    
+    QPixmap image = imageWithCircle();
+    
+    QVERIFY(mTaskSettings.registerScreenshot(image));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));    
+    QVERIFY(mTaskSettings.registerScreenshot(image));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));    
+}
+
+void T_TsTaskSettings::testRegisteringOverwritesOldScreenshot()
+{
+    QPixmap previousScreenshot;
+    {
+        QSharedPointer<TsTask> myTask = unitTestTask();
+        QVERIFY(myTask.data());    
+        previousScreenshot = myTask->screenshot();
+    }
+        
+    QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle()));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    
+    QPixmap screenshotAfterFirstRegistration;
+    {
+        QSharedPointer<TsTask> myTask = unitTestTask();
+        QVERIFY(myTask.data());
+        screenshotAfterFirstRegistration = myTask->screenshot();
+    }
+    
+    QVERIFY(previousScreenshot.toImage() != screenshotAfterFirstRegistration.toImage());
+    
+    QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle()));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    
+    QPixmap screenshotAfterSecondRegistration;
+    {
+        QSharedPointer<TsTask> myTask = unitTestTask();
+        QVERIFY(myTask.data());
+        screenshotAfterSecondRegistration = myTask->screenshot();
+    }
+    
+    QVERIFY(screenshotAfterSecondRegistration.toImage() != screenshotAfterFirstRegistration.toImage());
+}
+
+void T_TsTaskSettings::testRegisteringFailsIfHigherPriorityScreenshotIsRegistered()
+{
+    QPixmap highPriorityScreenshot = imageWithCircle();
+    registerHighPriorityScreenshot(highPriorityScreenshot);
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    
+    QVERIFY(!mTaskSettings.registerScreenshot(imageWithCircle()));
+    
+    // clean up and verify the screenshots can be registered
+    QVERIFY(mTaskSettings.unregisterScreenshot());
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle()));
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+}
+
+void T_TsTaskSettings::testChangingVisibilityOfApplication()
+{
+    {
+        QSharedPointer<TsTask> myTask = unitTestTask();
+        QVERIFY(myTask.data());
+    }
+    
+    // hide unit test task
+    mTaskSettings.setVisibility(false);
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    {
+        QSharedPointer<TsTask> myTask = unitTestTask();
+        QVERIFY(!myTask.data());
+    }
+
+    // show unit test task
+    mTaskSettings.setVisibility(true);
+    QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged())));
+    {
+        QSharedPointer<TsTask> myTask = unitTestTask();
+        QVERIFY(myTask.data());
+    }    
+}
+
+QSharedPointer<TsTask> T_TsTaskSettings::unitTestTask()
+{
+    // find unit test task
+    QSharedPointer<TsTask> myTask;
+    foreach(TsTaskChange taskChange, mTaskMonitor.changeList(true)) {
+        if (!taskChange.second.isNull()) {
+            if (taskChange.second->name() == "t_tstasksettings") {
+                myTask = taskChange.second;
+                break;
+            }
+        }
+    }
+    return myTask;
+}
+
+bool T_TsTaskSettings::registerHighPriorityScreenshot(const QPixmap &screenshot)
+{
+#if defined (Q_OS_SYMBIAN)
+    int wgId = QApplication::desktop()->winId()->ControlEnv()->RootWin().WindowGroupId();
+    
+    QScopedPointer<CFbsBitmap> bitmap(screenshot.toSymbianCFbsBitmap());
+    if (bitmap.isNull()) 
+        return false;
+        
+    int error(KErrGeneral);
+    
+    QT_TRAP_THROWING (    
+        CTsScreenshotClient* screenshotClient = CTsScreenshotClient::NewLC();            
+        error = screenshotClient->RegisterScreenshot(bitmap.data(), wgId, High);
+        CleanupStack::PopAndDestroy(screenshotClient);
+    );
+    
+    return error == KErrNone;
+#else
+    return false;
+#endif
+}
+
+QPixmap T_TsTaskSettings::imageWithCircle()
+{
+    static int hue = 0;
+    QPixmap screenshot(10, 10);
+    
+    {
+        QPainter painter(&screenshot);
+        painter.setBrush(Qt::black);
+        painter.drawRect(screenshot.rect());
+        painter.setBrush(QColor::fromHsv(hue, 255, 255));
+        painter.drawEllipse(screenshot.rect());
+    }
+
+    hue += 17;
+    return screenshot;
+}
+
+QTEST_MAIN(T_TsTaskSettings)