diff -r d1dadafc5584 -r 26079c1bb561 homescreensrv_plat/taskswitcher_api/tsrc/t_tstasksettings/src/t_tstasksettings.cpp --- /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 + +#include +#include +#include + +#include +#include + +#if defined (Q_OS_SYMBIAN) +#include +#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 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 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 myTask = unitTestTask(); + QVERIFY(myTask.data()); + previousScreenshot = myTask->screenshot(); + } + + QVERIFY(mTaskSettings.registerScreenshot(imageWithCircle())); + QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged()))); + + QPixmap screenshotAfterFirstRegistration; + { + QSharedPointer 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 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 myTask = unitTestTask(); + QVERIFY(myTask.data()); + } + + // hide unit test task + mTaskSettings.setVisibility(false); + QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged()))); + { + QSharedPointer myTask = unitTestTask(); + QVERIFY(!myTask.data()); + } + + // show unit test task + mTaskSettings.setVisibility(true); + QVERIFY(TsTestUtils::waitForSignal(&mTaskMonitor, SIGNAL(taskListChanged()))); + { + QSharedPointer myTask = unitTestTask(); + QVERIFY(myTask.data()); + } +} + +QSharedPointer T_TsTaskSettings::unitTestTask() +{ + // find unit test task + QSharedPointer 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 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)